<?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>166658</bug_id>
          
          <creation_ts>2017-01-03 13:44:22 -0800</creation_ts>
          <short_desc>Reduce the use of EncodedJSValue, and use JSValue instead.</short_desc>
          <delta_ts>2017-01-06 12:00:47 -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>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ap</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263516</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-03 13:44:22 -0800</bug_when>
    <thetext>Existing code uses EncodedJSValue for passing JSValues in and out of host functions.  However, it does not seem that this is necessary in most cases.  Specifically, NativeFunction, GetValueFunc, and PutValueFunc can all use JSValue with no performance implications.  Using JSValue directly (instead of EncodedJSValue) also improves type safety, and reduces the need to marshal values back and forth using JSValue::encode() and JSValue::decode().  This makes the code more easy to read and write, with no performance loss.

The 2 primary reason for code to still use EncodedJSValue are:
1. functions that require C linkage (e.g. JIT_OPERATION functions).
2. as an element storage type where using EncodedJSValue allows us to use the trivial constructor for int64_t.

Note: this patch is not exhaustive in removing all unnecessary uses of EncodedJSValue.  It merely tries to reduce it as much as possible with minimal effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263520</commentid>
    <comment_count>1</comment_count>
      <attachid>297946</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-03 13:52:00 -0800</bug_when>
    <thetext>Created attachment 297946
x86_64 JSC benchmark results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263522</commentid>
    <comment_count>2</comment_count>
      <attachid>297947</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-03 13:54:00 -0800</bug_when>
    <thetext>Created attachment 297947
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263537</commentid>
    <comment_count>3</comment_count>
      <attachid>297951</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-03 14:13:27 -0800</bug_when>
    <thetext>Created attachment 297951
proposed patch: rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263538</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-03 14:15:01 -0800</bug_when>
    <thetext>Attachment 297951 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:129:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: fuzzing  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 192 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>1263588</commentid>
    <comment_count>5</comment_count>
      <attachid>297966</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-03 15:51:59 -0800</bug_when>
    <thetext>Created attachment 297966
proposed patch: with gtk/efl build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263738</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-01-04 04:30:09 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 297966 [details]
&gt; proposed patch: with gtk/efl build fixes.

I checked this patch on ARM Linux. (JSCOnly port) It works fine on AArch64,
but almost all tests crash on ARMv7 with ARM and Thumb2 backend too. I tried
to get a crash backtrace, but got only a useless log (with and without JIT):
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0xfffffffc in ?? ()

This memory address is completely invalid, no idea what happens before the crash.

I don&apos;t and won&apos;t have more time to investigate this issue, maybe 
GTK guys have, AFAIK they are interested in a working ARMv7 backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264151</commentid>
    <comment_count>7</comment_count>
      <attachid>297966</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-05 10:15:48 -0800</bug_when>
    <thetext>Comment on attachment 297966
proposed patch: with gtk/efl build fixes.

Taking out of review until after I do some due diligence on whether JSValues are still passed in registers on all ports with this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264455</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-06 10:32:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Created attachment 297966 [details]
&gt; &gt; proposed patch: with gtk/efl build fixes.
&gt; 
&gt; I checked this patch on ARM Linux. (JSCOnly port) It works fine on AArch64,
&gt; but almost all tests crash on ARMv7 with ARM and Thumb2 backend too. I tried
&gt; to get a crash backtrace, but got only a useless log (with and without JIT):
&gt; Program terminated with signal SIGSEGV, Segmentation fault.
&gt; #0  0xfffffffc in ?? ()
&gt; 
&gt; This memory address is completely invalid, no idea what happens before the
&gt; crash.
&gt; 
&gt; I don&apos;t and won&apos;t have more time to investigate this issue, maybe 
&gt; GTK guys have, AFAIK they are interested in a working ARMv7 backend.

I did some tests on an x86 chroot (32 bits) and I confirm this patch breaks JSC on WebKitGTK+:

Before the patch:

./WebKitBuild/Release/bin/jsc
&gt;&gt;&gt; a
Exception: ReferenceError: Can&apos;t find variable: a


After the patch:

./WebKitBuild/Release/bin/jsc
&gt;&gt;&gt; a
Segmentation fault (core dumped)


I&apos;m attaching the backtrace for the coredump generated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264456</commentid>
    <comment_count>9</comment_count>
      <attachid>298213</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-06 10:34:50 -0800</bug_when>
    <thetext>Created attachment 298213
Backtrace from the crash on JSC on a x86 chroot with a WebKitGTK+ build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264472</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-06 11:54:34 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I did some tests on an x86 chroot (32 bits) and I confirm this patch breaks
&gt; JSC on WebKitGTK+:
&gt; 

The issue is not reproducible with WebKitGTK+ on x86_64... so it seems something that only happens on 32-bit platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264473</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-06 11:57:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; The issue is not reproducible with WebKitGTK+ on x86_64... so it seems
&gt; something that only happens on 32-bit platforms.

Carlos, for my reference, what version of GCC were you using to do your 32-bit testing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264475</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-06 12:00:47 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; The issue is not reproducible with WebKitGTK+ on x86_64... so it seems
&gt; &gt; something that only happens on 32-bit platforms.
&gt; 
&gt; Carlos, for my reference, what version of GCC were you using to do your
&gt; 32-bit testing?

gcc version 4.9.2 
Its the default on Debian 8</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>297946</attachid>
            <date>2017-01-03 13:52:00 -0800</date>
            <delta_ts>2017-01-03 13:52:00 -0800</delta_ts>
            <desc>x86_64 JSC benchmark results.</desc>
            <filename>x86_64-jsc-bench-results.txt</filename>
            <type>text/plain</type>
            <size>89866</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBMb25nU3BpZGVyLCBWOFNwaWRlciwgT2N0
YW5lLCBLcmFrZW4sIE1pY3JvYmVuY2htYXJrcywgQXNtQmVuY2gsIGFuZCBDb21wcmVzc2lvbkJl
bmNoIG9uIEdhbGVvbi0yIChNYWNCb29rUHJvMTEsMykuCgpWTXMgdGVzdGVkOgoiYmFzZSIgYXQg
L1ZvbHVtZXMvRGF0YS9iZW5jaC9iYXNlL2pzYwoibmV3IiBhdCAvVm9sdW1lcy9EYXRhL2JlbmNo
L25ldy9qc2MKCkNvbGxlY3RlZCA0IHNhbXBsZXMgcGVyIGJlbmNobWFyay9WTSwgd2l0aCA0IFZN
IGludm9jYXRpb25zIHBlciBiZW5jaG1hcmsuIEVtaXR0ZWQgYSBjYWxsIHRvIGdjKCkgYmV0d2Vl
biBzYW1wbGUgbWVhc3VyZW1lbnRzLgpVc2VkIDEgYmVuY2htYXJrIGl0ZXJhdGlvbiBwZXIgVk0g
aW52b2NhdGlvbiBmb3Igd2FybS11cC4gVXNlZCB0aGUganNjLXNwZWNpZmljIHByZWNpc2VUaW1l
KCkgZnVuY3Rpb24gdG8gZ2V0IG1pY3Jvc2Vjb25kLWxldmVsCnRpbWluZy4gUmVwb3J0aW5nIGJl
bmNobWFyayBleGVjdXRpb24gdGltZXMgd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgaW4g
bWlsbGlzZWNvbmRzLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKU3VuU3BpZGVyOgogICAzZC1jdWJlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljk3NDkrLTAuMTI0MSAgICAg
ICAgICAgIDQuNzUzOCstMC41OTg5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ2NXggZmFzdGVyCiAg
IDNkLW1vcnBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNTMw
NSstMC44MTI4ICAgICAgICAgICAgNS4xNDk2Ky0wLjA1MTUgICAgICAgICAgbWlnaHQgYmUgMS4w
NzQweCBmYXN0ZXIKICAgM2QtcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNC44OTYxKy0wLjUwNTggICAgICAgICAgICA0LjgwNDYrLTAuMjYwOSAgICAgICAg
ICBtaWdodCBiZSAxLjAxOTF4IGZhc3RlcgogICBhY2Nlc3MtYmluYXJ5LXRyZWVzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjIyMTkrLTAuMjcwMCAgICAgICAgICAgIDIuMDQ2MCst
MC4xNzk5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDg2MHggZmFzdGVyCiAgIGFjY2Vzcy1mYW5ua3Vj
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMTM1NistMC4xMjc4ICAgICA/
ICAgICAgNS4xNjgwKy0wLjE4ODQgICAgICAgID8KICAgYWNjZXNzLW5ib2R5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi42ODE1Ky0wLjEzNjEgICAgICAgICAgICAyLjY4
MTQrLTAuMTI5MCAgICAgICAgCiAgIGFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDMuMDEwMSstMC4wMzIxICAgICA/ICAgICAgMy4yMTE1Ky0wLjQ1NDAg
ICAgICAgID8gbWlnaHQgYmUgMS4wNjY5eCBzbG93ZXIKICAgYml0b3BzLTNiaXQtYml0cy1pbi1i
eXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4yMTMwKy0wLjA0MTcgICAgICAgICAgICAx
LjIwMDYrLTAuMDMzNCAgICAgICAgICBtaWdodCBiZSAxLjAxMDN4IGZhc3RlcgogICBiaXRvcHMt
Yml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjAwODkrLTAuMjYw
NCAgICAgPyAgICAgIDMuMDQwMCstMC4xNzM3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwM3ggc2xv
d2VyCiAgIGJpdG9wcy1iaXR3aXNlLWFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIuMTIxMCstMC4wODY3ICAgICA/ICAgICAgMi4xNzY1Ky0wLjEwMTQgICAgICAgID8gbWlnaHQg
YmUgMS4wMjYyeCBzbG93ZXIKICAgYml0b3BzLW5zaWV2ZS1iaXRzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMy4zNDc1Ky0wLjI5MjAgICAgICAgICAgICAzLjI3OTQrLTAuMDUxMyAg
ICAgICAgICBtaWdodCBiZSAxLjAyMDh4IGZhc3RlcgogICBjb250cm9sZmxvdy1yZWN1cnNpdmUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjQ0MjcrLTAuMDkxNiAgICAgPyAgICAgIDIu
OTQ2MystMC44OTExICAgICAgICA/IG1pZ2h0IGJlIDEuMjA2Mnggc2xvd2VyCiAgIGNyeXB0by1h
ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNDE1MCstMC41MTI2
ICAgICAgICAgICAgNC4zMzc1Ky0wLjMwMzMgICAgICAgICAgbWlnaHQgYmUgMS4wMTc5eCBmYXN0
ZXIKICAgY3J5cHRvLW1kNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Mi41MzAwKy0wLjEwOTYgICAgICAgICAgICAyLjUwNDMrLTAuMTMyMSAgICAgICAgICBtaWdodCBi
ZSAxLjAxMDN4IGZhc3RlcgogICBjcnlwdG8tc2hhMSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyLjYyMzIrLTAuMjM5MiAgICAgPyAgICAgIDIuNjY0NCstMC4xNTE4ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE1N3ggc2xvd2VyCiAgIGRhdGUtZm9ybWF0LXRvZnRlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNjUzNystMC42OTY0ICAgICA/ICAgICAgOC43
Mjg3Ky00LjAyNjMgICAgICAgID8gbWlnaHQgYmUgMS4xNDA0eCBzbG93ZXIKICAgZGF0ZS1mb3Jt
YXQteHBhcmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4wMzY4Ky0wLjEwMjYg
ICAgID8gICAgICA1LjAzODErLTAuMTg2MCAgICAgICAgPwogICBtYXRoLWNvcmRpYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjM3OTkrLTEuNTYxOSAgICAgICAgICAg
IDIuODUzNystMC4wOTk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMTg0NHggZmFzdGVyCiAgIG1hdGgt
cGFydGlhbC1zdW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNDMwNistMC41
NTU0ICAgICAgICAgICAgNC4yNTI5Ky0wLjA5MTYgICAgICAgICAgbWlnaHQgYmUgMS4wNDE4eCBm
YXN0ZXIKICAgbWF0aC1zcGVjdHJhbC1ub3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMi4wOTkyKy0wLjAyMjMgICAgID8gICAgICAyLjEwMjgrLTAuMDE3MSAgICAgICAgPwogICBy
ZWdleHAtZG5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjEyMjYr
LTEuMjc1OCAgICAgICAgICAgIDYuNjYzMystMC4yNzAzICAgICAgICAgIG1pZ2h0IGJlIDEuMDY4
OXggZmFzdGVyCiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQuNzkzNSstMC4wNDEyICAgICA/ICAgICAgNC45NzE5Ky0wLjQxMjggICAgICAgID8g
bWlnaHQgYmUgMS4wMzcyeCBzbG93ZXIKICAgc3RyaW5nLWZhc3RhICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNi4zMDEwKy0xLjEwODcgICAgICAgICAgICA1Ljg2NTIrLTAu
MzY0MSAgICAgICAgICBtaWdodCBiZSAxLjA3NDN4IGZhc3RlcgogICBzdHJpbmctdGFnY2xvdWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjIxMjgrLTAuMjA3MCAgICAgPyAg
ICAgIDkuNTY5NSstMC40NzcwICAgICAgICA/IG1pZ2h0IGJlIDEuMDM4N3ggc2xvd2VyCiAgIHN0
cmluZy11bnBhY2stY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAuMjI2Nyst
MC44NzU4ICAgICAgICAgICAxOS44NDY3Ky0wLjU1MDAgICAgICAgICAgbWlnaHQgYmUgMS4wMTkx
eCBmYXN0ZXIKICAgc3RyaW5nLXZhbGlkYXRlLWlucHV0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNC42MjMxKy0wLjUyOTUgICAgICAgICAgICA0LjUwOTYrLTAuMTAwMyAgICAgICAgICBt
aWdodCBiZSAxLjAyNTJ4IGZhc3RlcgoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNC44MDg5Ky0wLjA0OTcgICAgICAgICAgICA0Ljc4MzMrLTAu
MTc2MiAgICAgICAgICBtaWdodCBiZSAxLjAwNTR4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAg
ICAgICAgICAgIG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKTG9u
Z1NwaWRlcjoKICAgM2QtY3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDk1Mi4zODcwKy0yNjEuODgxMCAgICAgICAgODY0LjczMzUrLTE2LjA1OTggICAgICAgICBt
aWdodCBiZSAxLjEwMTR4IGZhc3RlcgogICAzZC1tb3JwaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNjE0LjY5OTgrLTcuOTMxMyAgICAgPyAgICA2MTcuMTk5MCstMTEu
MTgyOSAgICAgICA/CiAgIDNkLXJheXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0OTAuNDk2OCstMTAuMjUzNiAgICA/ICAgIDQ5MS42ODAxKy03Ljk4OTAgICAgICAg
ID8KICAgYWNjZXNzLWJpbmFyeS10cmVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkx
My44MDA2Ky0xOC42MTU0ICAgICAgICAgOTExLjczMTUrLTE1Ljg4OTcgICAgICAgCiAgIGFjY2Vz
cy1mYW5ua3VjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTkuNTgxMSstMTcu
MzMxNyAgICAgICAgIDI1MS42MzU2Ky0xNC40NTM2ICAgICAgICAgbWlnaHQgYmUgMS4wMzE2eCBm
YXN0ZXIKICAgYWNjZXNzLW5ib2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDU3My41MDAzKy0xMS4xMDIwICAgICAgICAgNTcyLjM0NjArLTguODY0NSAgICAgICAgCiAgIGFj
Y2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDMuMjk5MCst
OC41MDI5ICAgICA/ICAgIDMwNi45NTE4Ky03LjI0NjYgICAgICAgID8gbWlnaHQgYmUgMS4wMTIw
eCBzbG93ZXIKICAgYml0b3BzLTNiaXQtYml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNC4zOTg2Ky0xLjE5NDkgICAgID8gICAgIDM1Ljc2ODUrLTMuMTI0OCAgICAgICAgPyBt
aWdodCBiZSAxLjAzOTh4IHNsb3dlcgogICBiaXRvcHMtYml0cy1pbi1ieXRlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDkyLjU1OTArLTAuMjQ3OSAgICAgPyAgICAgOTYuMjIyNSstMTIu
OTkwMyAgICAgICA/IG1pZ2h0IGJlIDEuMDM5Nnggc2xvd2VyCiAgIGJpdG9wcy1uc2lldmUtYml0
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTkuNjU3MystMi44MDc4ICAgICA/ICAg
IDQwNC42MTcxKy01LjIyODQgICAgICAgID8gbWlnaHQgYmUgMS4wMTI0eCBzbG93ZXIKICAgY29u
dHJvbGZsb3ctcmVjdXJzaXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0Ny45MTAwKy01
LjA2NjAgICAgIF4gICAgNDMwLjQwNTArLTguODQ5MCAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDQw
N3ggZmFzdGVyCiAgIGNyeXB0by1hZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA1OTQuMzM0NSstNC41NzAwICAgICAgICAgIDU5MS4yODI5Ky01LjMyNjkgICAgICAgIAog
ICBjcnlwdG8tbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTUwLjc2
ODcrLTEyLjc2ODUgICAgPyAgICA1NTEuMDMxMCstOS42MjM0ICAgICAgICA/CiAgIGNyeXB0by1z
aGExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NDcuMzk2NSstNS44MTE4
ICAgICA/ICAgIDY1MC4zODk3Ky05Ljc1NzEgICAgICAgID8KICAgZGF0ZS1mb3JtYXQtdG9mdGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1OS4zOTcwKy0xMC4wNjUwICAgID8gICAg
MzY5LjQwMzcrLTE3LjM0MTggICAgICAgPyBtaWdodCBiZSAxLjAyNzh4IHNsb3dlcgogICBkYXRl
LWZvcm1hdC14cGFyYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjc0LjAzMTcrLTE4
LjI4NzMgICAgPyAgICA2NzYuMjU2OCstNC43NDEzICAgICAgICA/CiAgIGhhc2gtbWFwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTIuMDEyMistNS4yODcwICAgICAh
ICAgIDE1OC4yNTkwKy0wLjYzMjkgICAgICAgICEgZGVmaW5pdGVseSAxLjA0MTF4IHNsb3dlcgog
ICBtYXRoLWNvcmRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM3LjQw
NzgrLTQuNDA1MCAgICAgICAgICA0MzYuMTc4MystMS4wNzM1ICAgICAgICAKICAgbWF0aC1wYXJ0
aWFsLXN1bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxMy41MjIzKy03LjUzNTQg
ICAgICAgICAgMzExLjExMzUrLTEwLjM5NzYgICAgICAgCiAgIG1hdGgtc3BlY3RyYWwtbm9ybSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjkuOTM4NistMTMuNzM4OSAgICAgICAgIDU2
OC43NDk5Ky04LjUzMjcgICAgICAgIAogICBzdHJpbmctYmFzZTY0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNDY4Ljc0NDArLTMxLjc3NTUgICAgPyAgICA0ODkuOTU3MistNDIu
Mjg3MSAgICAgICA/IG1pZ2h0IGJlIDEuMDQ1M3ggc2xvd2VyCiAgIHN0cmluZy1mYXN0YSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTkuMDE2MSstOC41NTY5ICAgICA/ICAg
IDM2OC4yNTMzKy02LjgzMzAgICAgICAgID8gbWlnaHQgYmUgMS4wMjU3eCBzbG93ZXIKICAgc3Ry
aW5nLXRhZ2Nsb3VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4My4wNjA3Ky01
LjgzOTkgICAgICAgICAgMTgxLjE5NzYrLTUuMTE4NSAgICAgICAgICBtaWdodCBiZSAxLjAxMDN4
IGZhc3RlcgoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDM3MS4wOTkwKy02LjY1NjUgICAgID8gICAgMzcyLjA3MTErLTMuMzU1MiAgICAgICAgPyBt
aWdodCBiZSAxLjAwMjZ4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVjhTcGlkZXI6CiAgIGNyeXB0
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYuOTM1MistMS40
NzEwICAgICAgICAgICAzNi43NDY4Ky0wLjI5MzEgICAgICAgIAogICBkZWx0YWJsdWUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxLjgxNDUrLTMuNjEwOCAgICAgPyAg
ICAgNTIuNzM0MystMS40MjA5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3OHggc2xvd2VyCiAgIGVh
cmxleS1ib3llciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcuOTg5OCst
MS4zMTE5ICAgICAgICAgICAzNi45NzYxKy0xLjA4OTkgICAgICAgICAgbWlnaHQgYmUgMS4wMjc0
eCBmYXN0ZXIKICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyMC41MjQ4Ky0xLjEyNjcgICAgID8gICAgIDIwLjk2ODMrLTEuNTQ2NCAgICAgICAgPyBt
aWdodCBiZSAxLjAyMTZ4IHNsb3dlcgogICByZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDU3LjMzODMrLTMuNTc4OSAgICAgPyAgICAgNTguMjU0NSstNS4w
NzQ2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2MHggc2xvd2VyCiAgIHJpY2hhcmRzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDEuNjEwMystMi43NjA3ICAgICA/ICAg
ICA0Mi44MzcyKy0xLjk4MzAgICAgICAgID8gbWlnaHQgYmUgMS4wMjk1eCBzbG93ZXIKICAgc3Bs
YXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi40ODM1Ky0y
LjQ1NTggICAgID8gICAgIDMyLjU0MjYrLTAuNDUzNSAgICAgICAgPwoKICAgPGdlb21ldHJpYz4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOC4wNDAxKy0wLjYxNjQgICAg
ID8gICAgIDM4LjMzOTErLTAuNzY3MSAgICAgICAgPyBtaWdodCBiZSAxLjAwNzl4IHNsb3dlcgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKT2N0YW5lOgogICBlbmNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMTY3NTYrLTAuMDAzMzQgICAgICAgICAgMC4xNjcwNistMC4w
MDQ2NSAgICAgICAKICAgZGVjcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyLjgzMzc4Ky0wLjAzMDE2ICAgID8gICAgIDIuODUyNTcrLTAuMDE1NTYgICAgICAg
PwogICBkZWx0YWJsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDAu
MTM1NjArLTAuMDA0NTIgICAgICAgICAgMC4xMzQ1NCstMC4wMDI4OCAgICAgICAKICAgZWFybGV5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI3MTUzKy0wLjAw
NDQ2ICAgICAgICAgIDAuMjcxMzArLTAuMDAyNTkgICAgICAgCiAgIGJveWVyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC44MTc5NistMC4wNjI4MiAgICAgICAg
ICA0LjgxMDg4Ky0wLjAyOTgyICAgICAgIAogICBuYXZpZXItc3Rva2VzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHgyICAgICAgIDUuMDYyNzYrLTAuMTEwMDAgICAgICAgICAgNS4wNDk5Myst
MC4wNDYwOCAgICAgICAKICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4MiAgICAgICAwLjc3MDA5Ky0wLjAwODk1ICAgICAgICAgIDAuNzY4NjUrLTAuMDA1NDIgICAg
ICAgCiAgIHJpY2hhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAg
MC4wODU4NCstMC4wMDEwNSAgICA/ICAgICAwLjA5NTQ3Ky0wLjAyODAxICAgICAgID8gbWlnaHQg
YmUgMS4xMTIzeCBzbG93ZXIKICAgc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4MiAgICAgICAwLjM0NDE0Ky0wLjAwMjc2ICAgID8gICAgIDAuMzQ4NzErLTAuMDExNDUg
ICAgICAgPyBtaWdodCBiZSAxLjAxMzN4IHNsb3dlcgogICByZWdleHAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHgyICAgICAgMjAuMDQ1NzUrLTAuNzE1ODEgICAgICAgICAxOS43
NTIwNCstMC45Njk1OCAgICAgICAgIG1pZ2h0IGJlIDEuMDE0OXggZmFzdGVyCiAgIHBkZmpzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICA0NC4zMzYzOCstMC43Njcx
NCAgICA/ICAgIDQ1LjI3MzM3Ky0xLjE0NTE3ICAgICAgID8gbWlnaHQgYmUgMS4wMjExeCBzbG93
ZXIKICAgbWFuZHJlZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgIDQ0
LjMzOTk0Ky0wLjMxMjYzICAgICAgICAgNDQuMzM4NjYrLTAuMjMzMTggICAgICAgCiAgIGdiZW11
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAzMi42NTU1MystMC41
NDM4MSAgICAgICAgIDMyLjQ4NzIyKy0wLjMwODA4ICAgICAgIAogICBjbG9zdXJlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTEzNzQrLTAuMDEyMjggICAgPyAg
ICAgMC41MTcyNCstMC4wMTI3NyAgICAgICA/CiAgIGpxdWVyeSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNy42MDE5MSstMi4xNjIxNiAgICAgICAgICA2Ljk1ODgx
Ky0wLjA0NDQyICAgICAgICAgbWlnaHQgYmUgMS4wOTI0eCBmYXN0ZXIKICAgYm94MmQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgICA5Ljg0NjA4Ky0wLjEzNjUwICAg
ICAgICAgIDkuODE2MzMrLTAuMTQwMzggICAgICAgCiAgIHpsaWIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeDIgICAgIDM2Ni40OTI2NistNi45MDAyNSAgICA/ICAgMzY3Ljg3
OTY0Ky0yLjM4NzY0ICAgICAgID8KICAgdHlwZXNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4MiAgICAgNjQ1LjUyMTg1Ky0yOS4zNTE0MiAgID8gICA2NTEuMzI3NzYrLTUuOTA4
NTAgICAgICAgPwoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA1LjI5NjY3Ky0wLjAzNTQ0ICAgID8gICAgIDUuMzIyMjgrLTAuMDgxNTcgICAgICAg
PyBtaWdodCBiZSAxLjAwNDh4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5l
dyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKS3Jha2VuOgogICBhaS1h
c3RhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ni43MzIrLTQu
MjE2ICAgICAgICAgICAgIDk1LjU0MSstMi41ODggICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyNXgg
ZmFzdGVyCiAgIGF1ZGlvLWJlYXQtZGV0ZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDM5LjIyNystMS45MzcgICAgICA/ICAgICAgNDAuMTI5Ky0yLjk3OSAgICAgICAgID8gbWln
aHQgYmUgMS4wMjMweCBzbG93ZXIKICAgYXVkaW8tZGZ0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMDIuNzIyKy00Ljk3MSAgICAgID8gICAgIDEwNi4zMTArLTYuOTc5
ICAgICAgICAgPyBtaWdodCBiZSAxLjAzNDl4IHNsb3dlcgogICBhdWRpby1mZnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMC41NzArLTEuMzI0ICAgICAgPyAgICAg
IDMxLjEwNistMi4xNTMgICAgICAgICA/IG1pZ2h0IGJlIDEuMDE3NXggc2xvd2VyCiAgIGF1ZGlv
LW9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3LjA5NSstMS4w
OTEgICAgICA/ICAgICAgNDcuOTkxKy0zLjc3NiAgICAgICAgID8gbWlnaHQgYmUgMS4wMTkweCBz
bG93ZXIKICAgaW1hZ2luZy1kYXJrcm9vbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNjQuODY5Ky0zLjE4MyAgICAgID8gICAgICA2OC41OTgrLTExLjU5MyAgICAgICAgPyBtaWdo
dCBiZSAxLjA1NzV4IHNsb3dlcgogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0OC41MDkrLTYuOTg1ICAgICAgICAgICAgIDQ4LjI1OCstNS4wMTQg
ICAgICAgICAKICAgaW1hZ2luZy1nYXVzc2lhbi1ibHVyICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNjUuNjI4Ky01LjE1MCAgICAgID8gICAgICA2OC42OTErLTguNzUzICAgICAgICAgPyBt
aWdodCBiZSAxLjA0Njd4IHNsb3dlcgogICBqc29uLXBhcnNlLWZpbmFuY2lhbCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzNS4xNDMrLTAuNDgzICAgICAgPyAgICAgIDM2LjUyOSstMy40
ODggICAgICAgICA/IG1pZ2h0IGJlIDEuMDM5NHggc2xvd2VyCiAgIGpzb24tc3RyaW5naWZ5LXRp
bmRlcmJveCAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyLjg3NSstMS41NjcgICAgICA/ICAg
ICAgMjMuNDIwKy0xLjk1NCAgICAgICAgID8gbWlnaHQgYmUgMS4wMjM4eCBzbG93ZXIKICAgc3Rh
bmZvcmQtY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIuMDkwKy03
LjkyNCAgICAgICAgICAgICAzOS41MjYrLTEuODI0ICAgICAgICAgICBtaWdodCBiZSAxLjA2NDl4
IGZhc3RlcgogICBzdGFuZm9yZC1jcnlwdG8tY2NtICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNS44MzQrLTUuNTQyICAgICAgPyAgICAgIDM3LjQ3OCstMy41MDUgICAgICAgICA/IG1p
Z2h0IGJlIDEuMDQ1OXggc2xvd2VyCiAgIHN0YW5mb3JkLWNyeXB0by1wYmtkZjIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDk5LjM5NistMy41NDkgICAgICA/ICAgICAgOTkuOTA2Ky0zLjQ2
MSAgICAgICAgID8KICAgc3RhbmZvcmQtY3J5cHRvLXNoYTI1Ni1pdGVyYXRpdmUgICAgICAgICAg
ICAgICAgICAgMzIuNDc5Ky0wLjgzNSAgICAgID8gICAgICAzMi43MDErLTAuODM0ICAgICAgICAg
PwoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NTQuNTEyKy0wLjc2MCAgICAgID8gICAgICA1NS40NDIrLTEuNzE1ICAgICAgICAgPyBtaWdodCBi
ZSAxLjAxNzF4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKTWljcm9iZW5jaG1hcmtzOgogICBhYmMt
Zm9yd2FyZC1sb29wLWVxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1LjQ1NDIrLTMu
MTI0MyAgICAgICAgICAgMjUuMzM5MystMS41NzUyICAgICAgICAKICAgYWJjLXBvc3RmaXgtYmFj
a3dhcmQtbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAzMy4yNTIzKy0zLjg0MzYgICAgICAg
ICAgIDMyLjgxNzcrLTIuMjczNyAgICAgICAgICBtaWdodCBiZSAxLjAxMzJ4IGZhc3RlcgogICBh
YmMtc2ltcGxlLWJhY2t3YXJkLWxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgIDI1LjYzMzEr
LTEuMzc5MSAgICAgICAgICAgMjUuMzE4MSstMi4yOTA2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEy
NHggZmFzdGVyCiAgIGFiYy1zaW1wbGUtZm9yd2FyZC1sb29wICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjQuNTY5MCstMC42ODI5ICAgICA/ICAgICAyNS43NTIyKy0yLjE0OTEgICAgICAgID8g
bWlnaHQgYmUgMS4wNDgyeCBzbG93ZXIKICAgYWJjLXNraXBweS1sb29wICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyMS45MDYzKy0xLjQ2NTkgICAgID8gICAgIDI0LjM2MjQrLTEu
MjY1NiAgICAgICAgPyBtaWdodCBiZSAxLjExMjF4IHNsb3dlcgogICBhYnMtYm9vbGVhbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjMyMTcrLTAuMDMzMCAgICAgPyAg
ICAgIDIuMzc0MSstMC4yMDM1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIyNnggc2xvd2VyCiAgIGFk
YXB0LXRvLWRvdWJsZS1kaXZpZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuMTgyNSst
MC42NzMyICAgICA/ICAgICAxNS4zNTYzKy0wLjU2NjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTE0
eCBzbG93ZXIKICAgYWxpYXNlZC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAgICAgICAg
ICAgICAgMS4wMTQ4Ky0wLjAzNjggICAgID8gICAgICAxLjIzNjQrLTAuNzE0NSAgICAgICAgPyBt
aWdodCBiZSAxLjIxODN4IHNsb3dlcgogICBhbGxvY2F0ZS1iaWctb2JqZWN0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyLjQzNzgrLTAuMjM3MCAgICAgPyAgICAgIDIuNDk0OSstMC40
MDc0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIzNHggc2xvd2VyCiAgIGFwcGx5LW5vdC1hcHBseSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzA3OCstMC4zMjY3ICAgICAgICAg
ICAgNC42NTU1Ky0wLjI2MTMgICAgICAgICAgbWlnaHQgYmUgMS4wMTEyeCBmYXN0ZXIKICAgYXJn
dW1lbnRzLW5hbWVkLWFuZC1yZWZsZWN0aXZlICAgICAgICAgICAgICAgICAgICAgOC41OTEyKy0w
LjczOTIgICAgID8gICAgICA4Ljg3NTIrLTEuNTQzMSAgICAgICAgPyBtaWdodCBiZSAxLjAzMzF4
IHNsb3dlcgogICBhcmd1bWVudHMtb3V0LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwLjIzMzkrLTAuNTIyOCAgICAgPyAgICAgMTAuMjg0NystMC41MzExICAgICAgICA/CiAg
IGFyZ3VtZW50cy1zdHJpY3QtbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkuNTA3
NistMC42NTQ3ICAgICA/ICAgICA0Ni43MDg2Ky0xOS4xMzM1ICAgICAgID8gbWlnaHQgYmUgMS4x
ODIzeCBzbG93ZXIKICAgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNy4wNzcwKy0wLjM2OTkgICAgICAgICAgICA2Ljk5NDkrLTAuNDgyMCAgICAgICAg
ICBtaWdodCBiZSAxLjAxMTd4IGZhc3RlcgogICBhcml0eS1taXNtYXRjaC1pbmxpbmluZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLjA1NTMrLTAuMTc1OSAgICAgICAgICAgIDAuOTI3MCst
MC4wNDI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMTM4NHggZmFzdGVyCiAgIGFycmF5LWFjY2Vzcy1w
b2x5bW9ycGhpYy1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgIDMuODIzNystMC4xMzY1ICAgICAg
ICAgICAgMy43MTkyKy0wLjIyMDAgICAgICAgICAgbWlnaHQgYmUgMS4wMjgxeCBmYXN0ZXIKICAg
YXJyYXktbm9uYXJyYXktcG9seW1vcmhwaWMtYWNjZXNzICAgICAgICAgICAgICAgICAyMS42ODk1
Ky0zLjM1MTkgICAgID8gICAgIDI0Ljc5ODArLTguMzk3NCAgICAgICAgPyBtaWdodCBiZSAxLjE0
MzN4IHNsb3dlcgogICBhcnJheS1wcm90b3R5cGUtZXZlcnkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDc3LjgxNjArLTMuMjIwNCAgICAgICAgICAgNzcuMjIyOCstMS43MjIzICAgICAgICAK
ICAgYXJyYXktcHJvdG90eXBlLWZvckVhY2ggICAgICAgICAgICAgICAgICAgICAgICAgICA3Ny4z
MjgxKy0zLjY2ODQgICAgICAgICAgIDc2LjkwMTErLTUuMDc2NiAgICAgICAgCiAgIGFycmF5LXBy
b3RvdHlwZS1tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzMuOTYxNystMy42MzI3
ICAgICAgICAgICA3Mi42MDMwKy0xLjQyNDIgICAgICAgICAgbWlnaHQgYmUgMS4wMTg3eCBmYXN0
ZXIKICAgYXJyYXktcHJvdG90eXBlLXJlZHVjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA3
NS41NjQ5Ky0zLjc1MjcgICAgID8gICAgIDc1Ljc1NzkrLTMuOTg5NiAgICAgICAgPwogICBhcnJh
eS1wcm90b3R5cGUtcmVkdWNlUmlnaHQgICAgICAgICAgICAgICAgICAgICAgMTQ2LjQ0OTUrLTcu
MjQ4MCAgICAgICAgICAxNDYuNDQxMCstNS43NTY4ICAgICAgICAKICAgYXJyYXktcHJvdG90eXBl
LXNvbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OC44Nzg2Ky00LjEwMTMgICAgICAg
ICAgIDc4LjQ1NzMrLTMuMjkyOCAgICAgICAgCiAgIGFycmF5LXNwbGljZS1jb250aWd1b3VzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjMuNDA0MSstMy4wNjA0ICAgICAgICAgICAyMi42Mjc5
Ky0xLjE1NTUgICAgICAgICAgbWlnaHQgYmUgMS4wMzQzeCBmYXN0ZXIKICAgYXJyYXktd2l0aC1k
b3VibGUtYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4yOTkxKy0wLjIxNzYgICAg
ICAgICAgICAzLjE5ODIrLTAuMTAzMSAgICAgICAgICBtaWdodCBiZSAxLjAzMTV4IGZhc3Rlcgog
ICBhcnJheS13aXRoLWRvdWJsZS1pbmNyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAyLjk2
ODUrLTAuNTAwNiAgICAgICAgICAgIDIuOTI0NystMC4yODk4ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDE1MHggZmFzdGVyCiAgIGFycmF5LXdpdGgtZG91YmxlLW11bC1hZGQgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMuNzUyMCstMC4yMjk3ICAgICA/ICAgICAgMy44ODA1Ky0wLjYxNzcgICAgICAg
ID8gbWlnaHQgYmUgMS4wMzQzeCBzbG93ZXIKICAgYXJyYXktd2l0aC1kb3VibGUtc3VtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMi43NjM0Ky0wLjAzNjYgICAgICAgICAgICAyLjc1MDMr
LTAuMDg2OSAgICAgICAgCiAgIGFycmF5LXdpdGgtaW50MzItYWRkLXN1YiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQuNTAzMSstMC4xMDUwICAgICA/ICAgICAgNC41NTI0Ky0wLjIyOTQgICAg
ICAgID8gbWlnaHQgYmUgMS4wMTEweCBzbG93ZXIKICAgYXJyYXktd2l0aC1pbnQzMi1vci1kb3Vi
bGUtc3VtICAgICAgICAgICAgICAgICAgICAgMi44ODM3Ky0wLjExMzcgICAgID8gICAgICAyLjkz
MjQrLTAuMDY3MiAgICAgICAgPyBtaWdodCBiZSAxLjAxNjl4IHNsb3dlcgogICBBcnJheUJ1ZmZl
ci1EYXRhVmlldy1hbGxvYy1sYXJnZS1sb25nLWxpdmVkICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDkuNTQzMCstMi45NzMxICAgICA/ICAg
ICA1MS44MDY1Ky0yLjY0NjkgICAgICAgID8gbWlnaHQgYmUgMS4wNDU3eCBzbG93ZXIKICAgQXJy
YXlCdWZmZXItRGF0YVZpZXctYWxsb2MtbG9uZy1saXZlZCAgICAgICAgICAgICAxOS43NTUwKy0z
LjA5MTYgICAgICAgICAgIDE3Ljg3MzArLTAuMjAyNCAgICAgICAgICBtaWdodCBiZSAxLjEwNTN4
IGZhc3RlcgogICBBcnJheUJ1ZmZlci1JbnQzMkFycmF5LWJ5dGVPZmZzZXQgICAgICAgICAgICAg
ICAgICAzLjk2NzkrLTAuMDYwNSAgICAgPyAgICAgIDQuMTg1NSstMC42NDAzICAgICAgICA/IG1p
Z2h0IGJlIDEuMDU0OHggc2xvd2VyCiAgIEFycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJn
ZS1sb25nLWxpdmVkICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNDkuNTQ2NSstMC44MDU4ICAgICA/ICAgICA1MC42NjUzKy04LjE0MDQgICAg
ICAgID8gbWlnaHQgYmUgMS4wMjI2eCBzbG93ZXIKICAgQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWxvbmctbGl2ZWQtYnVmZmVyICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjQuNjUwMSstMC4xNDgzICAgICA/ICAgICAyNC44OTc4Ky0w
LjIwMzAgICAgICAgID8gbWlnaHQgYmUgMS4wMTAweCBzbG93ZXIKICAgQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAxOS41MzMzKy03LjMxMzIgICAgICAg
ICAgIDE3LjkyODYrLTAuOTcxMCAgICAgICAgICBtaWdodCBiZSAxLjA4OTV4IGZhc3RlcgogICBB
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MgICAgICAgICAgICAgICAgICAgICAgIDE2Ljg5Nzkr
LTMuMDM1NSAgICAgICAgICAgMTYuNTg2OSstMy40NTU3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4
OHggZmFzdGVyCiAgIGFycm93ZnVuY3Rpb24tY2FsbC1pbi1jbGFzcy1jb25zdHJ1Y3RvciAgICAg
ICAgICAgMjUuMDkwMystMC40Njk5ICAgICAgICAgICAyNC41ODkyKy0wLjMxMjcgICAgICAgICAg
bWlnaHQgYmUgMS4wMjA0eCBmYXN0ZXIKICAgYXJyb3dmdW5jdGlvbi1jYWxsLWluLWNsYXNzLW1l
dGhvZCAgICAgICAgICAgICAgICAxMC4yOTg0Ky0wLjQyNzggICAgICAgICAgIDEwLjIyMDIrLTAu
Mzg0NSAgICAgICAgCiAgIGFycm93ZnVuY3Rpb24tY2FsbC1pbi1mdW5jdGlvbiAgICAgICAgICAg
ICAgICAgICAgMTAuODA4NSstMC40NDgyICAgICA/ICAgICAxMS4xMDk2Ky0xLjA4MjggICAgICAg
ID8gbWlnaHQgYmUgMS4wMjc5eCBzbG93ZXIKICAgYXJyb3dmdW5jdGlvbi1jYWxsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOC40NzkyKy0wLjIwOTAgICAgID8gICAgICA4Ljg1NDIr
LTAuNzgxNSAgICAgICAgPyBtaWdodCBiZSAxLjA0NDJ4IHNsb3dlcgogICBhc21qc19ib29sX2J1
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjE2NDQrLTAuMTU3OCAgICAg
PyAgICAgIDguOTgzNistMC43NDkyICAgICAgICA/IG1pZ2h0IGJlIDEuMTAwM3ggc2xvd2VyCiAg
IGFzc2lnbi1jdXN0b20tc2V0dGVyLXBvbHltb3JwaGljICAgICAgICAgICAgICAgICAgIDIuOTY3
MCstMC4xODkyICAgICAgICAgICAgMi44ODY1Ky0wLjEyODQgICAgICAgICAgbWlnaHQgYmUgMS4w
Mjc5eCBmYXN0ZXIKICAgYXNzaWduLWN1c3RvbS1zZXR0ZXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNC42NzI3Ky0wLjgyNjYgICAgICAgICAgICA0LjU5MzUrLTAuMTY3OCAgICAgICAg
ICBtaWdodCBiZSAxLjAxNzJ4IGZhc3RlcgogICBiYXNpYy1zZXQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA3LjQ0MjYrLTEuMTk4NyAgICAgICAgICAgIDYuODg4OCst
MC44Njk5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDgwNHggZmFzdGVyCiAgIGJpZy1pbnQtbXVsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMzg5OCstMC40NjE4ICAgICA/
ICAgICAgMy40MjUzKy0wLjQxNDcgICAgICAgID8gbWlnaHQgYmUgMS4wMTA1eCBzbG93ZXIKICAg
Ymlnc3dpdGNoLWluZGlyZWN0LXN5bWJvbC1vci11bmRlZmluZWQgICAgICAgICAgICA2My42OTc5
Ky0zLjQwMjUgICAgICAgICAgIDYyLjAyMTUrLTAuODMxOSAgICAgICAgICBtaWdodCBiZSAxLjAy
NzB4IGZhc3RlcgogICBiaWdzd2l0Y2gtaW5kaXJlY3Qtc3ltYm9sICAgICAgICAgICAgICAgICAg
ICAgICAgIDc1LjE0NzErLTMuODQ4NSAgICAgICAgICAgNzMuMjI1MCstMS41OTgwICAgICAgICAg
IG1pZ2h0IGJlIDEuMDI2MnggZmFzdGVyCiAgIGJpZ3N3aXRjaC1pbmRpcmVjdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNDIuODMxNSstMC44NzYxICAgICA/ICAgICA0My41ODY1Ky0y
LjI2NzIgICAgICAgID8gbWlnaHQgYmUgMS4wMTc2eCBzbG93ZXIKICAgYmlnc3dpdGNoICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNC4yNDA2Ky0yLjIyMjIgICAgID8g
ICAgIDI2LjA3NzYrLTcuOTA0NCAgICAgICAgPyBtaWdodCBiZSAxLjA3NTh4IHNsb3dlcgogICBi
b29sZWFuLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjM3NjUr
LTAuODIzMiAgICAgICAgICAgIDMuMDg5MistMC4xNDY4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDkz
MHggZmFzdGVyCiAgIGJvdW5kLWZ1bmN0aW9uLWNhbGwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTAuNDY0NSstMC40Mzc3ICAgICA/ICAgICAxMS4wMDQ1Ky0wLjY5MjIgICAgICAgID8g
bWlnaHQgYmUgMS4wNTE2eCBzbG93ZXIKICAgYm91bmQtZnVuY3Rpb24tY29uc3RydWN0aW9uLXBl
cmZvcm1hbmNlICAgICAgICAgICA3Ni41NDY0Ky01Ljc5MTcgICAgID8gICAgIDc5Ljc3MjQrLTUu
MDUyNCAgICAgICAgPyBtaWdodCBiZSAxLjA0MjF4IHNsb3dlcgogICBicmFuY2gtZm9sZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjE0NTErLTAuNDY0OCAgICAgPyAg
ICAgIDQuMzE2NSstMC42Mzk1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQxNHggc2xvd2VyCiAgIGJy
YW5jaC1vbi1zdHJpbmctYXMtYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgMTEuODM1Myst
MS41NzU2ICAgICAgICAgICAxMS4yNTM5Ky0wLjQzNzcgICAgICAgICAgbWlnaHQgYmUgMS4wNTE3
eCBmYXN0ZXIKICAgYnVnLTE1MzQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMy4yMzM2Ky0wLjEzNjYgICAgID8gICAgICAzLjI2NzcrLTAuMTc5OSAgICAgICAgPyBt
aWdodCBiZSAxLjAxMDV4IHNsb3dlcgogICBidWlsZC1sYXJnZS1vYmplY3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDMwLjAwMjMrLTEuMDMyNyAgICAgICAgICAgMjkuNzI0NystMC4y
MDc4ICAgICAgICAKICAgYnktdmFsLWdlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi4wODA1Ky0wLjE0NTEgICAgID8gICAgICAyLjQzODUrLTAuNDkyMiAgICAgICAg
PyBtaWdodCBiZSAxLjE3MjF4IHNsb3dlcgogICBjYWxsLW9yLW5vdC1jYWxsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMxLjQ4NjkrLTEuMzM1MyAgICAgPyAgICAgMzQuMzI2NSst
NS4zMjgyICAgICAgICA/IG1pZ2h0IGJlIDEuMDkwMnggc2xvd2VyCiAgIGNhbGwtc3ByZWFkLWFw
cGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuNTY5NistMS41ODExICAgICA/
ICAgICAyOC4yNTM2Ky0yLjg2NDQgICAgICAgID8gbWlnaHQgYmUgMS4wMjQ4eCBzbG93ZXIKICAg
Y2FsbC1zcHJlYWQtY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNS4wMDkz
Ky0wLjM4MzggICAgID8gICAgIDI4Ljc5MDgrLTkuMjY0NiAgICAgICAgPyBtaWdodCBiZSAxLjE1
MTJ4IHNsb3dlcgogICBjYWxsLXVzaW5nLXNwcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA5LjIzMzgrLTAuNDE4NSAgICAgPyAgICAgIDkuNjc1NSstMC44MzAyICAgICAgICA/
IG1pZ2h0IGJlIDEuMDQ3OHggc2xvd2VyCiAgIGNhcHR1cmVkLWFzc2lnbm1lbnRzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuNDY5OCstMC4wNTQ2ICAgICA/ICAgICAgMC40NzgwKy0w
LjA5MTMgICAgICAgID8gbWlnaHQgYmUgMS4wMTczeCBzbG93ZXIKICAgY2FzdC1pbnQtdG8tZG91
YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4wODcwKy0wLjIyNjkgICAgICAg
ICAgICA1LjAwMjMrLTAuMDg4OSAgICAgICAgICBtaWdodCBiZSAxLjAxNjl4IGZhc3RlcgogICBj
ZWxsLWFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjA5NzUr
LTAuNzMwOCAgICAgICAgICAgIDIuOTM4OSstMC4xODE1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0
MHggZmFzdGVyCiAgIGNmZy1zaW1wbGlmeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIuOTkxOCstMC4wNDQwICAgICA/ICAgICAgMy4yMTI4Ky0wLjY0MTQgICAgICAgID8g
bWlnaHQgYmUgMS4wNzM5eCBzbG93ZXIKICAgY2hhaW4tZ2V0dGVyLWFjY2VzcyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxMS42NzI1Ky0wLjI0NTUgICAgICAgICAgIDExLjQ4ODMrLTAu
NTEyNiAgICAgICAgICBtaWdodCBiZSAxLjAxNjB4IGZhc3RlcgogICBjbXBlcS1vYmotdG8tb2Jq
LW90aGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjE5ODgrLTAuODM1MiAgICAgICAg
ICAgIDguOTEzOCstMC4zNzIzICAgICAgICAgIG1pZ2h0IGJlIDEuMDMyMHggZmFzdGVyCiAgIGNv
bmNhdC1hcHBlbmQtb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNzEzNSst
MC4yNTE2ICAgICAgICAgICAgNy43MTI4Ky0wLjI1MzQgICAgICAgIAogICBjb25zdGFudC10ZXN0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljc4NzUrLTAuMTAyOCAgICAg
PyAgICAgIDQuODc5MistMC4zMzI3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE5MXggc2xvd2VyCiAg
IGNyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNTU5
OSstMS4xMjcyICAgICAgICAgICAgNi40NzI1Ky0wLjM4MDQgICAgICAgICAgbWlnaHQgYmUgMS4x
NjgweCBmYXN0ZXIKICAgY3NlLW5ldy1hcnJheS1idWZmZXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi4xMDQxKy0wLjE0MTYgICAgICAgICAgICAyLjAxMzkrLTAuMTUzMyAgICAgICAg
ICBtaWdodCBiZSAxLjA0NDh4IGZhc3RlcgogICBjc2UtbmV3LWFycmF5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjE0NDMrLTAuMjAyMyAgICAgICAgICAgIDIuMTM2MCst
MC4wOTg5ICAgICAgICAKICAgY3VzdG9tLXNldHRlci1nZXR0ZXItYXMtcHV0LWdldC1ieS1pZCAg
ICAgICAgICAgICAgMC41MzU1Ky0wLjAzOTQgICAgID8gICAgICAwLjYxMDcrLTAuMDY0MSAgICAg
ICAgPyBtaWdodCBiZSAxLjE0MDR4IHNsb3dlcgogICBEYXRhVmlldy1jdXN0b20tcHJvcGVydGll
cyAgICAgICAgICAgICAgICAgICAgICAgIDU1LjQ5MzArLTMuNjAwNSAgICAgICAgICAgNTUuMjE2
MistMS4yNTEzICAgICAgICAKICAgZGVmYXVsdC1kZXJpdmVkLWNvbnN0cnVjdG9yICAgICAgICAg
ICAgICAgICAgICAgIDcyMS41ODIyKy0xMDcuMjgwOCAgICAgICAgNjk5LjU1MDArLTEyNS4wNDQx
ICAgICAgICBtaWdodCBiZSAxLjAzMTV4IGZhc3RlcgogICBkZWxheS10ZWFyLW9mZi1hcmd1bWVu
dHMtc3RyaWN0bW9kZSAgICAgICAgICAgICAgICA1LjMxNDArLTAuMjAwNyAgICAgPyAgICAgIDUu
NDQ1OCstMC40NDgwICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0OHggc2xvd2VyCiAgIGRlbHRhYmx1
ZS1mb3Itb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQuODQ0NystOC44ODM5
ICAgICAgICAgICAzMy4wNjIxKy0xLjExMjEgICAgICAgICAgbWlnaHQgYmUgMS4wNTM5eCBmYXN0
ZXIKICAgZGVsdGFibHVlLXZhcmFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
MS45MTI1Ky0xLjEzMjYgICAgICAgICAgIDIxLjA1MTErLTAuNzExNCAgICAgICAgICBtaWdodCBi
ZSAxLjA0MDl4IGZhc3RlcgogICBkZW5zZS1zZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNjczLjIxNDUrLTIzLjY4ODEgICAgPyAgIDE3MzkuMTM5OCstNzQuODg0NiAg
ICAgICA/IG1pZ2h0IGJlIDEuMDM5NHggc2xvd2VyCiAgIGRlc3RydWN0dXJpbmctYXJndW1lbnRz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIuOTE0NSstMC40MTExICAgICA/ICAgICA0My43
MDUzKy0zLjAxMTUgICAgICAgID8gbWlnaHQgYmUgMS4wMTg0eCBzbG93ZXIKICAgZGVzdHJ1Y3R1
cmluZy1wYXJhbWV0ZXJzLW92ZXJyaWRkZW4tYnktZnVuY3Rpb24gICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41NTIzKy0wLjEzNjQgICAg
ICAgICAgICAwLjUxMTIrLTAuMDc3OSAgICAgICAgICBtaWdodCBiZSAxLjA4MDN4IGZhc3Rlcgog
ICBkZXN0cnVjdHVyaW5nLXN3YXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljgy
NzcrLTAuNTcwMSAgICAgICAgICAgIDQuNjEzMystMC4wOTg0ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDQ2NXggZmFzdGVyCiAgIGRpcmVjdC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEuMDU4OCstMC4xNjM1ICAgICAgICAgICAgMS4wMjM5Ky0wLjAyNDggICAgICAg
ICAgbWlnaHQgYmUgMS4wMzQyeCBmYXN0ZXIKICAgZGlyZWN0LWFyZ3VtZW50cy1sZW5ndGggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNi43Nzg4Ky0wLjE0MzEgICAgID8gICAgICA2LjgyNDMr
LTAuOTkyNSAgICAgICAgPwogICBkaXJlY3QtYXJndW1lbnRzLW92ZXJyaWRkZW4tbGVuZ3RoICAg
ICAgICAgICAgICAgICA2LjY3MjUrLTAuNjEzMSAgICAgICAgICAgIDYuNDA1NistMC4yMTY0ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDQxN3ggZmFzdGVyCiAgIGRpcmVjdC1hcmd1bWVudHMtcG9zc2li
bHktb3ZlcnJpZGRlbi1sZW5ndGggICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNy4xNTQ5Ky0wLjYxNjAgICAgID8gICAgICA3LjI3NDArLTAu
NTQxMSAgICAgICAgPyBtaWdodCBiZSAxLjAxNjd4IHNsb3dlcgogICBkaXJlY3QtY2FsbC1hcml0
eS1taXNtYXRjaCAgICAgICAgICAgICAgICAgICAgICAgIDYzLjkzMzArLTUuNDY5MiAgICAgICAg
ICAgNjIuODY3MCstMy4zNzkwICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3MHggZmFzdGVyCiAgIGRp
cmVjdC1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAuOTY1Myst
NC40MzQ1ICAgICAgICAgICA1OS43NDA4Ky0wLjUwNjYgICAgICAgICAgbWlnaHQgYmUgMS4wMjA1
eCBmYXN0ZXIKICAgZGlyZWN0LWNvbnN0cnVjdC1hcml0eS1taXNtYXRjaCAgICAgICAgICAgICAg
ICAgICA5OC44MTYzKy0yLjQ1NTcgICAgID8gICAgMTE2LjUxMzIrLTU0LjE5NjEgICAgICAgPyBt
aWdodCBiZSAxLjE3OTF4IHNsb3dlcgogICBkaXJlY3QtY29uc3RydWN0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDg2LjQwMzUrLTMuNTIyNCAgICAgICAgICAgODYuMDk2NCstMy4x
MTUwICAgICAgICAKICAgZGlyZWN0LXRhaWwtY2FsbC1hcml0eS1taXNtYXRjaCAgICAgICAgICAg
ICAgICAgICA2OC4yNDE5Ky0wLjgzOTYgICAgID8gICAgIDY4Ljc0NjYrLTAuMTU2OSAgICAgICAg
PwogICBkaXJlY3QtdGFpbC1jYWxsLWlubGluZWQtY2FsbGVyLWFyaXR5LW1pc21hdGNoICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjMuNzU0
NistMS45NDY0ICAgICA/ICAgICA2NC4yMjk3Ky0zLjYxODMgICAgICAgID8KICAgZGlyZWN0LXRh
aWwtY2FsbC1pbmxpbmVkLWNhbGxlciAgICAgICAgICAgICAgICAgICA2MC43OTk5Ky0zLjU5MDQg
ICAgID8gICAgIDYyLjg1NjcrLTUuNjAxNCAgICAgICAgPyBtaWdodCBiZSAxLjAzMzh4IHNsb3dl
cgogICBkaXJlY3QtdGFpbC1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1
Ljg1MjQrLTYuNjgxMiAgICAgICAgICAgNjMuNDgwNystMy43NDc4ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDM3NHggZmFzdGVyCiAgIGRpdi1ib29sZWFuLWRvdWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQuNTkwNSstMC42ODA1ICAgICAgICAgICAgNC4wNzQ4Ky0wLjEzMjMgICAg
ICAgICAgbWlnaHQgYmUgMS4xMjY2eCBmYXN0ZXIKICAgZGl2LWJvb2xlYW4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNy43MDg4Ky0wLjg5NjYgICAgICAgICAgICA3LjYz
NDYrLTAuMjg4NyAgICAgICAgCiAgIGRvdWJsZS1nZXQtYnktdmFsLW91dC1vZi1ib3VuZHMgICAg
ICAgICAgICAgICAgICAgIDQuNzA3MistMC4zNDMyICAgICAgICAgICAgNC41ODU3Ky0wLjEzNjYg
ICAgICAgICAgbWlnaHQgYmUgMS4wMjY1eCBmYXN0ZXIKICAgZG91YmxlLXBvbGx1dGlvbi1nZXRi
eXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgNy4xNjYzKy0wLjIyMTIgICAgID8gICAgICA3
LjU2MjgrLTAuNTY1OSAgICAgICAgPyBtaWdodCBiZSAxLjA1NTN4IHNsb3dlcgogICBkb3VibGUt
cG9sbHV0aW9uLXB1dGJ5b2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAzLjQ1MTArLTAuMDMx
OCAgICAgPyAgICAgIDMuNTI4MCstMC4yMzUyICAgICAgICA/IG1pZ2h0IGJlIDEuMDIyM3ggc2xv
d2VyCiAgIGRvdWJsZS1yZWFsLXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MjguNzI4NCstNi44NTU5ICAgICA/ICAgICAyOC43NTI1Ky02LjE3NTQgICAgICAgID8KICAgZG91
YmxlLXRvLWludDMyLXR5cGVkLWFycmF5LW5vLWlubGluZSAgICAgICAgICAgICAgMi4zOTc1Ky0w
LjA0MjUgICAgID8gICAgICAyLjQ0MTUrLTAuMTcxOCAgICAgICAgPyBtaWdodCBiZSAxLjAxODR4
IHNsb3dlcgogICBkb3VibGUtdG8taW50MzItdHlwZWQtYXJyYXkgICAgICAgICAgICAgICAgICAg
ICAgICAyLjM4OTArLTAuMjIwMyAgICAgPyAgICAgIDIuNDYwNCstMC4yMjY3ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDI5OXggc2xvd2VyCiAgIGRvdWJsZS10by11aW50MzItdHlwZWQtYXJyYXktbm8t
aW5saW5lICAgICAgICAgICAgIDIuNDY1MCstMC4xMDc4ICAgICA/ICAgICAgMi41MDcwKy0wLjE4
NDggICAgICAgID8gbWlnaHQgYmUgMS4wMTcweCBzbG93ZXIKICAgZG91YmxlLXRvLXVpbnQzMi10
eXBlZC1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgMi4zNDA4Ky0wLjA5MDcgICAgID8gICAg
ICAyLjg4MzUrLTAuNzYxNCAgICAgICAgPyBtaWdodCBiZSAxLjIzMTl4IHNsb3dlcgogICBlbGlk
YWJsZS1uZXctb2JqZWN0LWRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ljg5OTQrLTAu
OTU1NCAgICAgICAgICAgMTkuNDk5NSstMC41Mjc3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIwNXgg
ZmFzdGVyCiAgIGVsaWRhYmxlLW5ldy1vYmplY3Qtcm9mbGNvcHRlciAgICAgICAgICAgICAgICAg
ICAgMjEuNTM3OCstMTAuMjEyNCAgICA/ICAgICAyMi42Nzg2Ky02LjQ2ODAgICAgICAgID8gbWln
aHQgYmUgMS4wNTMweCBzbG93ZXIKICAgZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwgICAg
ICAgICAgICAgICAgICAgICAxNy4xOTYxKy0wLjU2MDkgICAgID8gICAgIDE3Ljg1MjErLTEuNDE2
NCAgICAgICAgPyBtaWdodCBiZSAxLjAzODF4IHNsb3dlcgogICBlbGlkYWJsZS1uZXctb2JqZWN0
LXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjQ4NzcrLTEuMjEyNSAgICAgICAgICAg
MTguODM4NCstMC44Nzg1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM0NXggZmFzdGVyCiAgIGVtcHR5
LXN0cmluZy1wbHVzLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuODk0OCstMC4z
NDI1ICAgICA/ICAgICAgNS45Njk1Ky0zLjAzOTcgICAgICAgID8gbWlnaHQgYmUgMS4yMTk2eCBz
bG93ZXIKICAgZW1zY3JpcHRlbi1jdWJlMmhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyMy40Nzk3Ky0wLjQ1NzYgICAgID8gICAgIDIzLjc4OTYrLTAuMzA3NSAgICAgICAgPyBtaWdo
dCBiZSAxLjAxMzJ4IHNsb3dlcgogICBldmFsLWNhY2hlZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIwLjAxMjArLTEuNzg1NyAgICAgPyAgICAgMjAuMTk5NSstMi4wMTMz
ICAgICAgICA/CiAgIGV2YWwtY29tcHV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjcuOTU0MistNC41NTAwICAgICAgICAgICAyNy4wNTE3Ky0zLjAyOTIgICAgICAgICAg
bWlnaHQgYmUgMS4wMzM0eCBmYXN0ZXIKICAgZXZhbC1ub3QtZXZhbC1jb21wdXRlLWFyZ3MgICAg
ICAgICAgICAgICAgICAgICAgICAyNi4wODY3Ky0xLjEyMTEgICAgICAgICAgIDI1LjE3NzcrLTEu
MTY5MyAgICAgICAgICBtaWdodCBiZSAxLjAzNjF4IGZhc3RlcgogICBldmFsLW5vdC1ldmFsLWNv
bXB1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LjE0NDErLTMuNzg1MiAgICAgICAg
ICAgMjYuMDgzOSstMy45MzkxICAgICAgICAKICAgZXhpdC1sZW5ndGgtb24tcGxhaW4tb2JqZWN0
ICAgICAgICAgICAgICAgICAgICAgICAxMi40OTAzKy01LjA4NTYgICAgICAgICAgIDEwLjY1MDAr
LTAuODcxMSAgICAgICAgICBtaWdodCBiZSAxLjE3Mjh4IGZhc3RlcgogICBleHRlcm5hbC1hcmd1
bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAgICAgICAgICAgICAxLjExMTQrLTAuMDQ4OCAgICAg
PyAgICAgIDEuMTIwMCstMC4xMTE5ICAgICAgICA/CiAgIGV4dGVybmFsLWFyZ3VtZW50cy1wdXRi
eXZhbCAgICAgICAgICAgICAgICAgICAgICAgIDIuMDkwMystMC4wOTk2ICAgICA/ICAgICAgMi4x
NjY4Ky0wLjE1NjggICAgICAgID8gbWlnaHQgYmUgMS4wMzY2eCBzbG93ZXIKICAgZml4ZWQtdHlw
ZWQtYXJyYXktc3RvcmFnZS12YXItaW5kZXggICAgICAgICAgICAgICAgMS41Njc0Ky0wLjEzNTUg
ICAgID8gICAgICAxLjU2OTgrLTAuMDk3NSAgICAgICAgPwogICBmaXhlZC10eXBlZC1hcnJheS1z
dG9yYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAxLjI3OTArLTAuMDQyMiAgICAgPyAgICAg
IDEuMzQyOSstMC4xNTc2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDUwMHggc2xvd2VyCiAgIEZsb2F0
MzJBcnJheS1tYXRyaXgtbXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNDQxMCstMC40
OTMwICAgICAgICAgICAgNS4zNzY1Ky0wLjIxMDAgICAgICAgICAgbWlnaHQgYmUgMS4wMTIweCBm
YXN0ZXIKICAgRmxvYXQzMkFycmF5LXRvLUZsb2F0NjRBcnJheS1zZXQgICAgICAgICAgICAgICAg
ICA0Mi4zMTk0Ky0yLjAzOTEgICAgID8gICAgIDQ0Ljk3MTQrLTIuOTI5NCAgICAgICAgPyBtaWdo
dCBiZSAxLjA2Mjd4IHNsb3dlcgogICBGbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZCAgICAg
ICAgICAgICAgICAgICAgIDY2LjM2MzgrLTIuMDcxMSAgICAgICAgICAgNjUuNzU0OSstMS40NTM3
ICAgICAgICAKICAgRmxvYXQ2NEFycmF5LXRvLUludDE2QXJyYXktc2V0ICAgICAgICAgICAgICAg
ICAgICA0OC44OTY3Ky0wLjk1MzEgICAgID8gICAgIDUwLjEyOTErLTQuMTk5MCAgICAgICAgPyBt
aWdodCBiZSAxLjAyNTJ4IHNsb3dlcgogICBmb2xkLWRvdWJsZS10by1pbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEzLjkyMjQrLTAuODkxMiAgICAgICAgICAgMTMuODk2OCstMC4y
OTMzICAgICAgICAKICAgZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJl
LWludCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA4LjY4OTgrLTAuNjMxMSAgICAgICAgICAgIDguMjE1NystMi45MjcxICAgICAgICAgIG1p
Z2h0IGJlIDEuMDU3N3ggZmFzdGVyCiAgIGZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1v
ZmZzZXQgICAgICAgICAgICAgIDcuNTIxMistMi4zNjY4ICAgICAgICAgICAgNy40NTY3Ky0yLjU4
MzIgICAgICAgIAogICBmb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tZ2V0LWJ5LW9mZnNldCAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
LjIyMjgrLTAuMTg1NSAgICAgPyAgICAgIDQuNjQyMCstMS40MDE2ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDk5M3ggc2xvd2VyCiAgIGZvbGQtbXVsdGktZ2V0LWJ5LW9mZnNldC10by1wb2x5LWdldC1i
eS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNC45OTQ0Ky0yLjgzOTQgICAgICAgICAgICA0LjEwMjkrLTAuMDUyNCAgICAgICAg
ICBtaWdodCBiZSAxLjIxNzN4IGZhc3RlcgogICBmb2xkLW11bHRpLXB1dC1ieS1vZmZzZXQtdG8t
cG9seS1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQuNTg4OCstMC42MTQxICAgICA/ICAgICAgNC42MzgwKy0wLjY1
MjEgICAgICAgID8gbWlnaHQgYmUgMS4wMTA3eCBzbG93ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnkt
b2Zmc2V0LXRvLXB1dC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNC45MDY0Ky0zLjIzNzUgICAgICAgICAgICAzLjgzMjAr
LTAuMjI5MyAgICAgICAgICBtaWdodCBiZSAxLjI4MDR4IGZhc3RlcgogICBmb2xkLW11bHRpLXB1
dC1ieS1vZmZzZXQtdG8tcmVwbGFjZS1vci10cmFuc2l0aW9uLXB1dC1ieS1vZmZzZXQgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi44NDUz
Ky0wLjcxNzUgICAgID8gICAgICA3LjYxODArLTIuNzcxOSAgICAgICAgPyBtaWdodCBiZSAxLjEx
Mjl4IHNsb3dlcgogICBmb2xkLXB1dC1ieS1pZC10by1tdWx0aS1wdXQtYnktb2Zmc2V0ICAgICAg
ICAgICAgICA4LjYwNjArLTMuMjc1NCAgICAgPyAgICAgIDkuNDE3OCstMi40MTY1ICAgICAgICA/
IG1pZ2h0IGJlIDEuMDk0M3ggc2xvd2VyCiAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10
by1tdWx0aS1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTEuOTU2MSstMTAuODAwNyAgICAgICAgICAgNy43NTM4Ky0w
Ljc4NDIgICAgICAgICAgbWlnaHQgYmUgMS41NDIweCBmYXN0ZXIKICAgZm9sZC1wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC4zMjgyKy0zLjUzNzggICAgICAg
ICAgICA4LjE0NTErLTAuNzEwMSAgICAgICAgICBtaWdodCBiZSAxLjI2ODB4IGZhc3RlcgogICBm
b2xkLXB1dC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjY0MjEr
LTMuNjUwNCAgICAgICAgICAgIDMuMzY4MistMC4wNjM5ICAgICAgICAgIG1pZ2h0IGJlIDEuNjc1
MXggZmFzdGVyCiAgIGZvci1vZi1pdGVyYXRlLWFycmF5LWVudHJpZXMgICAgICAgICAgICAgICAg
ICAgICAgIDkuMTgzMystMS4xODE3ICAgICAgICAgICAgOC42MjA2Ky0wLjczMDggICAgICAgICAg
bWlnaHQgYmUgMS4wNjUzeCBmYXN0ZXIKICAgZm9yLW9mLWl0ZXJhdGUtYXJyYXkta2V5cyAgICAg
ICAgICAgICAgICAgICAgICAgICAgNC4zNjk0Ky0wLjEwOTggICAgID8gICAgICA0LjU4OTIrLTAu
OTUzOSAgICAgICAgPyBtaWdodCBiZSAxLjA1MDN4IHNsb3dlcgogICBmb3Itb2YtaXRlcmF0ZS1h
cnJheS12YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICA0LjI1NjUrLTAuMTc2MSAgICAgICAg
ICAgIDQuMjA0MystMC4yODQwICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyNHggZmFzdGVyCiAgIGZy
ZWV6ZS1hbmQtZG8td29yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuOTIzOCst
MS4wMzk4ICAgICA/ICAgICAxNC40MjI2Ky0xLjU1MDAgICAgICAgID8gbWlnaHQgYmUgMS4wMzU4
eCBzbG93ZXIKICAgZnJvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxMC4zNTYwKy0wLjE5NTggICAgID8gICAgIDEwLjYzNDcrLTAuNTQwNCAgICAgICAgPyBt
aWdodCBiZSAxLjAyNjl4IHNsb3dlcgogICBmdGwtbGlicmFyeS1pbmxpbmluZy1kYXRhdmlldyAg
ICAgICAgICAgICAgICAgICAgIDgyLjAyNTUrLTIuOTU1NSAgICAgICAgICAgODAuODQ2MSstMC40
MTE1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0NnggZmFzdGVyCiAgIGZ0bC1saWJyYXJ5LWlubGlu
aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQuNzUzMistMS44NDQxICAgICA/ICAg
ICAyNS45OTQ2Ky0yLjgzNjMgICAgICAgID8gbWlnaHQgYmUgMS4wNTAxeCBzbG93ZXIKICAgZnRs
LXBvbHltb3JwaGljLWJpdGFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NS4xNTIwKy01
LjgyNTggICAgID8gICAgMTQ2LjE5MzArLTguOTY4MSAgICAgICAgPwogICBmdGwtcG9seW1vcnBo
aWMtYml0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ2LjM3OTMrLTMuNjY5OCAgICAg
PyAgICAxNzEuMTU0OCstODcuODc0NSAgICAgICA/IG1pZ2h0IGJlIDEuMTY5M3ggc2xvd2VyCiAg
IGZ0bC1wb2x5bW9ycGhpYy1iaXR4b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDUuNjI2
MCstNS4wNzM4ICAgICAgICAgIDE0My4wMzA4Ky0yLjE1MTYgICAgICAgICAgbWlnaHQgYmUgMS4w
MTgxeCBmYXN0ZXIKICAgZnRsLXBvbHltb3JwaGljLWRpdiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQ4OS4wNzc4Ky0zLjI3NjYgICAgID8gICAgNDg5LjU0MjIrLTcuMTE5MSAgICAgICAg
PwogICBmdGwtcG9seW1vcnBoaWMtbHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2
LjI4ODUrLTEwLjIwMTkgICAgPyAgICAxNzguMzA2MCstNS4yMDg3ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDExNHggc2xvd2VyCiAgIGZ0bC1wb2x5bW9ycGhpYy1tdWwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyNTEuMDQ1NystMS4zMzU2ICAgICA/ICAgIDI1NC4zOTcyKy01LjgyMjggICAg
ICAgID8gbWlnaHQgYmUgMS4wMTM0eCBzbG93ZXIKICAgZnRsLXBvbHltb3JwaGljLXJzaGlmdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDE3Mi42MTQ3Ky0zLjg5NjggICAgID8gICAgMTc4LjMx
MTkrLTEyLjE1MTMgICAgICAgPyBtaWdodCBiZSAxLjAzMzB4IHNsb3dlcgogICBmdGwtcG9seW1v
cnBoaWMtU3RyaW5nRnJvbUNoYXJDb2RlICAgICAgICAgICAgICAgIDQ2LjU1NjMrLTMuMzk5MSAg
ICAgICAgICAgNDQuODM1MystMC4zMjUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDM4NHggZmFzdGVy
CiAgIGZ0bC1wb2x5bW9ycGhpYy1zdWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzMu
NDIxNystMTEuMjkzNSAgICAgICAgIDE2OS41NTY5Ky02LjA1OTEgICAgICAgICAgbWlnaHQgYmUg
MS4wMjI4eCBmYXN0ZXIKICAgZnRsLXBvbHltb3JwaGljLXVyc2hpZnQgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE4Ny40NzkyKy00LjM4ODEgICAgICAgICAgMTg1LjIxOTkrLTMuMzIxOSAgICAg
ICAgICBtaWdodCBiZSAxLjAxMjJ4IGZhc3RlcgogICBmdW5jdGlvbi1iaW5kLWlubGluaW5nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTA5LjEzNDErLTguMzM4NSAgICAgPyAgICA1MTUuNDY4
MystMTkuNDM2NyAgICAgICA/IG1pZ2h0IGJlIDEuMDEyNHggc2xvd2VyCiAgIGZ1bmN0aW9uLWJp
bmQtbm8taW5saW5pbmcgICAgICAgICAgICAgICAgICAgICAgICA1MDcuOTY1NSstMTAuODM4NSAg
ICA/ICAgIDUzMi4yNDE4Ky01OS4wNDE4ICAgICAgID8gbWlnaHQgYmUgMS4wNDc4eCBzbG93ZXIK
ICAgZnVuY3Rpb24tY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS45
MzkxKy0wLjYwMTkgICAgICAgICAgICA5LjY3OTIrLTAuMjE1MSAgICAgICAgICBtaWdodCBiZSAx
LjAyNjl4IGZhc3RlcgogICBmdW5jdGlvbi1kb3QtYXBwbHkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyLjE2NzMrLTAuMjIyNSAgICAgICAgICAgIDIuMDQ2MSstMC4wNDY1ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDU5MnggZmFzdGVyCiAgIGZ1bmN0aW9uLXRlc3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMuMDg0MystMC43NTcyICAgICAgICAgICAgMi43Mzc0
Ky0wLjEyNjIgICAgICAgICAgbWlnaHQgYmUgMS4xMjY3eCBmYXN0ZXIKICAgZnVuY3Rpb24td2l0
aC1ldmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ni40NzYyKy0wLjg2NDMgICAg
ID8gICAgIDQ3LjQ2NzMrLTMuMjI0NiAgICAgICAgPyBtaWdodCBiZSAxLjAyMTN4IHNsb3dlcgog
ICBnY3NlLXBvbHktZ2V0LWxlc3Mtb2J2aW91cyAgICAgICAgICAgICAgICAgICAgICAgIDE1Ljc2
NjQrLTAuMzQwMiAgICAgPyAgICAgMTYuMzA1OCstMC40NzMyICAgICAgICA/IG1pZ2h0IGJlIDEu
MDM0Mnggc2xvd2VyCiAgIGdjc2UtcG9seS1nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTYuOTUyNistMS44MjUyICAgICAgICAgICAxNi44NTY0Ky0wLjQ4NDkgICAgICAg
IAogICBnY3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
Ljg4MTYrLTAuOTA1MiAgICAgICAgICAgIDMuNTYxMistMC4wNTA5ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDkwMHggZmFzdGVyCiAgIGdlbmVyYXRvci1jcmVhdGUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuOTY1OSstMC40Nzk2ICAgICAgICAgICAgMC45MzgwKy0wLjA4MTcgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjk3eCBmYXN0ZXIKICAgZ2VuZXJhdG9yLWZpYiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyMy4xNTAxKy0xLjQ2ODAgICAgID8gICAgIDIzLjk3
OTQrLTMuNDI3OSAgICAgICAgPyBtaWdodCBiZSAxLjAzNTh4IHNsb3dlcgogICBnZW5lcmF0b3It
ZnVuY3Rpb24tY3JlYXRlICAgICAgICAgICAgICAgICAgICAgICAgICA0LjAzNzArLTAuODU3OSAg
ICAgICAgICAgIDMuNjk0NistMC4yNDA1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDkyN3ggZmFzdGVy
CiAgIGdlbmVyYXRvci1zdW5zcGlkZXItYWNjZXNzLW5zaWV2ZSAgICAgICAgICAgICAgICAgIDQu
OTAxNystMC4yMjEyICAgICAgICAgICAgNC44OTU1Ky0wLjM1NDIgICAgICAgIAogICBnZW5lcmF0
b3Itd2l0aC1zZXZlcmFsLXR5cGVzICAgICAgICAgICAgICAgICAgICAgMTA3LjkwODYrLTMxLjc5
NjMgICAgPyAgICAxMTcuODQ0MistMy4wMDc3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDkyMXggc2xv
d2VyCiAgIGdldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNp
bXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjQ2MTMrLTAuMTA1NSAgICAgPyAgICAgIDIuNDc3OCstMC4yNjEzICAgICAgICA/CiAg
IGdldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNjU0NCst
MC4yNzYzICAgICAgICAgICAgNC42MzYwKy0wLjE3MDQgICAgICAgIAogICBnZXQtYnktaWQtY2hh
aW4tZnJvbS10cnktYmxvY2sgICAgICAgICAgICAgICAgICAgICAxLjkzNjkrLTAuMDUzOCAgICAg
PyAgICAgIDIuMDY1OCstMC4zMjk4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDY2Nnggc2xvd2VyCiAg
IGdldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24gICAgICAgICAgICAgIDIuOTc5
MystMC4xMTE1ICAgICA/ICAgICAgMy4wODc4Ky0wLjE5NjIgICAgICAgID8gbWlnaHQgYmUgMS4w
MzY0eCBzbG93ZXIKICAgZ2V0LWJ5LWlkLXByb3RvLW9yLXNlbGYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOC4wMjI2Ky0wLjQ2MzUgICAgID8gICAgICA4LjE1ODgrLTAuMTgxMyAgICAgICAg
PyBtaWdodCBiZSAxLjAxNzB4IHNsb3dlcgogICBnZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk3NzMrLTAuMTc1MyAgICAgPyAgICAgIDMu
MTA5NistMC41NjE0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ0NHggc2xvd2VyCiAgIGdldC1ieS1p
ZC1zZWxmLW9yLXByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMjEwMSstMC43MTc2
ICAgICA/ICAgICAgOC45OTQ5Ky0yLjMzMzIgICAgICAgID8gbWlnaHQgYmUgMS4wOTU2eCBzbG93
ZXIKICAgZ2V0LWJ5LXZhbC1vdXQtb2YtYm91bmRzICAgICAgICAgICAgICAgICAgICAgICAgICAg
NC40NzA0Ky0wLjQzNjIgICAgID8gICAgICA0LjU0NDErLTAuMzg2MCAgICAgICAgPyBtaWdodCBi
ZSAxLjAxNjV4IHNsb3dlcgogICBnZXQtYnktdmFsLXdpdGgtc3RyaW5nLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjk1NistMC4zNTY1ICAgICA/ICAgICAg
Mi43MTE3Ky0wLjMzNDMgICAgICAgID8KICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1iaW1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNTMzMCstMC41MjgwICAgICAgICAgICAg
Ni4zMDA3Ky0wLjEzOTQgICAgICAgICAgbWlnaHQgYmUgMS4wMzY5eCBmYXN0ZXIKICAgZ2V0LWJ5
LXZhbC13aXRoLXN0cmluZy1jaGFpbi1mcm9tLXRyeS1ibG9jayAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjA2NTErLTAuMTYwNiAgICAg
ICAgICAgIDIuMDQ1NSstMC4wODcyICAgICAgICAKICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNS41NzkyKy0wLjEyODAgICAgICAgICAgICA1LjQ2
MDYrLTAuMTQzNCAgICAgICAgICBtaWdodCBiZSAxLjAyMTd4IGZhc3RlcgogICBnZXQtYnktdmFs
LXdpdGgtc3RyaW5nLXByb3RvLW9yLXNlbGYgICAgICAgICAgICAgIDEyLjI4OTgrLTEuNzExMSAg
ICAgICAgICAgMTEuMDg5MistMy4wNDg2ICAgICAgICAgIG1pZ2h0IGJlIDEuMTA4M3ggZmFzdGVy
CiAgIGdldC1ieS12YWwtd2l0aC1zdHJpbmctcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzLjU0NDErLTAuMzc2NSAgICAgICAgICAgIDMuMzIzMSstMC4wOTkx
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDY2NXggZmFzdGVyCiAgIGdldC1ieS12YWwtd2l0aC1zdHJp
bmctc2VsZi1vci1wcm90byAgICAgICAgICAgICAgMTEuMDc2MCstMi45NzYxICAgICA/ICAgICAx
MS40MDQ3Ky0xLjM4OTIgICAgICAgID8gbWlnaHQgYmUgMS4wMjk3eCBzbG93ZXIKICAgZ2V0LWJ5
LXZhbC13aXRoLXN5bWJvbC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNp
bXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjY1MzErLTAuMDU1NyAgICAgPyAgICAgIDIuNzA3MCstMC4wNTcyICAgICAgICA/IG1p
Z2h0IGJlIDEuMDIwM3ggc2xvd2VyCiAgIGdldC1ieS12YWwtd2l0aC1zeW1ib2wtYmltb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjExMTkrLTAuMTcxMCAgICAgPyAgICAgIDgu
MTk3MystMC42MTc4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwNXggc2xvd2VyCiAgIGdldC1ieS12
YWwtd2l0aC1zeW1ib2wtY2hhaW4tZnJvbS10cnktYmxvY2sgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4wNzQyKy0wLjIyNzQgICAgICAg
ICAgICAyLjAzMDYrLTAuMTA0MSAgICAgICAgICBtaWdodCBiZSAxLjAyMTV4IGZhc3RlcgogICBn
ZXQtYnktdmFsLXdpdGgtc3ltYm9sLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjA1Mjgr
LTAuMDU5MiAgICAgICAgICAgIDYuMDM5MistMC4wODA0ICAgICAgICAKICAgZ2V0LWJ5LXZhbC13
aXRoLXN5bWJvbC1wcm90by1vci1zZWxmICAgICAgICAgICAgICAxMS41ODIyKy0xLjA2OTUgICAg
ID8gICAgIDExLjk2MDArLTQuMTQwNSAgICAgICAgPyBtaWdodCBiZSAxLjAzMjZ4IHNsb3dlcgog
ICBnZXQtYnktdmFsLXdpdGgtc3ltYm9sLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMy43NTk4Ky0wLjQxMDkgICAgICAgICAgICAzLjY0ODMrLTAuMjIwMiAg
ICAgICAgICBtaWdodCBiZSAxLjAzMDV4IGZhc3RlcgogICBnZXQtYnktdmFsLXdpdGgtc3ltYm9s
LXNlbGYtb3ItcHJvdG8gICAgICAgICAgICAgIDEwLjk3MjYrLTIuNTU2NyAgICAgPyAgICAgMTIu
NjQyMSstNi41OTE0ICAgICAgICA/IG1pZ2h0IGJlIDEuMTUyMnggc2xvd2VyCiAgIGdldF9ieV92
YWwtSW50MzJBcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuNDIxMCstMC4xOTMz
ICAgICAgICAgICAgMS4zNjc4Ky0wLjEwNDUgICAgICAgICAgbWlnaHQgYmUgMS4wMzg5eCBmYXN0
ZXIKICAgZ2V0X2NhbGxlZV9tb25vbW9ycGhpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Mi4yNDU4Ky0wLjE3NDYgICAgID8gICAgICAyLjM3NjMrLTAuMzM4OSAgICAgICAgPyBtaWdodCBi
ZSAxLjA1ODF4IHNsb3dlcgogICBnZXRfY2FsbGVlX3BvbHltb3JwaGljICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyLjgyNTcrLTAuMjM1OCAgICAgPyAgICAgIDIuOTczNCstMC4xOTA5ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDUyM3ggc2xvd2VyCiAgIGdldHRlci1uby1hY3RpdmF0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMjc5OCstMC43NDE0ICAgICAgICAgICAgMy4w
NTQ4Ky0wLjA2NDQgICAgICAgICAgbWlnaHQgYmUgMS4wNzM3eCBmYXN0ZXIKICAgZ2V0dGVyLXBy
b3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4wMzIwKy0wLjQzNjEg
ICAgICAgICAgICA0LjkxMDgrLTAuMTkzNSAgICAgICAgICBtaWdodCBiZSAxLjAyNDd4IGZhc3Rl
cgogICBnZXR0ZXItcmljaGFyZHMtdHJ5LWNhdGNoICAgICAgICAgICAgICAgICAgICAgICAgIDkw
LjgwODcrLTMuODkyMyAgICAgICAgICAgODguNDc2NCstMS4zMzE1ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDI2NHggZmFzdGVyCiAgIGdldHRlci1yaWNoYXJkcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNjkuMDcwNSstMzEuMzc0MyAgICAgICAgICA2NS43OTIwKy0xMC41OTM3ICAg
ICAgICAgbWlnaHQgYmUgMS4wNDk4eCBmYXN0ZXIKICAgZ2V0dGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xNTEwKy0wLjA3NTYgICAgID8gICAgICAzLjMx
NDgrLTAuMjIzOCAgICAgICAgPyBtaWdodCBiZSAxLjA1MjB4IHNsb3dlcgogICBnbG9iYWwtaXNO
YU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjA2OTUrLTAuODI0NSAg
ICAgPyAgICAgMTEuMjAzMistMS4xMzgyICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyMXggc2xvd2Vy
CiAgIGdsb2JhbC1vYmplY3QtYWNjZXNzLXdpdGgtbXV0YXRpbmctc3RydWN0dXJlICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMzM2Nyst
MC40MDA3ICAgICAgICAgICAgNS4zMjc1Ky0wLjIzMDMgICAgICAgIAogICBnbG9iYWwtdmFyLWNv
bnN0LWluZmVyLWZpcmUtZnJvbS1vcHQgICAgICAgICAgICAgICAwLjg1NzErLTAuMDQ2MiAgICAg
ICAgICAgIDAuODU2NistMC4wNTYxICAgICAgICAKICAgZ2xvYmFsLXZhci1jb25zdC1pbmZlciAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMC44MDc0Ky0wLjE1MTEgICAgICAgICAgICAwLjc0
NzgrLTAuMDI3MCAgICAgICAgICBtaWdodCBiZSAxLjA3OTd4IGZhc3RlcgogICBoYXJkLW92ZXJm
bG93LWNoZWNrLWVxdWFsICAgICAgICAgICAgICAgICAgICAgICAgIDI5LjE2NDcrLTIuNzM4MiAg
ICAgICAgICAgMjYuNTc5MCstNS40OTc5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDk3M3ggZmFzdGVy
CiAgIGhhcmQtb3ZlcmZsb3ctY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjku
NjI4MCstNy4wNjQxICAgICAgICAgICAyNi44OTkzKy0yLjkwMDcgICAgICAgICAgbWlnaHQgYmUg
MS4xMDE0eCBmYXN0ZXIKICAgaGFzLW93bi1wcm9wZXJ0eS1uYW1lLWNhY2hlICAgICAgICAgICAg
ICAgICAgICAgICA1OS42NDMwKy0zLjAyMzUgICAgICAgICAgIDU2LjY1MzkrLTMuODE4NyAgICAg
ICAgICBtaWdodCBiZSAxLjA1Mjh4IGZhc3RlcgogICBIYXNoTWFwLXB1dC1nZXQtaXRlcmF0ZS1r
ZXlzICAgICAgICAgICAgICAgICAgICAgIDIyLjkzMTUrLTAuOTcyNiAgICAgPyAgICAgMjMuMTg3
OSstMS40MDIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDExMnggc2xvd2VyCiAgIEhhc2hNYXAtcHV0
LWdldC1pdGVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMuNDY0NystMC43NjExICAg
ICAgICAgICAyMi44ODAzKy0wLjcwMzUgICAgICAgICAgbWlnaHQgYmUgMS4wMjU1eCBmYXN0ZXIK
ICAgSGFzaE1hcC1zdHJpbmctcHV0LWdldC1pdGVyYXRlICAgICAgICAgICAgICAgICAgICAyNC43
ODY1Ky0wLjYxNTkgICAgID8gICAgIDI1LjAyNjYrLTAuNzAyOSAgICAgICAgPwogICBob2lzdC1t
YWtlLXJvcGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk0NDgrLTAuNjkx
MSAgICAgPyAgICAgIDQuMzAyMistMS41NjQxICAgICAgICA/IG1pZ2h0IGJlIDEuMDkwNnggc2xv
d2VyCiAgIGhvaXN0LXBvbHktY2hlY2stc3RydWN0dXJlLWVmZmVjdGZ1bC1sb29wICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMzM1NSst
MC4yNTcxICAgICA/ICAgICAgMy44NDE2Ky0xLjA0NjAgICAgICAgID8gbWlnaHQgYmUgMS4xNTE3
eCBzbG93ZXIKICAgaG9pc3QtcG9seS1jaGVjay1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAg
ICAgICAgMi4xNTUyKy0wLjE4MDAgICAgICAgICAgICAyLjEyMjArLTAuMTMwOCAgICAgICAgICBt
aWdodCBiZSAxLjAxNTZ4IGZhc3RlcgogICBpbXBsaWNpdC1iaWdzd2l0Y2gtaW5kaXJlY3Qtc3lt
Ym9sICAgICAgICAgICAgICAgIDUyLjg5MjgrLTMuMjY2NyAgICAgPyAgICAgNTMuOTI1MistMy41
NzI5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE5NXggc2xvd2VyCiAgIGltdWwtZG91YmxlLW9ubHkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNDg2NSstMC4yNTEwICAgICA/ICAg
ICAgMy41MjgzKy0wLjMwNTQgICAgICAgID8gbWlnaHQgYmUgMS4wMTIweCBzbG93ZXIKICAgaW11
bC1pbnQtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS42NzY4Ky0w
LjM0MTQgICAgICAgICAgICA1LjYyMTIrLTAuMTc4NiAgICAgICAgCiAgIGltdWwtbWl4ZWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTkwMistMC4wNDQzICAgICA/
ICAgICAgMy41NzI4Ky0wLjczMDEgICAgICAgID8gbWlnaHQgYmUgMS4xMTk5eCBzbG93ZXIKICAg
aW4tZm91ci1jYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNi4wNTQy
Ky0wLjQzMDUgICAgID8gICAgIDE2Ljg0NDUrLTEuMjk3NSAgICAgICAgPyBtaWdodCBiZSAxLjA0
OTJ4IHNsb3dlcgogICBpbi1vbmUtY2FzZS1mYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA3Ljc1MzMrLTAuNjY0MCAgICAgICAgICAgIDcuNDIzNSstMC4xNDM1ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDQ0NHggZmFzdGVyCiAgIGluLW9uZS1jYXNlLXRydWUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDcuNzExOCstMC41MjMxICAgICA/ICAgICAgNy43Njc3Ky0x
LjE1MzkgICAgICAgID8KICAgaW4tdHdvLWNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNy43NTMwKy0wLjA4OTQgICAgID8gICAgICA4LjExMDUrLTEuMzQ4NCAgICAg
ICAgPyBtaWdodCBiZSAxLjA0NjF4IHNsb3dlcgogICBpbmRleGVkLXByb3BlcnRpZXMtaW4tb2Jq
ZWN0cyAgICAgICAgICAgICAgICAgICAgICAyLjg4MTIrLTAuMTM0OCAgICAgPyAgICAgIDIuODk5
MCstMC4xMTk5ICAgICAgICA/CiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5s
aW5lICAgICAgICAgICAgIDMuMjU5NSstMC4yNjI0ICAgICA/ICAgICAgMy45Mjg4Ky0xLjczMjIg
ICAgICAgID8gbWlnaHQgYmUgMS4yMDUzeCBzbG93ZXIKICAgaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLW1vdiAgICAgICAgICAgICAgICAgICAgICAgNy4yMzUyKy0wLjYxNjUgICAgICAgICAgICA3
LjE4MDcrLTEuMjU2NiAgICAgICAgCiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUtbm8taW5saW5lICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMTIuNDE1OCstMS4yMjUzICAgICA/ICAgICAxMi44MTg4Ky0xLjQ1Mzgg
ICAgICAgID8gbWlnaHQgYmUgMS4wMzI1eCBzbG93ZXIKICAgaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXB1dC10by1zY29wZSAgICAgICAgICAgICAyMy4yMTM0Ky0zLjQ2MjAgICAgID8gICAgIDIz
LjUzODMrLTIuODU1OSAgICAgICAgPyBtaWdodCBiZSAxLjAxNDB4IHNsb3dlcgogICBpbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MS4zMjM1Ky0wLjg1NTUgICAgID8g
ICAgIDUxLjYyNTIrLTEuODk4NCAgICAgICAgPwogICBpbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cmVlbnRlciAgICAgICAgICAgICAgICAgIDIzLjE5NzArLTIuMjI3OCAgICAgICAgICAgMjIuODU2
NSstMi4xODczICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0OXggZmFzdGVyCiAgIGluZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eSAgICAgICAgICAgICAgICAgICAgIDIuNzU2NystMC4xMzEyICAg
ICA/ICAgICAgMi44MjY1Ky0wLjI1MTMgICAgICAgID8gbWlnaHQgYmUgMS4wMjUzeCBzbG93ZXIK
ICAgaW5mZXItY29uc3RhbnQtcHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4x
Nzc5Ky0wLjA3MjggICAgID8gICAgICAyLjMwOTMrLTAuMzAyMSAgICAgICAgPyBtaWdodCBiZSAx
LjA2MDN4IHNsb3dlcgogICBpbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzICAgICAgICAg
ICAgICAgICAgICA4LjU5MTcrLTMuNjIyOSAgICAgICAgICAgIDcuMjY1MCstMC44NzUzICAgICAg
ICAgIG1pZ2h0IGJlIDEuMTgyNnggZmFzdGVyCiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdv
LXZhcnMgICAgICAgICAgICAgICAgICAgIDYuNzYxOSstMC43OTYxICAgICAgICAgICAgNi41MzA1
Ky0wLjIxNDYgICAgICAgICAgbWlnaHQgYmUgMS4wMzU0eCBmYXN0ZXIKICAgaW5mZXItb25lLXRp
bWUtY2xvc3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi40MTk0Ky0wLjI1MDUgICAg
ID8gICAgICA2LjQ2NjcrLTAuMDcxNCAgICAgICAgPwogICBpbmZlci1vbmUtdGltZS1kZWVwLWNs
b3N1cmUgICAgICAgICAgICAgICAgICAgICAgIDExLjkwODkrLTAuMjI1MyAgICAgPyAgICAgMTIu
MDg2OCstMC41NzQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE0OXggc2xvd2VyCiAgIGlubGluZS1h
cmd1bWVudHMtYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNDMyNSstMC42MzY5
ICAgICAgICAgICAgMy4xNDE4Ky0wLjMzMjcgICAgICAgICAgbWlnaHQgYmUgMS4wOTI1eCBmYXN0
ZXIKICAgaW5saW5lLWFyZ3VtZW50cy1hbGlhc2VkLWFjY2VzcyAgICAgICAgICAgICAgICAgICAg
My4zNTUwKy0wLjI5MzIgICAgICAgICAgICAzLjI1MjArLTAuMjMxNiAgICAgICAgICBtaWdodCBi
ZSAxLjAzMTd4IGZhc3RlcgogICBpbmxpbmUtYXJndW1lbnRzLWxvY2FsLWVzY2FwZSAgICAgICAg
ICAgICAgICAgICAgICAzLjM5MTUrLTAuMjU3OCAgICAgPyAgICAgIDMuNTgxMCstMC42MTUzICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDU1OXggc2xvd2VyCiAgIGlubGluZS1nZXQtc2NvcGVkLXZhciAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNDQ1MistMC4yNDIyICAgICAgICAgICAgMi40
MTAxKy0wLjIxNjMgICAgICAgICAgbWlnaHQgYmUgMS4wMTQ2eCBmYXN0ZXIKICAgaW5saW5lZC1w
dXQtYnktaWQtdHJhbnNpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgOC4xNzE0Ky0wLjU0ODIg
ICAgID8gICAgICA4LjMwNzIrLTAuODkxNCAgICAgICAgPyBtaWdodCBiZSAxLjAxNjZ4IHNsb3dl
cgogICBpbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbiAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwLjA5MjArLTIu
MTc1NiAgICAgICAgICAgNDkuMDk5OCstMC45MDQwICAgICAgICAgIG1pZ2h0IGJlIDEuMDIwMngg
ZmFzdGVyCiAgIGlubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAuNjA2
MystMy4yNjUxICAgICA/ICAgICA1MS4xNDY3Ky0zLjgwMTMgICAgICAgID8gbWlnaHQgYmUgMS4w
MTA3eCBzbG93ZXIKICAgaW5zdGFuY2VvZi1ib3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyMi40MTgyKy0xLjg0MjggICAgID8gICAgIDIzLjU1NjArLTMuMzIzOCAgICAgICAg
PyBtaWdodCBiZSAxLjA1MDh4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItYWJzLXRoZW4tZ2V0LWJ5
LXZhbCAgICAgICAgICAgICAgICAgICA4LjQwMDcrLTAuMTUyNSAgICAgPyAgICAgIDguNzk3NCst
MC44MzI2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ3Mnggc2xvd2VyCiAgIGludC1vci1vdGhlci1h
YnMtemVyby10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgMTcuODQ5OCstMC43MTQ1ICAgICA/
ICAgICAxOC4wNTAwKy0yLjc3NDMgICAgICAgID8gbWlnaHQgYmUgMS4wMTEyeCBzbG93ZXIKICAg
aW50LW9yLW90aGVyLWFkZC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgNC41MTE1
Ky0wLjQ4NzIgICAgICAgICAgICA0LjQ4NzQrLTAuNjIxNSAgICAgICAgCiAgIGludC1vci1vdGhl
ci1hZGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuOTM3NSstMC4xNjUxICAg
ICA/ICAgICAgNC45NjcwKy0wLjIzMzAgICAgICAgID8KICAgaW50LW9yLW90aGVyLWRpdi10aGVu
LWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgMy43ODAyKy0wLjE5MzYgICAgID8gICAgICAz
Ljg1MDgrLTAuMzk1NCAgICAgICAgPyBtaWdodCBiZSAxLjAxODd4IHNsb3dlcgogICBpbnQtb3It
b3RoZXItbWF4LXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICAzLjk3MzYrLTAuMTA1
MyAgICAgPyAgICAgIDQuMzQzMistMC44MzA2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDkzMHggc2xv
d2VyCiAgIGludC1vci1vdGhlci1taW4tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAg
IDMuNzk0MSstMC4wODc3ICAgICA/ICAgICAgMy44ODI5Ky0wLjIyMDQgICAgICAgID8gbWlnaHQg
YmUgMS4wMjM0eCBzbG93ZXIKICAgaW50LW9yLW90aGVyLW1vZC10aGVuLWdldC1ieS12YWwgICAg
ICAgICAgICAgICAgICAgMy43MTkwKy0wLjEyODAgICAgID8gICAgICAzLjk4OTgrLTAuNDIyMyAg
ICAgICAgPyBtaWdodCBiZSAxLjA3Mjh4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItbXVsLXRoZW4t
Z2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA2LjA0NTgrLTAuMjE2OSAgICAgICAgICAgIDUu
ODAyNSstMC4xODE5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQxOXggZmFzdGVyCiAgIGludC1vci1v
dGhlci1uZWctdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgMjIuMzAwNSstMC45MTcy
ICAgICA/ICAgICAyMy4yMjcxKy0yLjIyOTYgICAgICAgID8gbWlnaHQgYmUgMS4wNDE1eCBzbG93
ZXIKICAgaW50LW9yLW90aGVyLW5lZy16ZXJvLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAx
Ny42MjUyKy0xLjk0NzYgICAgID8gICAgIDE4LjE5NjcrLTEuNzgwOSAgICAgICAgPyBtaWdodCBi
ZSAxLjAzMjR4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItc3ViLXRoZW4tZ2V0LWJ5LXZhbCAgICAg
ICAgICAgICAgICAgICA1LjIxNjQrLTAuOTA1MyAgICAgICAgICAgIDUuMDgxNSstMC4zMTI4ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDI2NXggZmFzdGVyCiAgIGludC1vci1vdGhlci1zdWIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMDQ4MCstMC4xNzM5ICAgICAgICAgICAgMy45
MjQ2Ky0wLjExMTQgICAgICAgICAgbWlnaHQgYmUgMS4wMzE0eCBmYXN0ZXIKICAgaW50LW92ZXJm
bG93LWxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC40MDk0Ky0wLjEwMjEg
ICAgID8gICAgICA0LjUwNDUrLTAuMTc1NiAgICAgICAgPyBtaWdodCBiZSAxLjAyMTZ4IHNsb3dl
cgogICBJbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICAgIDQ2
LjU2MjQrLTYuNjg2OSAgICAgICAgICAgNDQuMDMzOCstMi40MzQwICAgICAgICAgIG1pZ2h0IGJl
IDEuMDU3NHggZmFzdGVyCiAgIEludDE2QXJyYXktYnViYmxlLXNvcnQtd2l0aC1ieXRlTGVuZ3Ro
ICAgICAgICAgICAgMTcuODE1NystMS43Mjk3ICAgICAgICAgICAxNi45NzgzKy0wLjYxNjMgICAg
ICAgICAgbWlnaHQgYmUgMS4wNDkzeCBmYXN0ZXIKICAgSW50MTZBcnJheS1idWJibGUtc29ydCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxNi4wODcwKy0wLjc3MjggICAgID8gICAgIDE2LjU2
MTQrLTEuNjA1OCAgICAgICAgPyBtaWdodCBiZSAxLjAyOTV4IHNsb3dlcgogICBJbnQxNkFycmF5
LWxvYWQtaW50LW11bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjkwMzgrLTAuMTY2MyAg
ICAgICAgICAgIDEuODM3MCstMC4wNTUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDM2M3ggZmFzdGVy
CiAgIEludDE2QXJyYXktdG8tSW50MzJBcnJheS1zZXQgICAgICAgICAgICAgICAgICAgICAgNDAu
OTAzNystNC4yNTgwICAgICAgICAgICAzOS43MDc1Ky0xLjExMzEgICAgICAgICAgbWlnaHQgYmUg
MS4wMzAxeCBmYXN0ZXIKICAgSW50MzJBcnJheS1hbGxvYy1sYXJnZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMy40MzA3Ky0wLjg5MzIgICAgICAgICAgIDEzLjE2MzUrLTAuNzE1NyAgICAg
ICAgICBtaWdodCBiZSAxLjAyMDN4IGZhc3RlcgogICBJbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2
ZWQgICAgICAgICAgICAgICAgICAgICAgIDUwLjg5MjArLTEuMDExOCAgICAgICAgICAgNTAuNjE1
NSstMS43NDU3ICAgICAgICAKICAgSW50MzJBcnJheS1hbGxvYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMy41MDY3Ky0wLjc4NTAgICAgICAgICAgICAzLjQxMTMrLTAuMTI5MiAg
ICAgICAgICBtaWdodCBiZSAxLjAyODB4IGZhc3RlcgogICBJbnQzMkFycmF5LUludDhBcnJheS12
aWV3LWFsbG9jICAgICAgICAgICAgICAgICAgICA4LjgzMjYrLTAuMzc0MSAgICAgPyAgICAgIDgu
OTI0NSstMC4xNjYwICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwNHggc2xvd2VyCiAgIGludDUyLXNw
aWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNDQ2NystMC4zNDY4
ICAgICA/ICAgICAgNS41MjY0Ky0wLjIzNzAgICAgICAgID8gbWlnaHQgYmUgMS4wMTQ2eCBzbG93
ZXIKICAgSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAz
OS44ODc0Ky0xLjgxMDUgICAgICAgICAgIDM5LjE4ODArLTQuMTk4MSAgICAgICAgICBtaWdodCBi
ZSAxLjAxNzh4IGZhc3RlcgogICBJbnQ4QXJyYXktbG9hZC13aXRoLWJ5dGVMZW5ndGggICAgICAg
ICAgICAgICAgICAgICAzLjY2MTUrLTAuMTE3NyAgICAgPyAgICAgIDMuNzYyMystMC4wNDUwICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDI3NXggc2xvd2VyCiAgIEludDhBcnJheS1sb2FkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNzY5OCstMC4zOTI3ICAgICAgICAgICAgMy42
NTQyKy0wLjA0NzggICAgICAgICAgbWlnaHQgYmUgMS4wMzE2eCBmYXN0ZXIKICAgaW50ZWdlci1k
aXZpZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS41MDU3Ky0xLjcyMDUg
ICAgICAgICAgIDExLjI2MDkrLTAuODA2NSAgICAgICAgICBtaWdodCBiZSAxLjAyMTd4IGZhc3Rl
cgogICBpbnRlZ2VyLW1vZHVsbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
LjMwMjUrLTAuMTUwMCAgICAgICAgICAgIDIuMjg2NCstMC4wNjU5ICAgICAgICAKICAgaXMtYXJy
YXktZm9yLWFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4xMjM3Ky0wLjIw
MjMgICAgID8gICAgICAyLjMyMjkrLTAuNTY0NSAgICAgICAgPyBtaWdodCBiZSAxLjA5Mzh4IHNs
b3dlcgogICBpcy1hcnJheS1mb3ItbWl4ZWQtY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0LjYyNDErLTAuMjMxMSAgICAgPyAgICAgIDQuNjUzNCstMC40OTA4ICAgICAgICA/CiAgIGlz
LWFycmF5LWZvci1ub24tYXJyYXktb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgIDIuMTA0Myst
MC4xNDI3ICAgICA/ICAgICAgMi4xNTc0Ky0wLjE3MTUgICAgICAgID8gbWlnaHQgYmUgMS4wMjUy
eCBzbG93ZXIKICAgaXMtYXJyYXktZm9yLXByb3h5ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMy4yMjk2Ky0wLjA1NDcgICAgID8gICAgICAzLjI5MDArLTAuMjA0OSAgICAgICAgPyBt
aWdodCBiZSAxLjAxODd4IHNsb3dlcgogICBpcy1ib29sZWFuLWZvbGQtdHJpY2t5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzLjA0MzIrLTAuNzUwMCAgICAgPyAgICAgIDMuMTc2OSstMC44
OTk4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ0MHggc2xvd2VyCiAgIGlzLWJvb2xlYW4tZm9sZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTY5NystMC4wNTUzICAgICA/ICAg
ICAgMi4xOTQ1Ky0wLjA2MzQgICAgICAgID8gbWlnaHQgYmUgMS4wMTE0eCBzbG93ZXIKICAgaXMt
ZnVuY3Rpb24tZm9sZC10cmlja3ktaW50ZXJuYWwtZnVuY3Rpb24gICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC43OTgyKy0wLjUxMDQgICAg
ICAgICAgIDEwLjczMzUrLTAuMjU1NyAgICAgICAgCiAgIGlzLWZ1bmN0aW9uLWZvbGQtdHJpY2t5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMDU1NistMC4xNzAyICAgICAgICAgICAgMi45
Nzc4Ky0wLjA4NjEgICAgICAgICAgbWlnaHQgYmUgMS4wMjYxeCBmYXN0ZXIKICAgaXMtZnVuY3Rp
b24tZm9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yNDQ5Ky0wLjEwMzIg
ICAgID8gICAgICAyLjI0NjQrLTAuMjI4OCAgICAgICAgPwogICBpcy1udW1iZXItZm9sZC10cmlj
a3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjkyNTYrLTAuMDc1MSAgICAgPyAgICAg
IDMuMDg4NCstMC4zMjI0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDU1N3ggc2xvd2VyCiAgIGlzLW51
bWJlci1mb2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMjQ3NystMC4x
NTI0ICAgICA/ICAgICAgMi40NDk2Ky0wLjM2MzIgICAgICAgID8gbWlnaHQgYmUgMS4wODk4eCBz
bG93ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtZm9sZC1mdW5jdGlvbnMgICAgICAgICAgICAgICAg
ICAgMi4zODE2Ky0wLjUxNjEgICAgICAgICAgICAyLjMwNDArLTAuMjYzMiAgICAgICAgICBtaWdo
dCBiZSAxLjAzMzd4IGZhc3RlcgogICBpcy1vYmplY3Qtb3ItbnVsbC1mb2xkLWxlc3MtdHJpY2t5
ICAgICAgICAgICAgICAgICAzLjA1NTgrLTAuMzQzNCAgICAgPyAgICAgIDMuMjM3MistMC41OTEz
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDU5NHggc2xvd2VyCiAgIGlzLW9iamVjdC1vci1udWxsLWZv
bGQtdHJpY2t5ICAgICAgICAgICAgICAgICAgICAgIDMuNzU1MSstMS4wODgwICAgICAgICAgICAg
My4yOTk3Ky0wLjA0OTUgICAgICAgICAgbWlnaHQgYmUgMS4xMzgweCBmYXN0ZXIKICAgaXMtb2Jq
ZWN0LW9yLW51bGwtZm9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yNDczKy0wLjIx
NzYgICAgID8gICAgICAyLjI2NTArLTAuMTg1MCAgICAgICAgPwogICBpcy1vYmplY3Qtb3ItbnVs
bC10cmlja2llci1mdW5jdGlvbiAgICAgICAgICAgICAgICAzLjA4MjMrLTAuMTc5NCAgICAgICAg
ICAgIDMuMDE2MistMC4wNDYxICAgICAgICAgIG1pZ2h0IGJlIDEuMDIxOXggZmFzdGVyCiAgIGlz
LW9iamVjdC1vci1udWxsLXRyaWNraWVyLWludGVybmFsLWZ1bmN0aW9uICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuNTY4MistMC40MjEx
ICAgICA/ICAgICAxMS4yMTE4Ky0yLjEyMDQgICAgICAgID8gbWlnaHQgYmUgMS4wNjA5eCBzbG93
ZXIKICAgaXMtb2JqZWN0LW9yLW51bGwtdHJpY2t5LWZ1bmN0aW9uICAgICAgICAgICAgICAgICAg
Mi45NTg5Ky0wLjA5MTAgICAgID8gICAgICAzLjE3NzArLTAuNDQ3OCAgICAgICAgPyBtaWdodCBi
ZSAxLjA3Mzd4IHNsb3dlcgogICBpcy1vYmplY3Qtb3ItbnVsbC10cmlja3ktaW50ZXJuYWwtZnVu
Y3Rpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNy4zNDMzKy0wLjU5ODYgICAgICAgICAgICA2LjkwMDYrLTAuMTIyNCAgICAgICAgICBt
aWdodCBiZSAxLjA2NDJ4IGZhc3RlcgogICBpcy1zdHJpbmctZm9sZC10cmlja3kgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyLjk3MTIrLTAuMTgwNSAgICAgPyAgICAgIDMuMDQyNCstMC4y
MDk1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0MHggc2xvd2VyCiAgIGlzLXN0cmluZy1mb2xkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMjIwMSstMC4xMzg1ICAgICA/ICAg
ICAgMi4zMDQ1Ky0wLjIzNzUgICAgICAgID8gbWlnaHQgYmUgMS4wMzgweCBzbG93ZXIKICAgaXMt
c3ltYm9sLW1peGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4zOTcyKy0w
LjE1NzMgICAgID8gICAgICA0LjQ5MTArLTAuMDY2OSAgICAgICAgPyBtaWdodCBiZSAxLjAyMTN4
IHNsb3dlcgogICBpcy1zeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLjU2OTgrLTAuMDk3MSAgICAgPyAgICAgIDEuNTc4OSstMC4wNjk3ICAgICAgICA/CiAg
IGlzLXVuZGVmaW5lZC1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjc0
NCstMC4xMDEwICAgICAgICAgICAgMi41ODMxKy0wLjA5ODUgICAgICAgICAgbWlnaHQgYmUgMS4w
MzUzeCBmYXN0ZXIKICAgaXMtdW5kZWZpbmVkLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi4xNDkwKy0wLjA0NTggICAgID8gICAgICAyLjI1MzArLTAuMDY3MCAgICAgICAg
PyBtaWdodCBiZSAxLjA0ODR4IHNsb3dlcgogICBKU09OUC1uZWdhdGl2ZS0wICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjM0NzIrLTAuMTYzMyAgICAgICAgICAgIDAuMzA2NSst
MC4wNTAxICAgICAgICAgIG1pZ2h0IGJlIDEuMTMzMHggZmFzdGVyCiAgIGxhcmdlLWludC1jYXB0
dXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTQwMCstMC4yMzEwICAgICA/
ICAgICAgMy4yMzk3Ky0wLjY3MjYgICAgICAgID8gbWlnaHQgYmUgMS4wMzE3eCBzbG93ZXIKICAg
bGFyZ2UtaW50LW5lZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC41NTE5
Ky0wLjc1NzAgICAgID8gICAgIDEwLjczMzQrLTAuNDU3MCAgICAgICAgPyBtaWdodCBiZSAxLjAx
NzJ4IHNsb3dlcgogICBsYXJnZS1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA4LjMzMTcrLTAuNDUyMiAgICAgPyAgICAgIDguNjUwMystMC44ODMxICAgICAgICA/
IG1pZ2h0IGJlIDEuMDM4Mnggc2xvd2VyCiAgIGxhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRp
dGlvbnMgICAgICAgICAgICAgICA0NzMuMzQ0NCstNDUuNDI1OCAgICA/ICAgIDQ4Ni4xMDg0Ky0y
OC4wOTUzICAgICAgID8gbWlnaHQgYmUgMS4wMjcweCBzbG93ZXIKICAgbGFyZ2UtbWFwLWl0ZXJh
dGlvbi13aXRoLW11dGF0aW9uICAgICAgICAgICAgICAgIDI1MS4yMDkzKy0zLjk0MjAgICAgID8g
ICAgMjYxLjI5ODArLTI1LjUxMTMgICAgICAgPyBtaWdodCBiZSAxLjA0MDJ4IHNsb3dlcgogICBs
YXJnZS1tYXAtaXRlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxLjI0NDAr
LTQuNTkwNyAgICAgPyAgICAxMjIuODM2OCstNy4zMzczICAgICAgICA/IG1pZ2h0IGJlIDEuMDEz
MXggc2xvd2VyCiAgIGxhenktYXJyYXktc3BlY2llcy13YXRjaHBvaW50cyAgICAgICAgICAgICAg
ICAgICAgMjUuNTIxMystMS42OTcxICAgICAgICAgICAyNS4yNDM4Ky0xLjcwNDcgICAgICAgICAg
bWlnaHQgYmUgMS4wMTEweCBmYXN0ZXIKICAgbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMgICAg
ICAgICAgICAgICAgICAgICAgICAzNS4yMTg5Ky0zLjU2OTkgICAgICAgICAgIDMzLjI2MDYrLTAu
NTkyMCAgICAgICAgICBtaWdodCBiZSAxLjA1ODl4IGZhc3RlcgogICBsaWNtLWRyYWdvbnMtb3Zl
cmZsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjU0NTcrLTEuODAyMSAgICAgPyAg
ICAgMjAuMDIyMystMS41MTk5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0NHggc2xvd2VyCiAgIGxp
Y20tZHJhZ29ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcuMjEyMist
MC42MTQzICAgICA/ICAgICAzOC45NzQwKy0zLjYyMzYgICAgICAgID8gbWlnaHQgYmUgMS4wNDcz
eCBzbG93ZXIKICAgbG9hZC12YXJhcmdzLWVsaW1pbmF0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAyMS4wMDk4Ky0xLjU1NzAgICAgICAgICAgIDE4LjM5ODArLTIuNTU0OSAgICAgICAgICBt
aWdodCBiZSAxLjE0MjB4IGZhc3RlcgogICBsb2NhbGUtY29tcGFyZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIyLjUxNjArLTIuODgwNiAgICAgICAgICAgMjIuMTI0MSstMS4y
MTU1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3N3ggZmFzdGVyCiAgIGxvZ2ljYWwtbm90LXdlaXJk
LXR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjUzNCstMC4zMzYzICAgICAgICAg
ICAgMi42MTQ3Ky0wLjA5ODkgICAgICAgICAgbWlnaHQgYmUgMS4wMTQ4eCBmYXN0ZXIKICAgbG9n
aWNhbC1ub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy44MzYyKy0w
LjA3ODEgICAgICAgICAgICAzLjgwMTMrLTAuMDUxMCAgICAgICAgCiAgIGxvdHMtb2YtZmllbGRz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNzU3MystMC40Njc5ICAgICAg
ICAgICAgOS41OTY1Ky0wLjU4MjUgICAgICAgICAgbWlnaHQgYmUgMS4wMTY4eCBmYXN0ZXIKICAg
bWFrZS1pbmRleGVkLXN0b3JhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43NDkz
Ky0wLjM3NTQgICAgICAgICAgICAyLjY5MDArLTAuMTg1OSAgICAgICAgICBtaWdodCBiZSAxLjAy
MjB4IGZhc3RlcgogICBtYWtlLXJvcGUtY3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjA0NjQrLTAuNDYxMyAgICAgICAgICAgIDIuODM3MystMC4xMjQyICAgICAgICAg
IG1pZ2h0IGJlIDEuMDczN3ggZmFzdGVyCiAgIG1hbnktZm9yZWFjaC1jYWxscyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIuMzE4MistMC4wODMyICAgICA/ICAgICAgMi4zNTE0Ky0w
LjExMDcgICAgICAgID8gbWlnaHQgYmUgMS4wMTQzeCBzbG93ZXIKICAgbWFueS1yZXBlYXQtc3Rv
cmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMi4wODIwKy0zLjM0NDggICAgICAg
ICAgIDIxLjgyNjIrLTAuOTkzNiAgICAgICAgICBtaWdodCBiZSAxLjAxMTd4IGZhc3RlcgogICBt
YXAtY29uc3RhbnQta2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY4LjcyOTEr
LTcuNjU3NiAgICAgICAgICAxNjYuNDYzNystMi45ODMxICAgICAgICAgIG1pZ2h0IGJlIDEuMDEz
NnggZmFzdGVyCiAgIG1hcC1mb3ItZWFjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUuMjA0MystMS4wMjU2ICAgICAgICAgICAgNS4xMzM5Ky0wLjQyNTYgICAgICAgICAg
bWlnaHQgYmUgMS4wMTM3eCBmYXN0ZXIKICAgbWFwLWZvci1vZiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyMy45NTM3Ky0yLjI1MTggICAgID8gICAgIDI0LjIzOTErLTIu
MzE2MiAgICAgICAgPyBtaWdodCBiZSAxLjAxMTl4IHNsb3dlcgogICBtYXAtZ2V0LWdldC1jc2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAyLjUxNTcrLTE3LjQ1MzIgICAgPyAg
ICA2MDcuMjkxMystMTEuMzY0MSAgICAgICA/CiAgIG1hcC1oYXMtZ2V0LWNzZS1vcHBvcnR1bml0
eSAgICAgICAgICAgICAgICAgICAgICAgODAuNDk4MCstNS45NzIyICAgICAgICAgICA3OS45NTMz
Ky0zLjU0ODAgICAgICAgIAogICBtYXAta2V5LXdlbGwtdHlwZWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDg2LjYxNzYrLTEuOTcxMCAgICAgPyAgICAgOTkuMTI3MCstNTEuNjgxNiAg
ICAgICA/IG1pZ2h0IGJlIDEuMTQ0NHggc2xvd2VyCiAgIG1hcC1yZWhhc2ggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMDI3OSstMC4yMDcwICAgICAgICAgICAgOC4w
MTc1Ky0wLjE2MTIgICAgICAgIAogICBtYXJzYWdsaWEtbGFyZ2VyLWludHMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDcwLjE2NDArLTcuNTgzMCAgICAgICAgICAgNjguMDM2NCstNC4wMjcw
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMxM3ggZmFzdGVyCiAgIG1hcnNhZ2xpYS1vc3ItZW50cnkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkuMjA4MCstMC45NDQ0ICAgICAgICAgICAx
OC40OTA3Ky0xLjA5NzAgICAgICAgICAgbWlnaHQgYmUgMS4wMzg4eCBmYXN0ZXIKICAgbWF0aC1y
YW5kb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNS43NzQyKy0wLjk2
MDUgICAgICAgICAgIDE1LjI0MzgrLTAuMjE4MSAgICAgICAgICBtaWdodCBiZSAxLjAzNDh4IGZh
c3RlcgogICBtYXRoLXRydW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1LjgzMjIrLTAuMTQ0OSAgICAgPyAgICAgIDYuMzI0OCstMS4zNDEwICAgICAgICA/IG1pZ2h0
IGJlIDEuMDg0NXggc2xvd2VyCiAgIG1hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVl
cyAgICAgICAgICAgICAgMjkuOTY2MystMy4xNzEwICAgICAgICAgICAyOS40MjYwKy0xLjYzMDkg
ICAgICAgICAgbWlnaHQgYmUgMS4wMTg0eCBmYXN0ZXIKICAgbWF4LWJvb2xlYW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4zNDQ5Ky0wLjA4MDEgICAgID8gICAgICAy
LjU4OTgrLTAuNjcwMCAgICAgICAgPyBtaWdodCBiZSAxLjEwNDV4IHNsb3dlcgogICBtZWdhbW9y
cGhpYy1sb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzLjcwNTQrLTcuMzY1
NSAgICAgICAgICAgMzEuMjc0NSstNS42ODM1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDc3N3ggZmFz
dGVyCiAgIG1ldGhvZC1vbi1udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTkuMDcyOSstMi44MDM2ICAgICAgICAgICAxOC44MTUzKy0yLjY0ODkgICAgICAgICAgbWlnaHQg
YmUgMS4wMTM3eCBmYXN0ZXIKICAgbWluLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMi4zMjAxKy0wLjA0MDkgICAgID8gICAgICAyLjM1MTQrLTAuMjExMCAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMzV4IHNsb3dlcgogICBtaW51cy1ib29sZWFuLWRvdWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjQyMjUrLTAuMTkxNiAgICAgICAgICAgIDIu
MzcyNystMC4wNDcyICAgICAgICAgIG1pZ2h0IGJlIDEuMDIxMHggZmFzdGVyCiAgIG1pbnVzLWJv
b2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTE1NSstMC4yMTM0
ICAgICAgICAgICAgMi4wNjA2Ky0wLjEyODggICAgICAgICAgbWlnaHQgYmUgMS4wMjY3eCBmYXN0
ZXIKICAgbWlzYy1idWdzLTg0NzM4OS1qcGVnMjAwMCAgICAgICAgICAgICAgICAgICAgICAgNDE0
NC4wMzU1Ky00Ny4zOTUyICAgICAgICA0MTE5LjU3NjIrLTM4LjMwODYgICAgICAgCiAgIG1pc2Mt
c3RyaWN0LWVxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIuNjQ4MSstMi41
MzY2ICAgICA/ICAgICAyNC4wMzE2Ky0xLjU0NTEgICAgICAgID8gbWlnaHQgYmUgMS4wNjExeCBz
bG93ZXIKICAgbW9kLWJvb2xlYW4tZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOS41MTU1Ky0wLjE5NDMgICAgID8gICAgICA5Ljc1MjcrLTAuNjUyNyAgICAgICAgPyBtaWdo
dCBiZSAxLjAyNDl4IHNsb3dlcgogICBtb2QtYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA3LjUyODMrLTAuNTE4NSAgICAgICAgICAgIDcuNDA2NistMC40MDM4
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE2NHggZmFzdGVyCiAgIG11bC1ib29sZWFuLWRvdWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzcwMystMC4wODQwICAgICA/ICAgICAg
Mi43NzcwKy0wLjAyNzMgICAgICAgID8KICAgbXVsLWJvb2xlYW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi41NTkwKy0wLjQwODYgICAgID8gICAgICAyLjY0MzcrLTAu
NjM2NCAgICAgICAgPyBtaWdodCBiZSAxLjAzMzF4IHNsb3dlcgogICBuZWctYm9vbGVhbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjU4OTQrLTAuMjg3MiAgICAgICAg
ICAgIDIuNDg4MistMC4xNTk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQwNnggZmFzdGVyCiAgIG5l
Z2F0aXZlLXplcm8tZGl2aWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzc5MSst
MC4wMjgzICAgICA/ICAgICAgMC4zOTI1Ky0wLjA1ODkgICAgICAgID8gbWlnaHQgYmUgMS4wMzU0
eCBzbG93ZXIKICAgbmVnYXRpdmUtemVyby1tb2R1bG8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC40MTYzKy0wLjA2MjAgICAgICAgICAgICAwLjM5MzMrLTAuMDEwNCAgICAgICAgICBt
aWdodCBiZSAxLjA1ODV4IGZhc3RlcgogICBuZWdhdGl2ZS16ZXJvLW5lZ2F0ZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLjM4MTMrLTAuMDU2NyAgICAgICAgICAgIDAuMzc0MCstMC4w
NTczICAgICAgICAgIG1pZ2h0IGJlIDEuMDE5NnggZmFzdGVyCiAgIG5lc3RlZC1mdW5jdGlvbi1w
YXJzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcuOTk1NSstMi40NTU3ICAgICAgICAg
ICAzNi4zODI2Ky0xLjQ3MTAgICAgICAgICAgbWlnaHQgYmUgMS4wNDQzeCBmYXN0ZXIKICAgbmV3
LWFycmF5LWJ1ZmZlci1kZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OS45Njk0Ky0w
Ljg2NjQgICAgICAgICAgIDU5LjY0NDErLTAuNDk0NSAgICAgICAgCiAgIG5ldy1hcnJheS1idWZm
ZXItcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMzE2OCstMC4xMjM1ICAgICA/
ICAgICAgNC42NDI4Ky0wLjYwODEgICAgICAgID8gbWlnaHQgYmUgMS4wNzU1eCBzbG93ZXIKICAg
bmV3LWFycmF5LWRlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy40NDc4
Ky0wLjQzMDYgICAgID8gICAgICA3LjY0NjkrLTAuNzE3MyAgICAgICAgPyBtaWdodCBiZSAxLjAy
Njd4IHNsb3dlcgogICBuZXctYXJyYXktcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjIyMzIrLTAuMjY1MyAgICAgPyAgICAgIDMuMzAwNistMC4yMTY4ICAgICAgICA/
IG1pZ2h0IGJlIDEuMDI0MHggc2xvd2VyCiAgIG5vLWlubGluZS1jb25zdHJ1Y3RvciAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjYuMzY1NSstMC4zMTg5ICAgICA/ICAgICAyNy4yMjM0Ky0z
LjM1MzEgICAgICAgID8gbWlnaHQgYmUgMS4wMzI1eCBzbG93ZXIKICAgTnVtYmVyLWlzTmFOICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS4zOTM3Ky0wLjk5NDMgICAgICAg
ICAgIDExLjI1NTcrLTAuNTY1MiAgICAgICAgICBtaWdodCBiZSAxLjAxMjN4IGZhc3RlcgogICBu
dW1iZXItdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk3MTAr
LTAuMDQ4MiAgICAgPyAgICAgIDMuMDAzMCstMC4wNTQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEw
OHggc2xvd2VyCiAgIG9iamVjdC1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUuMzgwOSstMS4wMTg5ICAgICAgICAgICAgNS4wMDIzKy0wLjA1MjggICAgICAgICAg
bWlnaHQgYmUgMS4wNzU3eCBmYXN0ZXIKICAgb2JqZWN0LWNsb3N1cmUtY2FsbCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNC43ODU2Ky0wLjA5MDUgICAgID8gICAgICA1LjI3NTErLTEu
MzQzMyAgICAgICAgPyBtaWdodCBiZSAxLjEwMjN4IHNsb3dlcgogICBvYmplY3QtZ2V0LW93bi1w
cm9wZXJ0eS1zeW1ib2xzLW9uLWxhcmdlLWFycmF5ICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMjQwMistMC4wNTU3ICAgICAgICAgICAg
MS4xOTk1Ky0wLjA5NDUgICAgICAgICAgbWlnaHQgYmUgMS4wMzM5eCBmYXN0ZXIKICAgb2JqZWN0
LWludC1hZGQtYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4zNTI3Ky0wLjcx
MjUgICAgID8gICAgICA4LjYwODcrLTEuNzQxMSAgICAgICAgPyBtaWdodCBiZSAxLjAzMDd4IHNs
b3dlcgogICBvYmplY3QtaW50LWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEzLjcwNTErLTAuNjg3NCAgICAgICAgICAgMTMuNDkwMistMC40MzIyICAgICAgICAgIG1pZ2h0
IGJlIDEuMDE1OXggZmFzdGVyCiAgIG9iamVjdC1pbnQtYW5kLWFycmF5ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDguMzE4NystMC41OTEyICAgICA/ICAgICAgOC45MDYzKy0yLjEzOTkg
ICAgICAgID8gbWlnaHQgYmUgMS4wNzA2eCBzbG93ZXIKICAgb2JqZWN0LWludC1tdWwtYXJyYXkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS40NDA4Ky0wLjE4MjcgICAgID8gICAgIDEy
LjE0MjQrLTEuNTYxNCAgICAgICAgPyBtaWdodCBiZSAxLjA2MTN4IHNsb3dlcgogICBvYmplY3Qt
aW50LXN1Yi1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjc5NDIrLTAuOTI3
OSAgICAgICAgICAgMTEuNzY0NSstMC42MjExICAgICAgICAKICAgb2JqZWN0LWludC1zdWIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMy4yOTUyKy0wLjUyOTYgICAgID8gICAg
IDEzLjY0MDIrLTAuNzYyOCAgICAgICAgPyBtaWdodCBiZSAxLjAyNTl4IHNsb3dlcgogICBvYmpl
Y3QtbHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjA1MzArLTAu
MDk4NCAgICAgPyAgICAgIDUuMTEyNistMC4xNzQxICAgICAgICA/IG1pZ2h0IGJlIDEuMDExOHgg
c2xvd2VyCiAgIG9iamVjdC1vciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDUuMTgyNistMC40NTQyICAgICA/ICAgICAgNS40NDE1Ky0wLjM5OTggICAgICAgID8gbWln
aHQgYmUgMS4wNTAweCBzbG93ZXIKICAgb2JqZWN0LXJzaGlmdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNS4wNjIwKy0wLjEwODkgICAgID8gICAgICA1LjIzMzcrLTAuMjAy
MCAgICAgICAgPyBtaWdodCBiZSAxLjAzMzl4IHNsb3dlcgogICBvYmplY3QtdGVzdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjczMzUrLTAuMTA1MCAgICAgPyAgICAg
IDIuNzk3OCstMC40MTYwICAgICAgICA/IG1pZ2h0IGJlIDEuMDIzNXggc2xvd2VyCiAgIG9iamVj
dC11cnNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMTMxMistMC4x
NTIyICAgICA/ICAgICAgNS4yNTM3Ky0wLjQ0NjkgICAgICAgID8gbWlnaHQgYmUgMS4wMjM5eCBz
bG93ZXIKICAgb2JqZWN0LXhvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNS4zNTAwKy0wLjc1NTcgICAgICAgICAgICA1LjAyMjUrLTAuMTIyMyAgICAgICAgICBtaWdo
dCBiZSAxLjA2NTJ4IGZhc3RlcgogICBvYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuICAgICAg
ICAgICAgICAgICAgICAgIDg0LjM1NjArLTAuNjM2NiAgICAgPyAgICAgODUuMzQzOSstMS45ODYy
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDExN3ggc2xvd2VyCiAgIG9idmlvdXMtc2luay1wYXRob2xv
Z3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTguMDc0MystMS4yNTkzICAgICAgICAgICAx
Ny4xOTcyKy0xLjQ2MzYgICAgICAgICAgbWlnaHQgYmUgMS4wNTEweCBmYXN0ZXIKICAgb2J2aW91
c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QgICAgICAgICAgICAgICAgICAgICAxNi4xNzI5Ky0yLjcy
MjUgICAgICAgICAgIDE1Ljg5ODgrLTAuOTUxMCAgICAgICAgICBtaWdodCBiZSAxLjAxNzJ4IGZh
c3RlcgogICBwbHVzLWJvb2xlYW4tYXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyLjM0NzcrLTAuNDgwNiAgICAgICAgICAgIDIuMTAyMCstMC4wNDQwICAgICAgICAgIG1pZ2h0
IGJlIDEuMTE2OXggZmFzdGVyCiAgIHBsdXMtYm9vbGVhbi1kb3VibGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIuNTM4NCstMC4zMDA3ICAgICAgICAgICAgMi41MzI1Ky0wLjIwNzUg
ICAgICAgIAogICBwbHVzLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjA1ODErLTAuMTkzNCAgICAgPyAgICAgIDIuMDc0MystMC4wNDM3ICAgICAgICA/CiAg
IHBvbHktY2hhaW4tYWNjZXNzLWRpZmZlcmVudC1wcm90b3R5cGVzLXNpbXBsZSAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjQ1MTQrLTAu
MDU0NCAgICAgPyAgICAgIDIuNDcyMistMC4wNzI0ICAgICAgICA/CiAgIHBvbHktY2hhaW4tYWNj
ZXNzLWRpZmZlcmVudC1wcm90b3R5cGVzICAgICAgICAgICAgIDIuNDk5NistMC4wNTIwICAgICA/
ICAgICAgMi42OTAxKy0wLjM2ODggICAgICAgID8gbWlnaHQgYmUgMS4wNzYyeCBzbG93ZXIKICAg
cG9seS1jaGFpbi1hY2Nlc3Mtc2ltcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgMi41MDA5
Ky0wLjExNzcgICAgID8gICAgICAyLjU4MzErLTAuMTA3NiAgICAgICAgPyBtaWdodCBiZSAxLjAz
Mjl4IHNsb3dlcgogICBwb2x5LWNoYWluLWFjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyLjczMjMrLTAuNzQ5NyAgICAgICAgICAgIDIuNTczNystMC4xODc5ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDYxNnggZmFzdGVyCiAgIHBvbHktc3RyaWN0ZXEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNTAuMTU1MystMC4yODc5ICAgICA/ICAgICA1MC42NjYyKy0w
LjY0NTYgICAgICAgID8gbWlnaHQgYmUgMS4wMTAyeCBzbG93ZXIKICAgcG9seW1vcnBoaWMtYXJy
YXktY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS40MjY1Ky0wLjQ4NDAgICAgICAg
ICAgICAxLjIzNjgrLTAuMTgzNSAgICAgICAgICBtaWdodCBiZSAxLjE1MzR4IGZhc3RlcgogICBw
b2x5bW9ycGhpYy1nZXQtYnktaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjE5MzIr
LTAuMzQ3MiAgICAgICAgICAgIDIuMTUzMCstMC4wNzYzICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4
N3ggZmFzdGVyCiAgIHBvbHltb3JwaGljLXB1dC1ieS1pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjUuMjMwMystMS44OTAwICAgICA/ICAgICAyNS45Mjc4Ky0yLjQ4NzEgICAgICAgID8g
bWlnaHQgYmUgMS4wMjc2eCBzbG93ZXIKICAgcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0
cmluZyAgICAgICAgICAgICAgICAyOC40NDQzKy05LjY5MTkgICAgICAgICAgIDI3LjA4MzArLTMu
MTg3OCAgICAgICAgICBtaWdodCBiZSAxLjA1MDN4IGZhc3RlcgogICBwb2x5bW9ycGhpYy1wdXQt
YnktdmFsLXdpdGgtc3ltYm9sICAgICAgICAgICAgICAgIDI2LjA4OTcrLTEuNDUyNSAgICAgICAg
ICAgMjYuMDQ1NSstMC44MDk5ICAgICAgICAKICAgcG9seW1vcnBoaWMtc3RydWN0dXJlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxMy4zMzIwKy0wLjA5NTYgICAgID8gICAgIDEzLjM2ODQr
LTAuOTM4NSAgICAgICAgPwogICBwb2x5dmFyaWFudC1tb25vbW9ycGhpYy1nZXQtYnktaWQgICAg
ICAgICAgICAgICAgICAzLjU1NzMrLTAuMjA5NiAgICAgICAgICAgIDMuNDM1NSstMC4xMTM5ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDM1NHggZmFzdGVyCiAgIHByZXZlbnQtZXh0ZW5zaW9ucy1hbmQt
ZG8td29yayAgICAgICAgICAgICAgICAgICAgMTMuODgwOSstMS4xNzE4ICAgICA/ICAgICAxNC4z
MTA3Ky0wLjY5ODAgICAgICAgID8gbWlnaHQgYmUgMS4wMzEweCBzbG93ZXIKICAgcHJvdG8tZ2V0
dGVyLWFjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS40Nzk0Ky0wLjQxMDMg
ICAgID8gICAgIDEyLjA1OTIrLTEuNTY2OSAgICAgICAgPyBtaWdodCBiZSAxLjA1MDV4IHNsb3dl
cgogICBwcm90b3R5cGUtYWNjZXNzLXdpdGgtbXV0YXRpbmctcHJvdG90eXBlICAgICAgICAgICA0
LjYxNzIrLTAuMzMzOSAgICAgPyAgICAgIDQuODc1NSstMC4zOTMxICAgICAgICA/IG1pZ2h0IGJl
IDEuMDU1OXggc2xvd2VyCiAgIHB1dC1ieS1pZC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uICAgICAg
ICAgICAgICAgICAgIDYuMTQ3NystMC4yODcwICAgICAgICAgICAgNi4wMTQ0Ky0wLjY0ODYgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjIyeCBmYXN0ZXIKICAgcHV0LWJ5LWlkLXNsaWdodGx5LXBvbHlt
b3JwaGljICAgICAgICAgICAgICAgICAgICAgMi40MzgxKy0wLjAxODggICAgID8gICAgICAyLjU0
MjIrLTAuMzA4NCAgICAgICAgPyBtaWdodCBiZSAxLjA0Mjd4IHNsb3dlcgogICBwdXQtYnktaWQt
dHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlciAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjg4MDYrLTAuNjE3MSAgICAgICAgICAg
MTMuNjQwNSstMC41NTcyICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3NnggZmFzdGVyCiAgIHB1dC1i
eS1pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNzQ1NCstMC40
NTQxICAgICA/ICAgICAxMC4yOTY2Ky0wLjQyMzkgICAgICAgID8gbWlnaHQgYmUgMS4wNTY2eCBz
bG93ZXIKICAgcHV0LWJ5LXZhbC1kaXJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMC4zNDMzKy0wLjAxMjMgICAgID8gICAgICAwLjM1OTcrLTAuMDMwNSAgICAgICAgPyBtaWdo
dCBiZSAxLjA0ODB4IHNsb3dlcgogICBwdXQtYnktdmFsLWxhcmdlLWluZGV4LWJsYW5rLWluZGV4
aW5nLXR5cGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNS43MTEwKy0wLjE4OTMgICAgID8gICAgICA2LjAxMzQrLTAuODAxNiAgICAgICAg
PyBtaWdodCBiZSAxLjA1Mjl4IHNsb3dlcgogICBwdXQtYnktdmFsLW1hY2hpbmUtaW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjYzNjcrLTAuMjQ1MSAgICAgPyAgICAgIDIuNzA3Myst
MC4yODQ2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI2OHggc2xvd2VyCiAgIHB1dC1ieS12YWwtd2l0
aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbiAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjczOTYrLTAuOTQ3MyAgICAgPyAgICAg
MTAuMjI1NSstMS4xNzYwICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ5OXggc2xvd2VyCiAgIHB1dC1i
eS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43MzU1Ky0wLjE0MTIgICAg
ID8gICAgICAyLjc4NTIrLTAuMDkzOCAgICAgICAgPyBtaWdodCBiZSAxLjAxODJ4IHNsb3dlcgog
ICBwdXQtYnktdmFsLXdpdGgtc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjE2
MzUrLTAuMzEyOCAgICAgICAgICAgMTAuMTU1MystMC44NDEwICAgICAgICAKICAgcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNTg0NSstMC4yMzM1ICAgICAg
ICAgICAgOS41MzI1Ky0wLjU3MjcgICAgICAgIAogICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNs
aWdodGx5LXBvbHltb3JwaGljICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIuODE0OSstMC4xMjMwICAgICA/ICAgICAgMi44MTcwKy0wLjEw
ODMgICAgICAgID8KICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxMC41MzQ0Ky0xLjYxMjggICAgID8gICAgIDEwLjYwNDIrLTEuNTA5MCAgICAgICAg
PwogICByYXJlLW9zci1leGl0LW9uLWxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEx
LjMzNTMrLTMuMzQxMSAgICAgICAgICAgMTEuMzE5MCstMy4zMzY3ICAgICAgICAKICAgcmF5dHJh
Y2Utd2l0aC1lbXB0eS10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAgICAgNS4wMzIwKy0wLjM1
OTggICAgID8gICAgICA1LjA4MTIrLTAuMTA3NSAgICAgICAgPwogICByYXl0cmFjZS13aXRoLXRy
eS1jYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjYwNTYrLTAuODQ4MSAgICAgPyAg
ICAgIDguNzYyMistMC44ODQ0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE4Mnggc2xvd2VyCiAgIHJl
Z2V4cC1leGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYuNDg3MSst
MS43NTM4ICAgICAgICAgICAzNi4zMzUyKy0xLjE5MjkgICAgICAgIAogICByZWdleHAtbGFzdC1p
bmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjMwMDUrLTAuMjExMSAgICAg
PyAgICAgIDkuMzcwMSstMC43Mjk2ICAgICAgICA/CiAgIHJlZ2V4cC1wcm90b3R5cGUtaXMtbm90
LWluc3RhbmNlICAgICAgICAgICAgICAgICAgIDAuNDc0NCstMC4wNTM5ICAgICA/ICAgICAgMC41
MjUzKy0wLjEzNjMgICAgICAgID8gbWlnaHQgYmUgMS4xMDcyeCBzbG93ZXIKICAgcmVnZXhwLXBy
b3RvdHlwZS1zZWFyY2gtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC44Njc0Ky0wLjIzODggICAg
ICAgICAgICAwLjc4NDcrLTAuMDc0MSAgICAgICAgICBtaWdodCBiZSAxLjEwNTR4IGZhc3Rlcgog
ICByZWdleHAtcHJvdG90eXBlLXNlYXJjaC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czIgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zNzMw
Ky0wLjA1OTQgICAgID8gICAgICAwLjQwOTQrLTAuMDk4MiAgICAgICAgPyBtaWdodCBiZSAxLjA5
Nzd4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZl
Y3RzICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEuMDc1MSstMC4xMDU2ICAgICAgICAgICAgMS4wNTYzKy0wLjA5NzggICAgICAgICAgbWln
aHQgYmUgMS4wMTc3eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxl
LXNpZGUtZWZmZWN0czIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4zNDEyKy0wLjAxNjMgICAgID8gICAgICAwLjM4MjgrLTAuMDg2NiAg
ICAgICAgPyBtaWdodCBiZSAxLjEyMTh4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0
LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1mbGFncyAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM5MTcrLTAuMDUzNCAgICAgICAgICAg
IDAuMzg0OCstMC4wNzc2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3OXggZmFzdGVyCiAgIHJlZ2V4
cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLWdsb2JhbCAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjU1MDQr
LTAuNTAwNyAgICAgICAgICAgIDAuNDQxNystMC4xNjk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMjQ2
MHggZmFzdGVyCiAgIHJlZ2V4cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVj
dHMzLWlnbm9yZUNhc2UgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4zOTQxKy0wLjA2OTkgICAgICAgICAgICAwLjM2OTMrLTAuMDI4NiAg
ICAgICAgICBtaWdodCBiZSAxLjA2NzN4IGZhc3RlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0
LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1tdWx0aWxpbmUgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC40MDA2Ky0wLjExMzMgICAgICAg
ICAgICAwLjM4MTcrLTAuMDUzMSAgICAgICAgICBtaWdodCBiZSAxLjA0OTZ4IGZhc3RlcgogICBy
ZWdleHAtcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1zdGlja3kgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC40
MDg5Ky0wLjE0NDkgICAgICAgICAgICAwLjM1MDkrLTAuMDIwNiAgICAgICAgICBtaWdodCBiZSAx
LjE2NTJ4IGZhc3RlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1l
ZmZlY3RzMy11bmljb2RlICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMzUxMSstMC4wMTc3ICAgICA/ICAgICAgMC40MTAzKy0wLjA0Mzkg
ICAgICAgID8gbWlnaHQgYmUgMS4xNjg4eCBzbG93ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zcGxp
dC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zODMwKy0wLjA5MzMgICAgICAgICAgICAwLjM2
MzErLTAuMDE3NyAgICAgICAgICBtaWdodCBiZSAxLjA1NDh4IGZhc3RlcgogICByZWdleHAtcHJv
dG90eXBlLXRlc3Qtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41ODU5Ky0wLjA2OTMgICAgID8g
ICAgICAwLjU5OTgrLTAuMDU2MCAgICAgICAgPyBtaWdodCBiZSAxLjAyMzZ4IHNsb3dlcgogICBy
ZWdleHAtcHJvdG90eXBlLXRlc3Qtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMyICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzkyNystMC4y
MDYwICAgICAgICAgICAgMC4zMzEwKy0wLjAxNjkgICAgICAgICAgbWlnaHQgYmUgMS4xODY0eCBm
YXN0ZXIKICAgcmVnZXhwLXNldC1sYXN0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOS44NDI4Ky0wLjU0MTcgICAgID8gICAgIDEwLjIyMjQrLTAuOTYzMSAgICAgICAgPyBtaWdo
dCBiZSAxLjAzODZ4IHNsb3dlcgogICByZWdpc3Rlci1wcmVzc3VyZS1mcm9tLW9zciAgICAgICAg
ICAgICAgICAgICAgICAgIDE2LjI3NzUrLTAuNzM0MyAgICAgPyAgICAgMTYuMzk5OSstMS4xNTk5
ICAgICAgICA/CiAgIHJlcGVhdC1tdWx0aS1nZXQtYnktb2Zmc2V0ICAgICAgICAgICAgICAgICAg
ICAgICAgMjEuMzUzOCstNC44MzgwICAgICAgICAgICAxOS40NTg3Ky0yLjc2OTkgICAgICAgICAg
bWlnaHQgYmUgMS4wOTc0eCBmYXN0ZXIKICAgcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGlt
aW5hdGlvbiAgICAgICAgICAgIDE5NC43NTgxKy04Ljg5MTYgICAgID8gICAgMTk1LjA3NzUrLTAu
OTIxNCAgICAgICAgPwogICByZXN0LXBhcmFtZXRlci1jb25zdHJ1Y3Rpb24tcGVyZm9ybWFuY2Ug
ICAgICAgICAgIDE5LjU4MTIrLTAuMzM0MiAgICAgPyAgICAgMjAuNTQ0MCstMi4yMzU0ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDQ5Mnggc2xvd2VyCiAgIHJpY2hhcmRzLWVtcHR5LXRyeS1jYXRjaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTEuMzYyMistMC43Mjg5ICAgICA/ICAgICA1Mi44NjYy
Ky0zLjMxNDIgICAgICAgID8gbWlnaHQgYmUgMS4wMjkzeCBzbG93ZXIKICAgcmljaGFyZHMtdHJ5
LWNhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNS4yMDc2Ky02LjE1NDkgICAg
ICAgICAgMjE0Ljg4OTUrLTMuNzAxMyAgICAgICAgCiAgIHNjb3BlZC1hcmd1bWVudHMtbGVuZ3Ro
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMDU0MystMy41NTA2ICAgICAgICAgICAgNy4w
MjEyKy0wLjY4NDIgICAgICAgICAgbWlnaHQgYmUgMS4xNDcxeCBmYXN0ZXIKICAgc2NvcGVkLWFy
Z3VtZW50cy1vdmVycmlkZGVuLWxlbmd0aCAgICAgICAgICAgICAgICAgNi42NDU1Ky0wLjgyMDMg
ICAgID8gICAgICA2LjgyNDArLTEuNjA0MyAgICAgICAgPyBtaWdodCBiZSAxLjAyNjl4IHNsb3dl
cgogICBzY29wZWQtYXJndW1lbnRzLXBvc3NpYmx5LW92ZXJyaWRkZW4tbGVuZ3RoICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMTMzNSst
MC4xMTIxICAgICA/ICAgICAgNy4yNDYzKy0wLjQzMTAgICAgICAgID8gbWlnaHQgYmUgMS4wMTU4
eCBzbG93ZXIKICAgc2VhbC1hbmQtZG8td29yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxMy40NDcwKy0wLjU0NjUgICAgID8gICAgIDEzLjY5NDkrLTAuMTc4OSAgICAgICAgPyBt
aWdodCBiZSAxLjAxODR4IHNsb3dlcgogICBzZXQtZm9yLWVhY2ggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzLjc5ODUrLTAuMTExMSAgICAgPyAgICAgIDMuOTMyOCstMC4x
Mjg0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDM1NHggc2xvd2VyCiAgIHNldC1mb3Itb2YgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguNjgxNCstMS4yNTkxICAgICA/ICAg
ICAgOS4xNjMzKy0yLjIxMzkgICAgICAgID8gbWlnaHQgYmUgMS4wNTU1eCBzbG93ZXIKICAgc2V0
dGVyLXByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC44NjIzKy0w
LjExMzAgICAgID8gICAgICA1LjAwMzYrLTAuNjk2NCAgICAgICAgPyBtaWdodCBiZSAxLjAyOTF4
IHNsb3dlcgogICBzZXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzLjExODMrLTAuMDczMiAgICAgPyAgICAgIDMuMTc1NCstMC4xMjY1ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDE4M3ggc2xvd2VyCiAgIHNpbXBsZS1hY3RpdmF0aW9uLWRlbW8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjQuNTI4OSstMi45NDQ2ICAgICAgICAgICAyMy41MTQwKy0yLjYz
OTIgICAgICAgICAgbWlnaHQgYmUgMS4wNDMyeCBmYXN0ZXIKICAgc2ltcGxlLWdldHRlci1hY2Nl
c3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOC42MDAwKy0wLjg5NTAgICAgICAgICAg
IDE3Ljg4MDcrLTEuMjc3MiAgICAgICAgICBtaWdodCBiZSAxLjA0MDJ4IGZhc3RlcgogICBzaW1w
bGUtcG9seS1jYWxsLW5lc3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjIzODgrLTAu
NzM2NCAgICAgICAgICAgIDMuODgyOCstMC4yNzU3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDkxN3gg
ZmFzdGVyCiAgIHNpbXBsZS1wb2x5LWNhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEuNDIwNSstMC4yMTk1ICAgICAgICAgICAgMS4zMTA3Ky0wLjIzMDMgICAgICAgICAgbWln
aHQgYmUgMS4wODM3eCBmYXN0ZXIKICAgc2ltcGxlLXJlZ2V4cC1leGVjLWZvbGRpbmctZmFpbCAg
ICAgICAgICAgICAgICAgICAgMy4yMjgwKy0wLjM5NDQgICAgID8gICAgICAzLjMwOTgrLTAuMDY4
OSAgICAgICAgPyBtaWdodCBiZSAxLjAyNTN4IHNsb3dlcgogICBzaW1wbGUtcmVnZXhwLWV4ZWMt
Zm9sZGluZyAgICAgICAgICAgICAgICAgICAgICAgIDE5LjIwMTYrLTEuNjk0NiAgICAgICAgICAg
MTkuMTc0MCstMS4zMjkwICAgICAgICAKICAgc2ltcGxlLXJlZ2V4cC10ZXN0LWZvbGRpbmctZmFp
bC13aXRoLWhvaXN0ZWQtcmVnZXhwICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDkuMjY0NCstMC42Njg2ICAgICAgICAgICAgOC41MDQ1Ky0x
Ljc3NzEgICAgICAgICAgbWlnaHQgYmUgMS4wODk0eCBmYXN0ZXIKICAgc2ltcGxlLXJlZ2V4cC10
ZXN0LWZvbGRpbmctZmFpbCAgICAgICAgICAgICAgICAgICAxNi43Mjk3Ky0wLjMzMDEgICAgID8g
ICAgIDE3LjU1NjUrLTEuOTgyMiAgICAgICAgPyBtaWdodCBiZSAxLjA0OTR4IHNsb3dlcgogICBz
aW1wbGUtcmVnZXhwLXRlc3QtZm9sZGluZy13aXRoLWhvaXN0ZWQtcmVnZXhwICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuMTMyOCstMC4x
MDgyICAgICA/ICAgICAxMC4xOTUyKy0wLjYwNDMgICAgICAgID8KICAgc2ltcGxlLXJlZ2V4cC10
ZXN0LWZvbGRpbmcgICAgICAgICAgICAgICAgICAgICAgICAxOC4xNDk0Ky0xLjc3NzQgICAgICAg
ICAgIDE3LjgxNTErLTEuNzM3OSAgICAgICAgICBtaWdodCBiZSAxLjAxODh4IGZhc3RlcgogICBz
aW4tYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjgyMzMr
LTAuNjY0NCAgICAgPyAgICAgIDYuODQwNystMC44NzA2ICAgICAgICA/CiAgIHNpbmdsZXRvbi1z
Y29wZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTguMjU3OSstMC42MjY4ICAg
ICAgICAgICA1My42NTQyKy00LjIyNjkgICAgICAgICAgbWlnaHQgYmUgMS4wODU4eCBmYXN0ZXIK
ICAgc2luay1mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4z
MjkzKy0wLjkyMjggICAgID8gICAgICA1LjU5MDMrLTEuMTc1MCAgICAgICAgPyBtaWdodCBiZSAx
LjA0OTB4IHNsb3dlcgogICBzaW5rLWh1Z2UtYWN0aXZhdGlvbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEyLjgxODArLTAuOTE3NiAgICAgICAgICAgMTIuNDU4NystMC42MTg5ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDI4OHggZmFzdGVyCiAgIHNpbmthYmxlLW5ldy1vYmplY3QtZGFnICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzcuMjM4MistMC43NzAzICAgICAhICAgICAzOC45OTY5
Ky0wLjg5MjggICAgICAgICEgZGVmaW5pdGVseSAxLjA0NzJ4IHNsb3dlcgogICBzaW5rYWJsZS1u
ZXctb2JqZWN0LXRha2VuICAgICAgICAgICAgICAgICAgICAgICAgIDMyLjY2NTgrLTEuODYxMyAg
ICAgPyAgICAgMzMuMzIxNystMS44NDE1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwMXggc2xvd2Vy
CiAgIHNpbmthYmxlLW5ldy1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgu
NzAxNSstMy4wNzM0ICAgICAgICAgICAxOC41MzQwKy0xLjIxMTYgICAgICAgIAogICBzbG93LWFy
cmF5LXByb2ZpbGUtY29udmVyZ2VuY2UgICAgICAgICAgICAgICAgICAgICAyLjkyNzIrLTEuMjI0
NCAgICAgICAgICAgIDIuNTY5MCstMC4yODEyICAgICAgICAgIG1pZ2h0IGJlIDEuMTM5NHggZmFz
dGVyCiAgIHNsb3ctY29udmVyZ2VuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIuNTkxNistMC4xODc4ICAgICA/ICAgICAgMi42NzM4Ky0wLjA2NjIgICAgICAgID8gbWlnaHQg
YmUgMS4wMzE3eCBzbG93ZXIKICAgc2xvdy10ZXJuYXJpZXMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxNC4xMDIzKy0wLjg1OTEgICAgICAgICAgIDEzLjMyMDMrLTAuMjAwMCAg
ICAgICAgICBtaWdodCBiZSAxLjA1ODd4IGZhc3RlcgogICBzb3J0aW5nLWJlbmNobWFyayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjY1OTgrLTEuNjI3NCAgICAgICAgICAgMTgu
NDY3OSstMS4zNjk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDY0NXggZmFzdGVyCiAgIHNwYXJzZS1j
b25kaXRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMjMzOCstMC4xNTgx
ICAgICAgICAgICAgMS4xNzUyKy0wLjA3NTEgICAgICAgICAgbWlnaHQgYmUgMS4wNDk5eCBmYXN0
ZXIKICAgc3BhcnNlLXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1
NC45OTk1Ky0zLjE4NzYgICAgICAgICAgIDU0LjA3MjUrLTIuODI3MSAgICAgICAgICBtaWdodCBi
ZSAxLjAxNzF4IGZhc3RlcgogICBzcGxpY2UtdG8tcmVtb3ZlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDE1LjkzNDcrLTEuMDU0MyAgICAgPyAgICAgMTYuNzA0MystMS45MzQ3ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDQ4M3ggc2xvd2VyCiAgIHNwcmVhZC1sYXJnZS1hcnJheSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAuMzc5OSstMS4zMjk4ICAgICAgICAgICA5OS45
NzE4Ky0zLjQ4NzggICAgICAgIAogICBzcHJlYWQtc21hbGwtYXJyYXkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjc4LjM2MTUrLTQuMjY0NSAgICAgPyAgICAyNzguNDU2NCstNi4xODI1
ICAgICAgICA/CiAgIHN0cmNhdC1jb25zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDUuODYwOSstMC4xMjE0ICAgICA/ICAgICAgNi4xNjUzKy0wLjQ2NzUgICAgICAgID8g
bWlnaHQgYmUgMS4wNTE5eCBzbG93ZXIKICAgc3RyY2F0LWxlbmd0aC1jb25zdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNi41NzI2Ky0xLjAxMjggICAgICAgICAgICA2LjUyNjcrLTAu
NjUxNyAgICAgICAgCiAgIHN0cmljdC1vc3ItZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDkuMzk1MCstMC44NDA1ICAgICA/ICAgICAgOS42OTg2Ky0xLjA2OTAgICAgICAg
ID8gbWlnaHQgYmUgMS4wMzIzeCBzbG93ZXIKICAgc3RyaW5nLWFkZC1jb25zdGFudC1mb2xkaW5n
ICAgICAgICAgICAgICAgICAgICAgIDE3MS4xNjYyKy00LjcxODcgICAgICAgICAgMTcwLjkwMjgr
LTIuMzIxNSAgICAgICAgCiAgIHN0cmluZy1jaGFyLWNvZGUtYXQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTUuMDc0MSstMC4zNzc0ICAgICAgICAgICAxNC45NDY2Ky0wLjc2MTkgICAg
ICAgIAogICBzdHJpbmctY29uY2F0LW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLjkyNTArLTAuMTc0NyAgICAgICAgICAgIDEuOTA4MystMC4yMTM2ICAgICAgICAKICAgc3Ry
aW5nLWNvbmNhdC1wYWlyLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgMi4yODMxKy0w
Ljk1NzAgICAgICAgICAgICAxLjg2NjkrLTAuMDg5NiAgICAgICAgICBtaWdodCBiZSAxLjIyMjl4
IGZhc3RlcgogICBzdHJpbmctY29uY2F0LXBhaXItc2ltcGxlICAgICAgICAgICAgICAgICAgICAg
ICAgICAzLjIyMjArLTAuMTk4MiAgICAgICAgICAgIDIuOTg5OCstMC4xOTg2ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDc3N3ggZmFzdGVyCiAgIHN0cmluZy1jb25jYXQtc2ltcGxlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDguNzE2OCstMC4yMDgzICAgICA/ICAgICAgOC44ODYyKy0wLjM2
NjkgICAgICAgID8gbWlnaHQgYmUgMS4wMTk0eCBzbG93ZXIKICAgc3RyaW5nLWNvbnMtcmVwZWF0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4zMDgwKy0wLjMyMDYgICAgICAgICAg
ICA2LjIyMzArLTAuMTU3NyAgICAgICAgICBtaWdodCBiZSAxLjAxMzd4IGZhc3RlcgogICBzdHJp
bmctY29ucy10b3dlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjgyNjQrLTAu
NDE5NCAgICAgPyAgICAgIDUuMjk2NCstMC45MjAzICAgICAgICA/IG1pZ2h0IGJlIDEuMDk3NHgg
c2xvd2VyCiAgIHN0cmluZy1lcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjEuMjQ0OSstNy43MTg1ICAgICAgICAgICAxOC45ODcwKy0xLjc1OTYgICAgICAgICAgbWln
aHQgYmUgMS4xMTg5eCBmYXN0ZXIKICAgc3RyaW5nLWZyb20tY2hhci1jb2RlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNi43MDgyKy0wLjk2OTIgICAgICAgICAgICA2LjE1MzYrLTAuMTkx
OCAgICAgICAgICBtaWdodCBiZSAxLjA5MDF4IGZhc3RlcgogICBzdHJpbmctZ2V0LWJ5LXZhbC1i
aWctY2hhciAgICAgICAgICAgICAgICAgICAgICAgICA0LjQ3NDErLTAuMDI3NCAgICAgPyAgICAg
IDQuNDkyMistMC4xMTE2ICAgICAgICA/CiAgIHN0cmluZy1nZXQtYnktdmFsLW91dC1vZi1ib3Vu
ZHMtaW5zYW5lICAgICAgICAgICAgIDMuODc1MCstMC4yODA3ICAgICA/ICAgICAgNC4yODM1Ky0w
LjY4MjUgICAgICAgID8gbWlnaHQgYmUgMS4xMDU0eCBzbG93ZXIKICAgc3RyaW5nLWdldC1ieS12
YWwtb3V0LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAgNC4yNzcyKy0wLjExMzUgICAgICAg
ICAgICA0LjA3ODArLTAuMjM0MyAgICAgICAgICBtaWdodCBiZSAxLjA0ODl4IGZhc3RlcgogICBz
dHJpbmctZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjEzMTkr
LTAuNDAzNSAgICAgICAgICAgIDEuOTY5MSstMC4xMDQ3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDgy
N3ggZmFzdGVyCiAgIHN0cmluZy1oYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIuMTMzMSstMC4zNjA0ICAgICAgICAgICAgMi4wNjQ2Ky0wLjE3MDEgICAgICAgICAg
bWlnaHQgYmUgMS4wMzMxeCBmYXN0ZXIKICAgc3RyaW5nLWxvbmctaWRlbnQtZXF1YWxpdHkgICAg
ICAgICAgICAgICAgICAgICAgICAxNS44MzkyKy0xLjA1MjIgICAgICAgICAgIDE1Ljc5NzYrLTAu
OTM5NCAgICAgICAgCiAgIHN0cmluZy1vdXQtb2YtYm91bmRzICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTAuNTIzMystMC44OTE1ICAgICAgICAgICAxMC40OTQxKy0wLjc3ODIgICAgICAg
IAogICBzdHJpbmctcHJvdG90eXBlLXNlYXJjaC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0cyAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjg0
MzErLTAuMDczNSAgICAgPyAgICAgIDAuODYzNSstMC4wNTExICAgICAgICA/IG1pZ2h0IGJlIDEu
MDI0Mnggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1l
ZmZlY3RzMiAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjUwMTUrLTAuMTI4MiAgICAgICAgICAgIDAuNDAxMistMC4wNDI1ICAgICAgICAg
IG1pZ2h0IGJlIDEuMjUwMXggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2Vy
dmFibGUtc2lkZS1lZmZlY3RzMyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLjM5NjIrLTAuMDUzNyAgICAgICAgICAgIDAuMzc3MystMC4w
MTQxICAgICAgICAgIG1pZ2h0IGJlIDEuMDUwMnggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUt
c2VhcmNoLW9ic2VydmFibGUtc2lkZS1lZmZlY3RzNCAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUwNDkrLTAuMTMyMiAgICAgICAgICAg
IDAuNDE4MistMC4wODc2ICAgICAgICAgIG1pZ2h0IGJlIDEuMjA3NHggZmFzdGVyCiAgIHN0cmlu
Zy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS40NjM0Ky0wLjczMjEg
ICAgID8gICAgICAxLjU4NjkrLTEuMTczMyAgICAgICAgPyBtaWdodCBiZSAxLjA4NDR4IHNsb3dl
cgogICBzdHJpbmctcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQy
NjUrLTAuMDcwOSAgICAgPyAgICAgIDAuNDU3NCstMC4wNjA3ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDcyNnggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVm
ZmVjdHMzLWZsYWdzICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNDAyNSstMC4wMTk1ICAgICA/ICAgICAgMC40NDU4Ky0wLjA2OTUgICAg
ICAgID8gbWlnaHQgYmUgMS4xMDc3eCBzbG93ZXIKICAgc3RyaW5nLXByb3RvdHlwZS1zcGxpdC1v
YnNlcnZhYmxlLXNpZGUtZWZmZWN0czMtZ2xvYmFsICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTQ5NistMC4zNDg4ICAgICAgICAgICAg
MC40NDM1Ky0wLjA5MjIgICAgICAgICAgbWlnaHQgYmUgMS4yMzkweCBmYXN0ZXIKICAgc3RyaW5n
LXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czMtaWdub3JlQ2FzZSAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQw
ODArLTAuMDI4NCAgICAgICAgICAgIDAuNDAzNystMC4wMDQwICAgICAgICAgIG1pZ2h0IGJlIDEu
MDEwNHggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVm
ZmVjdHMzLW11bHRpbGluZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLjQzMDQrLTAuMDQzMiAgICAgPyAgICAgIDAuNDQ4NSstMC4xMTE2
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQyMXggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc3Bs
aXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLXN0aWNreSAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQxNjErLTAuMDQ5MCAgICAgPyAg
ICAgIDAuNDQ2NystMC4wNjUzICAgICAgICA/IG1pZ2h0IGJlIDEuMDczNnggc2xvd2VyCiAgIHN0
cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLXVuaWNvZGUgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC40
NjAzKy0wLjA0MjAgICAgID8gICAgICAwLjQ2ODcrLTAuMTQwMiAgICAgICAgPyBtaWdodCBiZSAx
LjAxODN4IHNsb3dlcgogICBzdHJpbmctcHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1l
ZmZlY3RzNCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjQ1MzYrLTAuMDQ2MyAgICAgICAgICAgIDAuNDQ1MistMC4wNTE2ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDE4OXggZmFzdGVyCiAgIHN0cmluZy1yZXBlYXQtYXJpdGggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjIuMTQ4OSstMS4yODg0ICAgICA/ICAgICAyMi4yMTg1Ky0y
LjUxMzkgICAgICAgID8KICAgc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5nLWZpeGVkICAgICAg
ICAgICAgICAgICAgMy41NDgzKy0xLjM0MTMgICAgICAgICAgICAyLjgxOTIrLTAuMDc4MyAgICAg
ICAgICBtaWdodCBiZSAxLjI1ODZ4IGZhc3RlcgogICBzdHJpbmctcmVwZWF0LW5vdC1yZXNvbHZp
bmctbm8taW5saW5lICAgICAgICAgICAgICAzLjQyOTArLTAuMTY0MiAgICAgPyAgICAgIDMuNTE5
NSstMC4xNzA1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI2NHggc2xvd2VyCiAgIHN0cmluZy1yZXBl
YXQtbm90LXJlc29sdmluZyAgICAgICAgICAgICAgICAgICAgICAgIDMuNTkwOSstMC4xNjI4ICAg
ICA/ICAgICAgMy42ODQ5Ky0wLjM2NDQgICAgICAgID8gbWlnaHQgYmUgMS4wMjYyeCBzbG93ZXIK
ICAgc3RyaW5nLXJlcGVhdC1yZXNvbHZpbmctZml4ZWQgICAgICAgICAgICAgICAgICAgICAyNC40
MzY3Ky0xLjgzMjMgICAgICAgICAgIDI0LjExNDQrLTEuNjEzNyAgICAgICAgICBtaWdodCBiZSAx
LjAxMzR4IGZhc3RlcgogICBzdHJpbmctcmVwZWF0LXJlc29sdmluZy1uby1pbmxpbmUgICAgICAg
ICAgICAgICAgIDMxLjM1MTcrLTAuOTgwNCAgICAgICAgICAgMzAuOTc1NCstMC40NDI2ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDEyMXggZmFzdGVyCiAgIHN0cmluZy1yZXBlYXQtcmVzb2x2aW5nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzEuNDc1NCstMC43NDg1ICAgICA/ICAgICAzMi4wNjkw
Ky0zLjA1OTYgICAgICAgID8gbWlnaHQgYmUgMS4wMTg5eCBzbG93ZXIKICAgc3RyaW5nLXJlcGVh
dC1zaW5nbGUtbm90LXJlc29sdmluZyAgICAgICAgICAgICAgICAgNy40NjA1Ky0xLjQ1NjUgICAg
ICAgICAgICA2LjgxOTUrLTEuMjA0OSAgICAgICAgICBtaWdodCBiZSAxLjA5NDB4IGZhc3Rlcgog
ICBzdHJpbmctcmVwZWF0LXNpbmdsZS1yZXNvbHZpbmcgICAgICAgICAgICAgICAgICAgICA3LjI1
NDgrLTEuMjM5MyAgICAgICAgICAgIDcuMTIwNSstMC43NjM5ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDE4OXggZmFzdGVyCiAgIHN0cmluZy1yZXBlYXQtc21hbGwtbm90LXJlc29sdmluZyAgICAgICAg
ICAgICAgICAgIDIuODAwOCstMC4yNTI2ICAgICA/ICAgICAgMy4xNDA3Ky0wLjI0NjMgICAgICAg
ID8gbWlnaHQgYmUgMS4xMjE0eCBzbG93ZXIKICAgc3RyaW5nLXJlcGVhdC1zbWFsbC1yZXNvbHZp
bmcgICAgICAgICAgICAgICAgICAgICAzMS41NTgwKy0xLjE2NzAgICAgID8gICAgIDMyLjI3NTUr
LTIuMjE4MyAgICAgICAgPyBtaWdodCBiZSAxLjAyMjd4IHNsb3dlcgogICBzdHJpbmctcmVwbGFj
ZS1lbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjU4NjUrLTAuNDA0NCAgICAg
ICAgICAgIDkuNDc1NistMC42NjY2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDExN3ggZmFzdGVyCiAg
IHN0cmluZy1yZXBsYWNlLWdlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDguNjYw
MCstMC4yODEzICAgICA/ICAgICA0OS4zMTE3Ky0zLjc5NzAgICAgICAgID8gbWlnaHQgYmUgMS4w
MTM0eCBzbG93ZXIKICAgc3RyaW5nLXJlcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOS45MjcwKy0xLjAzODAgICAgICAgICAgICA5LjU0NzYrLTAuOTQzNSAgICAgICAg
ICBtaWdodCBiZSAxLjAzOTd4IGZhc3RlcgogICBzdHJpbmctcm9wZS13aXRoLW9iamVjdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE4LjQ4NTQrLTIuMzYzMSAgICAgICAgICAgMTguMzQ5OSst
My4wMjE0ICAgICAgICAKICAgc3RyaW5nLXN1YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzNS43ODg2Ky0wLjMzMjAgICAgICAgICAgIDM0Ljk0MzgrLTAuODYwOCAgICAg
ICAgICBtaWdodCBiZSAxLjAyNDJ4IGZhc3RlcgogICBzdHJpbmctdGVzdCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyLjgzMzQrLTAuMDQwMSAgICAgPyAgICAgIDIuOTUx
NystMC4zMzkwICAgICAgICA/IG1pZ2h0IGJlIDEuMDQxN3ggc2xvd2VyCiAgIHN0cmluZy10cmFu
c2NvZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcuMzI5NCstMS4zOTgzICAg
ICAgICAgICAxNy4wOTUzKy0xLjAwMDcgICAgICAgICAgbWlnaHQgYmUgMS4wMTM3eCBmYXN0ZXIK
ICAgc3RyaW5nLXZhci1lcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOC4y
MTEzKy0yLjc4NTggICAgICAgICAgIDI3LjIyMjIrLTEuNjY5MCAgICAgICAgICBtaWdodCBiZSAx
LjAzNjN4IGZhc3RlcgogICBzdHJ1Y3R1cmUtaG9pc3Qtb3Zlci10cmFuc2l0aW9ucyAgICAgICAg
ICAgICAgICAgICAyLjM1MTArLTAuMjEwMiAgICAgPyAgICAgIDIuNDk0NistMC41MjgxICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDYxMXggc2xvd2VyCiAgIHN1YnN0cmluZy1jb25jYXQtd2VpcmQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzYuNTIyNSstMS4wMDg3ICAgICA/ICAgICAzNy43OTk0
Ky00LjM2MjcgICAgICAgID8gbWlnaHQgYmUgMS4wMzUweCBzbG93ZXIKICAgc3Vic3RyaW5nLWNv
bmNhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MC43NDEzKy0xLjQxODggICAg
ID8gICAgIDQxLjI3MDArLTEuOTg2OCAgICAgICAgPyBtaWdodCBiZSAxLjAxMzB4IHNsb3dlcgog
ICBzdWJzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1LjYw
ODUrLTAuMzMyMiAgICAgPyAgICAgNDYuMjgxMystMi42MzU2ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDE0OHggc2xvd2VyCiAgIHN1cGVyLWdldC1ieS1pZC13aXRoLXRoaXMtbW9ub21vcnBoaWMgICAg
ICAgICAgICAgMjUuNjAwMystMC42ODI3ICAgICAgICAgICAyNS4yNjQzKy0wLjcxMDUgICAgICAg
ICAgbWlnaHQgYmUgMS4wMTMzeCBmYXN0ZXIKICAgc3VwZXItZ2V0LWJ5LWlkLXdpdGgtdGhpcy1w
b2x5bW9ycGhpYyAgICAgICAgICAgICAyMy44NTMyKy0wLjYyNzIgICAgICAgICAgIDIzLjc4MjIr
LTAuODM4OCAgICAgICAgCiAgIHN1cGVyLWdldC1ieS12YWwtd2l0aC10aGlzLW1vbm9tb3JwaGlj
ICAgICAgICAgICAgMjUuODEyMystMC41MTMwICAgICA/ICAgICAyNS44MjA3Ky0wLjQ1MzAgICAg
ICAgID8KICAgc3VwZXItZ2V0LWJ5LXZhbC13aXRoLXRoaXMtcG9seW1vcnBoaWMgICAgICAgICAg
ICAyNC4zMTgxKy0xLjcyNDIgICAgICAgICAgIDI0LjIyMzUrLTEuMDQ0NCAgICAgICAgCiAgIHN3
aXRjaC1jaGFyLWNvbnN0YW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTEyOSst
MC4wNDcxICAgICA/ICAgICAgMi40NDk0Ky0wLjU5MTMgICAgICAgID8gbWlnaHQgYmUgMS4xNTkz
eCBzbG93ZXIKICAgc3dpdGNoLWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNC44Njk1Ky0wLjQwNDQgICAgICAgICAgICA0LjgzODErLTAuMTY1MSAgICAgICAgCiAg
IHN3aXRjaC1jb25zdGFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNDA0
OCstMC4yMjAwICAgICAgICAgICAgNC40MDQ4Ky0wLjE5NTkgICAgICAgIAogICBzd2l0Y2gtc3Ry
aW5nLWJhc2ljLWJpZy12YXIgICAgICAgICAgICAgICAgICAgICAgIDE0LjA4ODMrLTAuNjcxOCAg
ICAgPyAgICAgMTQuMTI4OCstMC42ODM2ICAgICAgICA/CiAgIHN3aXRjaC1zdHJpbmctYmFzaWMt
YmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuNDMxMCstMS4zODEzICAgICA/ICAgICAx
NS4yMDAzKy00LjY1MDIgICAgICAgID8gbWlnaHQgYmUgMS4xMzE3eCBzbG93ZXIKICAgc3dpdGNo
LXN0cmluZy1iYXNpYy12YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC4xODM2Ky0xLjM3
NzYgICAgICAgICAgIDEzLjgxODArLTAuNjAxNSAgICAgICAgICBtaWdodCBiZSAxLjAyNjV4IGZh
c3RlcgogICBzd2l0Y2gtc3RyaW5nLWJhc2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEyLjgxODIrLTEuNjQ0MCAgICAgICAgICAgMTIuNjkwMistMC43MzgwICAgICAgICAgIG1pZ2h0
IGJlIDEuMDEwMXggZmFzdGVyCiAgIHN3aXRjaC1zdHJpbmctYmlnLWxlbmd0aC10b3dlci12YXIg
ICAgICAgICAgICAgICAgMjAuNTM2MystMi41MzY2ICAgICA/ICAgICAyMS4yMjMwKy0yLjEyMjIg
ICAgICAgID8gbWlnaHQgYmUgMS4wMzM0eCBzbG93ZXIKICAgc3dpdGNoLXN0cmluZy1sZW5ndGgt
dG93ZXItdmFyICAgICAgICAgICAgICAgICAgICAxNC45MjU3Ky0wLjcxMzggICAgICAgICAgIDE0
LjQ4MjIrLTEuMjIwMyAgICAgICAgICBtaWdodCBiZSAxLjAzMDZ4IGZhc3RlcgogICBzd2l0Y2gt
c3RyaW5nLWxlbmd0aC10b3dlciAgICAgICAgICAgICAgICAgICAgICAgIDEyLjQ1NTkrLTEuNDYz
NCAgICAgICAgICAgMTIuMDA2MSstMC4yNTg2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM3NXggZmFz
dGVyCiAgIHN3aXRjaC1zdHJpbmctc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTIuMjk2NistMS4wODY0ICAgICAgICAgICAxMi4wOTExKy0wLjg2MDkgICAgICAgICAgbWlnaHQg
YmUgMS4wMTcweCBmYXN0ZXIKICAgc3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNS43NDkyKy0wLjMyMTggICAgICAgICAgICA1LjY2MTMrLTAuMTg4MSAg
ICAgICAgICBtaWdodCBiZSAxLjAxNTV4IGZhc3RlcgogICBzd2l0Y2hpbmctc2l6ZS1jbGFzc2Vz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LjgxMDErLTEuNTI1OSAgICAgICAgICAgNDQu
NTEwNystMS4wMjQwICAgICAgICAKICAgc3ltYm9sLXRvc3RyaW5ndGFnICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMi44NDUzKy0wLjEwMzUgICAgID8gICAgICAyLjk0NDYrLTAuMTg5
MCAgICAgICAgPyBtaWdodCBiZSAxLjAzNDl4IHNsb3dlcgogICB0YW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcyLjY5OTArLTEuMDQzNyAgICAgPyAgICAg
NzUuMzYxMCstNi4zNTU1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDM2Nnggc2xvd2VyCiAgIHRlYXIt
b2ZmLWFyZ3VtZW50cy1zaW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTUzOCstMC4y
MDY1ICAgICA/ICAgICAgMi4xNzUzKy0wLjE0MzEgICAgICAgID8KICAgdGVhci1vZmYtYXJndW1l
bnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4yMTc1Ky0wLjIwMjIgICAgICAg
ICAgICAzLjE2OTcrLTAuMTkwNCAgICAgICAgICBtaWdodCBiZSAxLjAxNTF4IGZhc3RlcgogICB0
ZW1wb3JhbC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjczNjQr
LTAuNDc4MyAgICAgICAgICAgMTEuNjUxMSstMC42MDg0ICAgICAgICAKICAgdG8taW50MzItYm9v
bGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC4xNjI0Ky0xLjE3NzYgICAg
ID8gICAgIDE0LjIwMTMrLTAuNzM0MiAgICAgICAgPwogICB0by1sb3dlci1jYXNlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3LjE1ODgrLTIuODY4OCAgICAgPyAgICAxMDgu
MTgwOCstMy41OTY2ICAgICAgICA/CiAgIHRvLW51bWJlci1jb25zdHJ1Y3Rvci1udW1iZXItc3Ry
aW5nLW51bWJlci1zdHJpbmcgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMy42MTU1Ky0wLjA4MzIgICAgICAgICAgICAzLjU5MzkrLTAuMDY5
NCAgICAgICAgCiAgIHRvLW51bWJlci1jb25zdHJ1Y3Rvci1vbmx5LW51bWJlciAgICAgICAgICAg
ICAgICAgIDAuNjk2NystMC4wNTEyICAgICA/ICAgICAgMC43MDEzKy0wLjA1NjkgICAgICAgID8K
ICAgdG8tbnVtYmVyLWNvbnN0cnVjdG9yLW9ubHktc3RyaW5nICAgICAgICAgICAgICAgICAgMS43
NzM3Ky0wLjE5MTMgICAgID8gICAgICAxLjgzMDMrLTAuMTcwNiAgICAgICAgPyBtaWdodCBiZSAx
LjAzMTl4IHNsb3dlcgogICB0by1udW1iZXItY29uc3RydWN0b3Itc3RyaW5nLW51bWJlci1zdHJp
bmctbnVtYmVyICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMuMDg2NCstMC4wMzMzICAgICA/ICAgICAgMy4xMzQ2Ky0wLjIwOTQgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTU2eCBzbG93ZXIKICAgdG8tbnVtYmVyLW51bWJlci1zdHJpbmctbnVt
YmVyLXN0cmluZyAgICAgICAgICAgICAgMy4yMzU3Ky0wLjE0MTQgICAgICAgICAgICAzLjIwNTAr
LTAuMDg1OSAgICAgICAgCiAgIHRvLW51bWJlci1vbmx5LW51bWJlciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNTk3MystMC4wMzUxICAgICA/ICAgICAgMC42NDAzKy0wLjA4NDIgICAg
ICAgID8gbWlnaHQgYmUgMS4wNzE5eCBzbG93ZXIKICAgdG8tbnVtYmVyLW9ubHktc3RyaW5nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS45OTQ1Ky0wLjg1NzEgICAgICAgICAgICAxLjk4
NzcrLTAuNjY4MyAgICAgICAgCiAgIHRvLW51bWJlci1zdHJpbmctbnVtYmVyLXN0cmluZy1udW1i
ZXIgICAgICAgICAgICAgIDMuMTc3MistMC4xMTg1ICAgICA/ICAgICAgMy4yNTk0Ky0wLjMzODEg
ICAgICAgID8gbWlnaHQgYmUgMS4wMjU5eCBzbG93ZXIKICAgdHJ5LWNhdGNoLWdldC1ieS12YWwt
Y2xvbmVkLWFyZ3VtZW50cyAgICAgICAgICAgICAgNC4wNTAyKy0wLjQwODIgICAgID8gICAgICA0
LjIzNTMrLTAuNDE1MCAgICAgICAgPyBtaWdodCBiZSAxLjA0NTd4IHNsb3dlcgogICB0cnktY2F0
Y2gtZ2V0LWJ5LXZhbC1kaXJlY3QtYXJndW1lbnRzICAgICAgICAgICAgICAyLjA2NTErLTAuMzEx
MyAgICAgPyAgICAgIDIuMTIxMistMC43OTkzICAgICAgICA/IG1pZ2h0IGJlIDEuMDI3MXggc2xv
d2VyCiAgIHRyeS1jYXRjaC1nZXQtYnktdmFsLXNjb3BlZC1hcmd1bWVudHMgICAgICAgICAgICAg
IDQuNTc0OCstMC4zMTcyICAgICA/ICAgICAgNC42NjMxKy0wLjI5NDEgICAgICAgID8gbWlnaHQg
YmUgMS4wMTkzeCBzbG93ZXIKICAgdHJ5LWdldC1ieS1pZC1iYXNpYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNS44MDk2Ky0wLjI1OTYgICAgICAgICAgICA1LjczODUrLTAuNTcyOCAg
ICAgICAgICBtaWdodCBiZSAxLjAxMjR4IGZhc3RlcgogICB0cnktZ2V0LWJ5LWlkLXBvbHltb3Jw
aGljICAgICAgICAgICAgICAgICAgICAgICAgICA2LjgzNDIrLTAuMjMwMCAgICAgICAgICAgIDYu
Nzc3MCstMC4wOTE2ICAgICAgICAKICAgdHlwZWQtYXJyYXktZ2V0LXNldC1ieS12YWwtcHJvZmls
aW5nICAgICAgICAgICAgICAyMS44OTg5Ky0wLjkxNjYgICAgID8gICAgIDIxLjkwMzIrLTMuMTQx
MyAgICAgICAgPwogICB0eXBlZC1hcnJheS1zdWJhcnJheSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQxLjI4MzUrLTguMDE3OSAgICAgICAgICAgMzcuOTcwNCstMS43Mzk2ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDg3M3ggZmFzdGVyCiAgIHVuZGVmaW5lZC1wcm9wZXJ0eS1hY2Nlc3MgICAg
ICAgICAgICAgICAgICAgICAgICAyMTQuOTU2MCstNy45NzcyICAgICA/ICAgIDIxNS40ODkwKy00
LjY3NjQgICAgICAgID8KICAgdW5kZWZpbmVkLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMy4xMTI0Ky0wLjIzMTUgICAgID8gICAgICAzLjIxNTkrLTAuMjMyMSAgICAg
ICAgPyBtaWdodCBiZSAxLjAzMzN4IHNsb3dlcgogICB1bnByb2ZpbGVkLWxpY20gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA2LjA1MjcrLTAuMjE0NyAgICAgPyAgICAgIDYuMTcz
OCstMC40MTA1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwMHggc2xvd2VyCiAgIHVudHlwZWQtc3Ry
aW5nLWZyb20tY2hhci1jb2RlICAgICAgICAgICAgICAgICAgICAgMTAuMzY5NCstMC40MzcxICAg
ICA/ICAgICAxMC40MzYyKy0wLjU1NjggICAgICAgID8KICAgdjgtcmF5dHJhY2Utd2l0aC1lbXB0
eS10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAzNC44NTU3Ky0wLjgwOTEgICAgICAgICAgIDMx
Ljk5MjYrLTYuNDg1OCAgICAgICAgICBtaWdodCBiZSAxLjA4OTV4IGZhc3RlcgogICB2OC1yYXl0
cmFjZS13aXRoLXRyeS1jYXRjaC1oaWdoLWZyZXF1ZW5jeS10aHJvd3MgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0NC43MDU5Ky02LjQ1OTkg
ICAgID8gICAgMzUzLjA3MjQrLTQuNTAwMCAgICAgICAgPyBtaWdodCBiZSAxLjAyNDN4IHNsb3dl
cgogICB2OC1yYXl0cmFjZS13aXRoLXRyeS1jYXRjaCAgICAgICAgICAgICAgICAgICAgICAgIDYw
LjI0MjArLTIuMjczMiAgICAgPyAgICAgNjEuMzg3NystMi45MTUxICAgICAgICA/IG1pZ2h0IGJl
IDEuMDE5MHggc2xvd2VyCiAgIHY4LXJlZ2V4cC1zZWFyY2ggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNTMuNDY4MSstMi44NTIyICAgICAgICAgICA1MC44Mjk1Ky0xLjIzNjMgICAg
ICAgICAgbWlnaHQgYmUgMS4wNTE5eCBmYXN0ZXIKICAgdmFyYXJncy1jYWxsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMy42OTQyKy0xLjYzMTQgICAgICAgICAgIDEzLjQ5
MjIrLTEuNjk3NyAgICAgICAgICBtaWdodCBiZSAxLjAxNTB4IGZhc3RlcgogICB2YXJhcmdzLWNv
bnN0cnVjdC1pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LjU3OTYrLTAuODI2MCAg
ICAgICAgICAgMTUuNzA5NCstMC44MTU2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDU1NHggZmFzdGVy
CiAgIHZhcmFyZ3MtY29uc3RydWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMu
MTc0MSstNi4zNzg5ICAgICAgICAgICAyMi4xODQ5Ky0xLjcwMDIgICAgICAgICAgbWlnaHQgYmUg
MS4wNDQ2eCBmYXN0ZXIKICAgdmFyYXJncy1pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOC41NjQwKy0wLjE4NzUgICAgID8gICAgICA4Ljc3MDgrLTAuNzM2NSAgICAg
ICAgPyBtaWdodCBiZSAxLjAyNDF4IHNsb3dlcgogICB2YXJhcmdzLXN0cmljdC1tb2RlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5LjUzMzArLTAuNTY5NSAgICAgICAgICAgIDkuMjQz
NystMC4zMjQ5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMxM3ggZmFzdGVyCiAgIHZhcmFyZ3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuMjkzMCstMC4zMDc1ICAg
ICA/ICAgICAgOS4zNjk4Ky0wLjc4MjAgICAgICAgID8KICAgd2VpcmQtaW5saW5pbmctY29uc3Qt
cHJvcCAgICAgICAgICAgICAgICAgICAgICAgICAgMi4xMjI0Ky0wLjA4MjQgICAgID8gICAgICAy
LjUxMTgrLTAuOTAwMiAgICAgICAgPyBtaWdodCBiZSAxLjE4MzR4IHNsb3dlcgoKICAgPGdlb21l
dHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC40NDI0Ky0wLjA3
MTQgICAgICAgICAgICA4LjQ0MDIrLTAuMDM1NiAgICAgICAgICBtaWdodCBiZSAxLjAwMDN4IGZh
c3RlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKQXNtQmVuY2g6CiAgIGJpZ2ZpYi5jcHAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0NDQuNjUzNystOS45OTI0ICAgICAgICAgIDQ0NC4w
NzY1Ky0xMi40MTQ4ICAgICAgIAogICBjcmF5LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNDM1LjgxOTkrLTEzOC43NTcwICAgICAgICAzODkuODgwMistNi4zMjEx
ICAgICAgICAgIG1pZ2h0IGJlIDEuMTE3OHggZmFzdGVyCiAgIGRyeS5jICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjcuNDk5MystMTAuNTIzOSAgICA/ICAgIDQz
My41NDQzKy01LjE5MjAgICAgICAgID8gbWlnaHQgYmUgMS4wMTQxeCBzbG93ZXIKICAgRmxvYXRN
TS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4OS44NTIxKy02My4w
ODkyICAgICAgICAgNjYzLjYyOTcrLTcuMjk2NiAgICAgICAgICBtaWdodCBiZSAxLjAzOTV4IGZh
c3RlcgogICBnY2MtbG9vcHMuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
NjY4LjMwOTQrLTIyLjU3NTMgICAgPyAgIDM3MTIuMzYxMCstNjUuNzAyNCAgICAgICA/IG1pZ2h0
IGJlIDEuMDEyMHggc2xvd2VyCiAgIG4tYm9keS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA4MzAuOTQ5NystMjcuODQ4NSAgICAgICAgIDgyMy41MDE5Ky0xMC44MDg3
ICAgICAgIAogICBRdWlja3NvcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNDExLjIxODYrLTkuMzIwMCAgICAgICAgICA0MDguMzM4NystMTQuNTA4MSAgICAgICAKICAg
c3RlcGFub3ZfY29udGFpbmVyLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgMzUzNC4yNDY2
Ky0xNzguNjM2NiAgICAgICAzNDgyLjY5MjErLTY5LjgxMjAgICAgICAgICBtaWdodCBiZSAxLjAx
NDh4IGZhc3RlcgogICBUb3dlcnMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjQxLjgxNjgrLTYuNzEyMCAgICAgPyAgICAyNDguMjEzNCstOS4zNDczICAgICAgICA/
IG1pZ2h0IGJlIDEuMDI2NXggc2xvd2VyCgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNzMyLjAxMDIrLTIxLjQzNjIgICAgICAgICA3MjIuNjA3OCst
My4zNDAxICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMHggZmFzdGVyCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgICAgICAgICAg
ICAgICAgICAgICAgbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApD
b21wcmVzc2lvbkJlbmNoOgogICBodWZmbWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIxLjAxNzErLTEuMTMxOCAgICAgICAgICAgMTkuMjUxNSstMS42NTYwICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDkxN3ggZmFzdGVyCiAgIGFyaXRobWV0aWMtc2ltcGxlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyNzAuMTA5NystNC42Mzk5ICAgICAgICAgIDI2OC40
NTg2Ky02LjAzMDggICAgICAgIAogICBhcml0aG1ldGljLXByZWNpc2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjU0LjM4NDUrLTEuNjQ4NyAgICAgICAgICAyNTIuNjY5MCstNC4wNjA2
ICAgICAgICAKICAgYXJpdGhtZXRpYy1jb21wbGV4LXByZWNpc2UgICAgICAgICAgICAgICAgICAg
ICAgIDI1NC43NTA3Ky0zLjc2ODQgICAgID8gICAgMjU2LjEyOTArLTQuNDg3MCAgICAgICAgPwog
ICBhcml0aG1ldGljLXByZWNpc2Utb3JkZXItMCAgICAgICAgICAgICAgICAgICAgICAgMjczLjY1
MTIrLTExLjMzOTcgICAgICAgICAyNzMuMzczMCstOC4zODcwICAgICAgICAKICAgYXJpdGhtZXRp
Yy1wcmVjaXNlLW9yZGVyLTEgICAgICAgICAgICAgICAgICAgICAgIDMwOS40NzEyKy02LjIwNDAg
ICAgID8gICAgMzEyLjUxODUrLTguMzU4NSAgICAgICAgPwogICBhcml0aG1ldGljLXByZWNpc2Ut
b3JkZXItMiAgICAgICAgICAgICAgICAgICAgICAgMzU3LjUzOTkrLTYuNjU2NSAgICAgPyAgICAz
NTguNDQyNCstMTIuMDU4NyAgICAgICA/CiAgIGFyaXRobWV0aWMtc2ltcGxlLW9yZGVyLTEgICAg
ICAgICAgICAgICAgICAgICAgICAzMTguNTI3NCstNy4wMjUzICAgICAgICAgIDMxOC4yNDExKy02
LjM2NjAgICAgICAgIAogICBhcml0aG1ldGljLXNpbXBsZS1vcmRlci0yICAgICAgICAgICAgICAg
ICAgICAgICAgMzU4Ljk4MDQrLTcuNDA5NyAgICAgPyAgICAzNzAuNTQ5NystOS4xMzIwICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDMyMnggc2xvd2VyCiAgIGx6LXN0cmluZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyNzYuNTk5MistMTUuNDUxMiAgICAgICAgIDI3Ni41MDA3
Ky0xMi40Mzg2ICAgICAgIAoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIyNi4yNzQ4Ky0yLjI4MTAgICAgICAgICAgMjI1LjA1ODArLTMuNDM1MSAg
ICAgICAgICBtaWdodCBiZSAxLjAwNTR4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAg
ICAgIG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKR2VvbWVhbiBv
ZiBwcmVmZXJyZWQgbWVhbnM6CiAgIDxzY2FsZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNDcuODMyNCstMC4yNDAzICAgICA/ICAgICA0Ny44ODA5Ky0wLjM3OTIg
ICAgICAgID8gbWlnaHQgYmUgMS4wMDEweCBzbG93ZXIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297947</attachid>
            <date>2017-01-03 13:54:00 -0800</date>
            <delta_ts>2017-01-03 14:13:27 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-166658.patch</filename>
            <type>text/plain</type>
            <size>1621756</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMSBA
QAorMjAxNy0wMS0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVkdWNlIHRoZSB1c2Ugb2YgRW5jb2RlZEpTVmFsdWUsIGFuZCB1c2UgSlNWYWx1ZSBpbnN0ZWFk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3Rp
bmcgY29kZSB1c2VzIEVuY29kZWRKU1ZhbHVlIGZvciBwYXNzaW5nIEpTVmFsdWVzIGluIGFuZCBv
dXQgb2YgaG9zdCBmdW5jdGlvbnMuCisgICAgICAgIEhvd2V2ZXIsIGl0IGRvZXMgbm90IHNlZW0g
dGhhdCB0aGlzIGlzIG5lY2Vzc2FyeSBpbiBtb3N0IGNhc2VzLiAgU3BlY2lmaWNhbGx5LAorICAg
ICAgICBOYXRpdmVGdW5jdGlvbiwgR2V0VmFsdWVGdW5jLCBhbmQgUHV0VmFsdWVGdW5jIGNhbiBh
bGwgdXNlIEpTVmFsdWUgd2l0aCBubworICAgICAgICBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMu
ICBVc2luZyBKU1ZhbHVlIGRpcmVjdGx5IChpbnN0ZWFkIG9mIEVuY29kZWRKU1ZhbHVlKSBhbHNv
CisgICAgICAgIGltcHJvdmVzIHR5cGUgc2FmZXR5LCBhbmQgcmVkdWNlcyB0aGUgbmVlZCB0byBt
YXJzaGFsIHZhbHVlcyBiYWNrIGFuZCBmb3J0aCB1c2luZworICAgICAgICBKU1ZhbHVlOjplbmNv
ZGUoKSBhbmQgSlNWYWx1ZTo6ZGVjb2RlKCkuICBUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgZWFz
eSB0byByZWFkCisgICAgICAgIGFuZCB3cml0ZSwgd2l0aCBubyBwZXJmb3JtYW5jZSBsb3NzLgor
CisgICAgICAgIFRoZSAyIHByaW1hcnkgcmVhc29uIGZvciBjb2RlIHRvIHN0aWxsIHVzZSBFbmNv
ZGVkSlNWYWx1ZSBhcmU6CisgICAgICAgIDEuIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgQyBsaW5r
YWdlIChlLmcuIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25zKS4KKyAgICAgICAgMi4gYXMgYW4gZWxl
bWVudCBzdG9yYWdlIHR5cGUgd2hlcmUgdXNpbmcgRW5jb2RlZEpTVmFsdWUgYWxsb3dzIHVzIHRv
IHVzZSB0aGUKKyAgICAgICAgICAgdHJpdmlhbCBjb25zdHJ1Y3RvciBmb3IgaW50NjRfdC4KKwor
ICAgICAgICBBbHNvIGRlbGV0ZWQgc29tZSB1bnVzZWQgY29kZS4KKworICAgICAgICBOb3RlOiB0
aGlzIHBhdGNoIGlzIG5vdCBleGhhdXN0aXZlIGluIHJlbW92aW5nIGFsbCB1bm5lY2Vzc2FyeSB1
c2VzIG9mCisgICAgICAgIEVuY29kZWRKU1ZhbHVlLiAgSXQgbWVyZWx5IHRyaWVzIHRvIHJlZHVj
ZSBpdCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGggbWluaW1hbAorICAgICAgICBlZmZvcnQuCisK
KyAgICAgICAgUGVyZm9ybWFuY2UgaXMgbmV1dHJhbCBvbiB0aGUgSlNDIGJlbmNobWFya3MuCisK
KyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpBUElD
YWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tGdW5jdGlv
bjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Y29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpjYWxsKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZnRsL0ZUTEdl
bmVyYXRlZEZ1bmN0aW9uLmg6CisgICAgICAgICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVBdHRyaWJ1dGVFdmFsdWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rp
b25Jc0hUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0
aW9uV2Vha01hcEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUpOgorICAgICAgICAoSW5zcGVjdG9yOjpq
c0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXRl
cmF0b3JFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
RnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgICogaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRo
U2NvcGVFeHRlbnNpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVQcm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVMaW5lKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25OYW1l
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU2Nv
cGVDaGFpbik6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZVRoaXNPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZy
YW1lSXNUYWlsRGVsZXRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKFdURjo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpS
dW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChXVEY6OkRPTUpJVEdldHRlcjo6
Y3VzdG9tR2V0dGVyKToKKyAgICAgICAgKFdURjo6RE9NSklUR2V0dGVyQ29tcGxleDo6ZnVuY3Rp
b25FbmFibGVFeGNlcHRpb24pOgorICAgICAgICAoV1RGOjpET01KSVRHZXR0ZXJDb21wbGV4Ojpj
dXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpET01KSVRGdW5jdGlvbk9iamVjdDo6c2FmZUZ1
bmN0aW9uKToKKyAgICAgICAgKHByaW50SW50ZXJuYWwpOgorICAgICAgICAoZnVuY3Rpb25Qcmlu
dFN0ZE91dCk6CisgICAgICAgIChmdW5jdGlvblByaW50U3RkRXJyKToKKyAgICAgICAgKGZ1bmN0
aW9uRHVtcENhbGxGcmFtZSk6CisgICAgICAgIChmdW5jdGlvbkRlYnVnKToKKyAgICAgICAgKGZ1
bmN0aW9uRGVzY3JpYmUpOgorICAgICAgICAoZnVuY3Rpb25EZXNjcmliZUFycmF5KToKKyAgICAg
ICAgKGZ1bmN0aW9uU2xlZXBTZWNvbmRzKToKKyAgICAgICAgKGZ1bmN0aW9uSlNDU3RhY2spOgor
ICAgICAgICAoZnVuY3Rpb25DcmVhdGVSb290KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRWxl
bWVudCk6CisgICAgICAgIChmdW5jdGlvbkdldEVsZW1lbnQpOgorICAgICAgICAoZnVuY3Rpb25T
ZXRFbGVtZW50Um9vdCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdCk6Cisg
ICAgICAgIChmdW5jdGlvbkdldEhpZGRlblZhbHVlKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlk
ZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAgIChmdW5j
dGlvbkNyZWF0ZVJ1bnRpbWVBcnJheSk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUltcHVyZUdl
dHRlcik6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdCk6CisgICAg
ICAgIChmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25D
cmVhdGVET01KSVRHZXR0ZXJPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01KSVRH
ZXR0ZXJDb21wbGV4T2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rp
b25PYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSk6Cisg
ICAgICAgIChmdW5jdGlvbkdDQW5kU3dlZXApOgorICAgICAgICAoZnVuY3Rpb25GdWxsR0MpOgor
ICAgICAgICAoZnVuY3Rpb25FZGVuR0MpOgorICAgICAgICAoZnVuY3Rpb25Gb3JjZUdDU2xvd1Bh
dGhzKToKKyAgICAgICAgKGZ1bmN0aW9uSGVhcFNpemUpOgorICAgICAgICAoZnVuY3Rpb25BZGRy
ZXNzT2YpOgorICAgICAgICAoZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoZnVu
Y3Rpb25WZXJzaW9uKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9u
UnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxv
YWRTdHJpbmcpOgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlv
bkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncyk6CisgICAg
ICAgIChmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyk6CisgICAgICAgIChmdW5jdGlvblNoYWRv
d0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3cpOgorICAgICAgICAoZnVuY3Rpb25HZXRSYW5k
b21TZWVkKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5j
dGlvbklzUm9wZSk6CisgICAgICAgIChmdW5jdGlvbkNhbGxlclNvdXJjZU9yaWdpbik6CisgICAg
ICAgIChmdW5jdGlvblJlYWRsaW5lKToKKyAgICAgICAgKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOgor
ICAgICAgICAoZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9u
Tm9ERkcpOgorICAgICAgICAoZnVuY3Rpb25Ob0ZUTCk6CisgICAgICAgIChmdW5jdGlvbk5vT1NS
RXhpdEZ1enppbmcpOgorICAgICAgICAoZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk6CisgICAgICAgIChmdW5jdGlv
bkpTQ09wdGlvbnMpOgorICAgICAgICAoZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQp
OgorICAgICAgICAoZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKToKKyAgICAgICAgKGZ1bmN0
aW9uRmFpbE5leHROZXdDb2RlQmxvY2spOgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uQWJvcnQpOgorICAgICAgICAoZnVuY3Rpb25GYWxzZTEpOgorICAgICAgICAo
ZnVuY3Rpb25GYWxzZTIpOgorICAgICAgICAoZnVuY3Rpb25VbmRlZmluZWQxKToKKyAgICAgICAg
KGZ1bmN0aW9uVW5kZWZpbmVkMik6CisgICAgICAgIChmdW5jdGlvbklzSW50MzIpOgorICAgICAg
ICAoZnVuY3Rpb25JZGVudGl0eSk6CisgICAgICAgIChmdW5jdGlvbkVmZmVjdGZ1bDQyKToKKyAg
ICAgICAgKGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyKToKKyAgICAgICAgKGZ1bmN0aW9uSGFzQ3Vz
dG9tUHJvcGVydGllcyk6CisgICAgICAgIChmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxl
cyk6CisgICAgICAgIChmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbik6CisgICAgICAgIChm
dW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAoZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4
ZWN1dGlvblJhbmdlcyk6CisgICAgICAgIChmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZCk6
CisgICAgICAgIChmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRpb25Db3VudCk6CisgICAgICAgIChm
dW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoZnVuY3Rpb25EcmFpbk1pY3Jv
dGFza3MpOgorICAgICAgICAoZnVuY3Rpb25JczMyQml0UGxhdGZvcm0pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkTW9kdWxlKToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbik6CisgICAg
ICAgIChmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvbkNoZWNr
TW9kdWxlU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5n
UHJvZmlsZXIpOgorICAgICAgICAoZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAoZnVuY3Rpb25F
bnN1cmVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJvZmls
ZXIpOgorICAgICAgICAoZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgorICAg
ICAgICAoZnVuY3Rpb25NYXhBcmd1bWVudHMpOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1v
ZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENh
bGwpOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEFycmF5Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OmFycmF5Q29uc3RydWN0b3JQcml2YXRlRnVuY0lzQXJyYXlTbG93KToKKyAgICAgICAg
KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1Bv
cCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jUmV2ZXJzZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6Y29uY2F0QXBwZW5kT25l
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQXBwZW5kTWVtY3B5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9Bc3luY0Z1bmN0
aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsQXN5bmNGdW5jdGlvbkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0F0b21pY3NPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjph
dG9taWNzRnVuY0FkZCk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jQW5kKToKKyAgICAgICAg
KEpTQzo6YXRvbWljc0Z1bmNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjphdG9taWNz
RnVuY0V4Y2hhbmdlKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNJc0xvY2tGcmVlKToKKyAg
ICAgICAgKEpTQzo6YXRvbWljc0Z1bmNMb2FkKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNP
cik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jU3RvcmUpOgorICAgICAgICAoSlNDOjphdG9t
aWNzRnVuY1N1Yik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2FpdCk6CisgICAgICAgIChK
U0M6OmF0b21pY3NGdW5jV2FrZSk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jWG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsQm9vbGVh
bkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpi
b29sZWFuUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNvbnNv
bGVMb2dXaXRoTGV2ZWwpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRGVidWcpOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRXJyb3IpOgorICAgICAgICAoSlNDOjpjb25z
b2xlUHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0luZm8pOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jV2Fybik6CisgICAgICAgIChKU0M6OmNvbnNv
bGVQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNEaXIpOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRGlyWE1MKToKKyAgICAgICAgKEpTQzo6Y29u
c29sZVByb3RvRnVuY1RhYmxlKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1RyYWNl
KToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0Fzc2VydCk6CisgICAgICAgIChKU0M6
OmNvbnNvbGVQcm90b0Z1bmNDb3VudCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNQ
cm9maWxlKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Byb2ZpbGVFbmQpOgorICAg
ICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgIChK
U0M6OmNvbnNvbGVQcm90b0Z1bmNUaW1lKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVu
Y1RpbWVFbmQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1wKToKKyAg
ICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0dyb3VwKToKKyAgICAgICAgKEpTQzo6Y29uc29s
ZVByb3RvRnVuY0dyb3VwQ29sbGFwc2VkKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVu
Y0dyb3VwRW5kKToKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxDdXN0b21TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToK
KyAgICAgICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNUb1VUQ1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0
ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2wpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVh
cik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNH
ZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01p
bnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRV
VENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VGltZSk6CisgICAgICAgIChK
U0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVG
cm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWlu
dXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldERhdGUpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENN
b250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcik6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxG
dW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjplc1NwZWNJc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDoKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yLmg6CisgICAgICAgIChKU0M6OnRocm93Vk1FcnJvcik6CisgICAgICAg
IChKU0M6OnRocm93Vk1UeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd1ZNUmFuZ2VFcnJv
cik6CisgICAgICAgIChKU0M6OlN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6Y29uc3RydWN0
VGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNhbGxUaHJvd1R5cGVFcnJvcik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEZ1bmN0aW9uQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAg
ICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5j
dGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICog
cnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjppbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2cpOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRs
Q29sbGF0b3IpOgorICAgICAgICAoSlNDOjpjYWxsSW50bENvbGxhdG9yKToKKyAgICAgICAgKEpT
Qzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAg
ICAgKiBydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Oklu
dGxDb2xsYXRvckZ1bmNDb21wYXJlKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90
eXBlR2V0dGVyQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvclByb3RvdHlwZUZ1
bmNSZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3Jt
YXQpOgorICAgICAgICAoSlNDOjpjYWxsSW50bERhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSk6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SW50bE51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OmNhbGxJ
bnRsTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNG
b3JtYXROdW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0
dGVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdFByb3RvdHlwZUZ1bmNS
ZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OmFycmF5QnVmZmVyRnVuY0lzVmlldyk6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1
bmNTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpib3Vu
ZEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OmlzQm91bmRGdW5jdGlvbik6CisgICAgICAgIChKU0M6Omhhc0luc3RhbmNlQm91bmRG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlZEpTVW5kZWZpbmVk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldERhdGEpOgorICAgICAgICAoSlNDOjpzZXREYXRh
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6ZGF0YVZp
ZXdQcm90b0dldHRlckJ5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y0dldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KToKKyAg
ICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMik6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jR2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y0dldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNTZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQx
Nik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIpOgorICAgICAgICAo
SlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMik6CisgICAg
ICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCk6CisgICAgICAgICogcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlldyk6
CisgICAgICAgIChKU0M6OmNhbGxHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRlcmVkVHlwZWRBcnJheVR5
cGVFcnJvcik6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmND
b3B5V2l0aGluKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
SW5jbHVkZXMpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJ
bmRleE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9p
bik6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRl
eE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5j
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJG
dW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0
ZXJGdW5jQnl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJpdmF0ZUZ1bmNTb3J0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2
YXRlRnVuY1N1YmFycmF5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6bWFrZUJvdW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpo
YXNPd25MZW5ndGhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OmdldFRlbXBsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6ZW5xdWV1ZUpvYik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAg
ICAgKEpTQzo6Z2xvYmFsRnVuY1BhcnNlSW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1Bh
cnNlRmxvYXQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNFbmNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9u
ZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNVbmVzY2FwZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJv
cik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxl
ZUFuZENhbGxlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAg
ICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1
bmNCdWlsdGluTG9nKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
Lmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0UHJvbWlzZSk6CisgICAgICAgICogcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1vZHVsZU5hbWVzcGFjZU9i
amVjdFN5bWJvbEl0ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpydW5TdGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZik6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKEpTQzo6Y2Fs
bFByb21pc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0VHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1
bmNJc1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY0xlbmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNHZXRP
cmlnaW5hbENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY1NvcnQpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldCk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik6CisgICAgICAg
IChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAgICAoSlNDOjp0
eXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6dHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQ
cm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1
bmNCdWZmZXIpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxl
bmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9m
ZnNldCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZSk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlND
Ojp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5nVGFnKToKKyAgICAgICAgKiBy
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL01h
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbE1hcCk6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdE1hcCk6CisgICAgICAgICogcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQpOgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5j
Q2xlYXIpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlND
OjptYXBQcm90b0Z1bmNHZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNIYXMpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNT
aXplKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jVmFsdWVzKToKKyAgICAgICAgKEpTQzo6
bWFwUHJvdG9GdW5jRW50cmllcyk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0tleXMpOgor
ICAgICAgICAoSlNDOjpwcml2YXRlRnVuY01hcEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBl
Lmg6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0
aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAg
ICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5j
QVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBVGFuMik6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NsejMyKToK
KyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNFeHApOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jSHlwb3QpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTG9n
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNS
b3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaWduKToKKyAgICAgICAgKEpTQzo6
bWF0aFByb3RvRnVuY1Npbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTcXJ0KToKKyAg
ICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Rhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNJTXVsKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FDb3NoKToKKyAgICAgICAgKEpT
Qzo6bWF0aFByb3RvRnVuY0FTaW5oKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW5o
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NicnQpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jQ29zaCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHBtMSk6CisgICAg
ICAgIChKU0M6Om1hdGhQcm90b0Z1bmNGcm91bmQpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9G
dW5jTG9nMXApOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTG9nMTApOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jTG9nMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW5o
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1RhbmgpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jVHJ1bmMpOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2Fk
ZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVy
UHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6
bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRl
clByb3RvdHlwZUZldGNoKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlSW5z
dGFudGlhdGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL051bGxHZXR0ZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OmNhbGxSZXR1cm5VbmRlZmluZWQpOgorICAgICAgICAqIHJ1bnRpbWUvTnVsbFNldHRlckZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFJldHVyblVuZGVmaW5lZCk6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdp
dGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlcik6CisgICAg
ICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yRnVuY0lzU2FmZUludGVnZXIpOgorICAgICAgICAq
IHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9G
dW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRml4ZWQp
OgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgIChK
U0M6OmludGVnZXJWYWx1ZVRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdpdGhPYmplY3RDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6OmNhbGxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Om9iamVj
dENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1
Y3RvclNldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RGVzY3JpcHRvcnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5U3ltYm9scyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yS2V5
cyk6CisgICAgICAgIChKU0M6Om93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMpOgorICAgICAgICAo
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9i
amVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RD
b25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zy
b3plbik6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJcyk6CisgICAgICAgICogcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9i
amVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdl
dHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAg
ICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9i
amVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpjdXN0b21BY2Nlc3NvckdldHRlcik6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjptYWtlUmV2b2NhYmxlUHJveHkpOgorICAg
ICAgICAoSlNDOjpwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9yVGhyb3dFcnJvcik6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFByb3h5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y2FsbFByb3h5KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAg
ICAgIChKU0M6OnBlcmZvcm1Qcm94eUNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9Qcm94
eVJldm9rZS5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eVJldm9rZSk6CisgICAgICAg
ICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZmxlY3RP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0Q29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6cmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6cmVm
bGVjdE9iamVjdEVudW1lcmF0ZSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RHZXQpOgor
ICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6
cmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RP
d25LZXlzKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNpb25zKToK
KyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFNldCk6CisgICAgICAgIChKU0M6OnJlZmxlY3RP
YmplY3RTZXRQcm90b3R5cGVPZik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKToKKyAgICAgICAg
KEpTQzo6cmVnRXhwQ29uc3RydWN0b3JJbnB1dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0
Y2gpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbik6CisgICAgICAg
IChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdF
eHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0
cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGlu
ZSk6CisgICAgICAgIChKU0M6OmVzU3BlY1JlZ0V4cENyZWF0ZSk6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNhbGxSZWdFeHBD
b25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwT2Jq
ZWN0U2V0TGFzdEluZGV4U3RyaWN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0U2V0TGFz
dEluZGV4Tm9uU3RyaWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1Rlc3RGYXN0KToKKyAgICAgICAgKEpTQzo6
cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY01hdGNo
RmFzdCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAo
SlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3Rv
R2V0dGVyR2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNl
KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxpbmUpOgorICAgICAgICAo
SlNDOjpyZWdFeHBQcm90b0dldHRlclN0aWNreSk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3Rv
R2V0dGVyVW5pY29kZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlclNvdXJjZSk6CisgICAgICAgIChKU0M6OnJl
Z0V4cFByb3RvRnVuY1NlYXJjaEZhc3QpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNT
cGxpdEZhc3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxTZXQpOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0
b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNO
ZXh0KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OnNldFByb3RvRnVuY0FkZCk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0NsZWFyKToKKyAg
ICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jRGVsZXRlKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9G
dW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6
OnNldFByb3RvRnVuY1ZhbHVlcyk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0VudHJpZXMp
OgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
cHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0UHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21Db2Rl
UG9pbnQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgor
ICAgICAgICAoSlNDOjpjYWxsU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVtb3ZlVXNpbmdSZWdFeHBTZWFy
Y2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2gpOgorICAgICAgICAo
SlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIpOgorICAg
ICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAg
ICAgIChKU0M6Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNDaGFyQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ29kZVBvaW50QXQpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0
cik6CisgICAgICAgIChKU0M6OmJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBl
ckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6dG9Mb2NhbGVDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
VG9Mb2NhbGVMb3dlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvY2Fs
ZVVwcGVyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jQmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNJdGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RhcnRzV2l0aCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0VuZHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nSW5jbHVk
ZXNJbXBsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAg
ICAoSlNDOjpidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTm9y
bWFsaXplKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsU3ltYm9s
KToKKyAgICAgICAgKEpTQzo6c3ltYm9sQ29uc3RydWN0b3JGb3IpOgorICAgICAgICAoSlNDOjpz
eW1ib2xDb25zdHJ1Y3RvcktleUZvcik6CisgICAgICAgICogcnVudGltZS9TeW1ib2xQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
IChKU0M6OnN5bWJvbFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01h
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYWtNYXApOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKToKKyAgICAgICAg
KEpTQzo6cHJvdG9GdW5jV2Vha01hcEdldCk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtN
YXBIYXMpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwU2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWFrU2V0
KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2Vha1NldCk6CisgICAgICAgICogcnVudGltZS9X
ZWFrU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha1NldERlbGV0
ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXRIYXMpOgorICAgICAgICAoSlNDOjpw
cm90b0Z1bmNXZWFrU2V0QWRkKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uREZHVHJ1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTExpbnRUcnVlKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25KSVRUcnVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HQyk6CisgICAg
ICAgIChKU0M6OmZ1bmN0aW9uRWRlbkdDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Db2RlQmxv
Y2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25QcmludFNvdXJjZUZvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
UHJpbnRCeXRlQ29kZUZvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnQpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvblByaW50Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Q
cmludFN0YWNrKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25WYWx1ZSk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uR2V0UElEKToKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwOgorICAg
ICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6d2ViQXNz
ZW1ibHlWYWxpZGF0ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUxpbmtFcnJvcik6
CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5TGlua0Vycm9yKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNz
ZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcik6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6
OmNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlGdW5jdGlvblZhbGlkYXRlKToKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlGdW5jdGlvbkNvbXBpbGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IpOgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUp
OgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3Nl
bWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0dyb3cpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5j
R2V0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisKIDIw
MTctMDEtMDMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YkFzc2VtYmx5IEpTIEFQSTogY2hlY2sgYW5kIHRlc3QgaW4tY2FsbCAvIG91dC1jYWxsIHZhbHVl
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEyLTIwMTMsIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgs
IDIwMTItMjAxMywgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkK
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgpAQCAtMzc2LDE4ICszNzYsMTggQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCisgICAgc3RhdGlj
IEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICBDdXN0
b21HZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEN1c3RvbUdldHRlcio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICAgICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0
ID0ganNEeW5hbWljQ2FzdDxDdXN0b21HZXR0ZXIqPih0aGlzVmFsdWUpOwogICAgICAgICBpZiAo
IXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgICAgIGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywg
UHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNob3VsZFRocm93Iikp
KS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykKICAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcigxMDApKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDEw
MCk7CiAgICAgfQogfTsKIApAQCAtNDg0LDE1ICs0ODQsMTUgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRp
YyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAgICAgUnVu
dGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxSdW50aW1lQXJyYXkqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVj
dCA9IGpzRHluYW1pY0Nhc3Q8UnVudGltZUFycmF5Kj4odGhpc1ZhbHVlKTsKICAgICAgICAgaWYg
KCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmpl
Y3QtPmdldExlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqZWN0LT5n
ZXRMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgVmVjdG9yPGludD4gbV92ZWN0b3I7CkBAIC02Njks
MTUgKzY2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0
dGVyU2V0dGVyLCBSZWFkT25seSB8IEN1c3RvbUFjY2Vzc29yKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCisgICAgc3RhdGljIEpTVmFsdWUgY3VzdG9t
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
ICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICBET01KSVROb2RlKiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgICAgICBET01KSVROb2RlKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01K
SVROb2RlKj4odGhpc1ZhbHVlKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPnZhbHVlKCkpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPnZhbHVlKCkpOwogICAgIH0KIH07CiAKQEAgLTc2
OCwyNyArNzY4LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZW5hYmxlRXhj
ZXB0aW9uIiksIDAsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uLCBOb0ludHJpbnNpYywgMCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25F
bmFibGVFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHsK
ICAgICAgICAgYXV0byogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgICAgICBpZiAob2JqZWN0KQogICAgICAgICAgICAg
b2JqZWN0LT5tX2VuYWJsZUV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKKyAgICBzdGF0
aWMgSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PERPTUpJVE5vZGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PERPTUpJVE5vZGUqPih0aGlzVmFsdWUpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIGlm
IChhdXRvKiBkb21qaXRHZXR0ZXJDb21wbGV4ID0ganNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJD
b21wbGV4Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKSB7CisgICAgICAgIGlmIChhdXRv
KiBkb21qaXRHZXR0ZXJDb21wbGV4ID0ganNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4
Kj4odGhpc1ZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGRvbWppdEdldHRlckNvbXBsZXgtPm1f
ZW5hYmxlRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiRE9NSklUR2V0dGVyQ29tcGxleCBzbG93IGNhbGwgZXhjZXB0aW9uIikpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIkRPTUpJVEdldHRlckNvbXBsZXggc2xvdyBjYWxsIGV4Y2VwdGlv
biIpKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cih0aGlzT2JqZWN0LT52YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcih0aGlzT2Jq
ZWN0LT52YWx1ZSgpKTsKICAgICB9CiAKICAgICBib29sIG1fZW5hYmxlRXhjZXB0aW9uIHsgZmFs
c2UgfTsKQEAgLTgxOCw3ICs4MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvYmplY3Q7
CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2FmZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNhZmVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC04MjYsNyArODI2LDcgQEAgcHVibGljOgogICAgICAgICBET01KSVROb2RlKiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2RlKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAg
ICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
dGhpc09iamVjdC0+dmFsdWUoKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iamVj
dC0+dmFsdWUoKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTkwNywxMDkgKzkwNywx
MDkgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvbwogCiBzdGF0aWMg
Ym9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25DcmVhdGVQcm94eShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVJbXB1
cmVHZXR0ZXIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUTm9kZU9iamVj
dChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlYXRlRE9NSklUR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2Jq
ZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25DcmVhdGVET01KSVRGdW5jdGlvbk9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlR2xv
YmFsT2JqZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqKTsKLQotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdChFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlUm9vdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ3JlYXRlRWxlbWVudChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0RWxlbWVudChFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
ZXRIaWRkZW5WYWx1ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkT3V0KEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGVidWcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29uZHMoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
Q0FuZFN3ZWVwKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25GdWxsR0MoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRm9yY2VHQ1Nsb3dQYXRocyhFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcFNpemUoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFk
ZHJlc3NPZihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uR2V0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVJ1bnRpbWVBcnJheShFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVJbXB1cmVHZXR0ZXIo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRl
Q3VzdG9tR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyT2JqZWN0KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURP
TUpJVEdldHRlckNvbXBsZXhPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVHbG9i
YWxPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKik7CisKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSb290KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0RWxlbWVudChF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVT
aW1wbGVPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRPdXQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRFcnIoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmVBcnJheShFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29u
ZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlND
U3RhY2soRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R0NBbmRTd2VlcChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25GdWxsR0MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRWRlbkdDKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkZvcmNlR0NTbG93UGF0aHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uSGVhcFNpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWRkcmVzc09mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdldHRlclNldHRlcihFeGVjU3RhdGUqKTsKICNp
Zm5kZWYgTkRFQlVHCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkR1bXBDYWxsRnJhbWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqKTsKICNlbmRpZgotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1blN0cmluZyhF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TG9hZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uTG9hZFN0cmluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZpbGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJlY2lz
ZVRpbWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbk5ldmVySW5saW5lRnVuY3Rpb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vREZHKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0ZUTChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9PU1JFeGl0RnV6emlu
ZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyhFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9u
cyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWlsTmV4
dE5ld0NvZGVCbG9jayhFeGVjU3RhdGUqKTsKLXN0YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRmFsc2UxKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblVuZGVmaW5lZDEoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblVuZGVmaW5lZDIoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklz
SW50MzIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkVmZmVjdGZ1bDQyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25JZGVudGl0eShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Q
cm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lv
bihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0Jhc2lj
QmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25G
dXp6KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EcmFpbk1pY3JvdGFza3MoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tN
b2R1bGVTeW50YXgoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW5lcmF0ZUhl
YXBTbmFwc2hvdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJTdGF0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1blN0cmlu
ZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2Fk
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRT
dHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UmVhZEZpbGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uTmV2ZXJJbmxpbmVGdW5jdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0RGRyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0ZUTChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob09TUkV4aXRGdXp6aW5nKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk9wdGltaXplTmV4dElu
dm9jYXRpb24oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTnVtYmVyT2ZERkdDb21waWxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25KU0NPcHRpb25zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZh
aWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSopOworc3RhdGljIE5PX1JFVFVSTl9XSVRIX1ZB
TFVFIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKik7CitzdGF0
aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25B
Ym9ydChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25G
YWxzZTEoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RmFsc2UyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blVuZGVmaW5lZDEoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uVW5kZWZpbmVkMihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Jc0ludDMyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkVmZmVjdGZ1bDQyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbklkZW50aXR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2VNYXNxdWVyYWRlcihFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0Zv
ckFsbFZhcmlhYmxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJh
bmdlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25I
YXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHJhaW5NaWNy
b3Rhc2tzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Mb2FkTW9kdWxlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2Zp
bGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdl
bmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVyU3RhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSopOwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1By
b2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyhF
eGVjU3RhdGUqKTsKICNlbmRpZgogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdG
bGFncyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
ZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyhFeGVjU3RhdGUqKTsKICNlbmRpZgogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNoYWRvd0NoaWNrZW5GdW5j
dGlvbnNPblN0YWNrKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdyhF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSXNSb3BlKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93
Q2hpY2tlbkZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhy
b3coRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0
UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbklzUm9wZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4oRXhlY1N0YXRlKik7CiAKIHN0cnVjdCBT
Y3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0TW9kZSB7CkBAIC0xNTUzLDcgKzE1NTMsNyBA
QCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMCiB9CiAKIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBGSUxFKiBvdXQp
CitzdGF0aWMgSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHByaW50SW50ZXJuYWwoRXhlYwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNT
dHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBs
ZXRlIikpCiAgICAgICAgICAgICB0ZXN0MjYyQXN5bmNQYXNzZWQgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKQEAgLTE1NzEsNyArMTU3MSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWMKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7
CiAKICAgICAgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KGkpLnRvU3RyaW5nKGV4ZWMpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoKmV4ZWMpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGZwcmludGYo
b3V0LCAiJXMiLCB2aWV3V2l0aFN0cmluZy52aWV3LnV0ZjgoKS5kYXRhKCkpIDwgMCkKICAgICAg
ICAgICAgIGdvdG8gZmFpbDsKICAgICB9CkBAIC0xNTc5LDU1ICsxNTc5LDU1IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWMKICAgICBmcHV0YygnXG4nLCBvdXQpOwog
ZmFpbDoKICAgICBmZmx1c2gob3V0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRPdXQoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBwcmludEludGVybmFsKGV4ZWMsIHN0ZG91dCk7IH0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHBy
aW50SW50ZXJuYWwoZXhlYywgc3RkZXJyKTsgfQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUHJpbnRTdGRPdXQoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBwcmludEludGVybmFsKGV4
ZWMsIHN0ZG91dCk7IH0KK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJy
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnRJbnRlcm5hbChleGVjLCBzdGRlcnIpOyB9
CiAKICNpZm5kZWYgTkRFQlVHCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTUVudHJ5RnJhbWUq
IHRvcFZNRW50cnlGcmFtZSA9IGV4ZWMtPnZtKCkudG9wVk1FbnRyeUZyYW1lOwogICAgIEV4ZWNT
dGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOwog
ICAgIGlmIChjYWxsZXJGcmFtZSkKICAgICAgICAgZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+ZHVt
cENhbGxGcmFtZShjYWxsZXJGcmFtZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KICNlbmRpZgogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzXG4iLCB2
aWV3V2l0aFN0cmluZy52aWV3LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKCI8bm90IG9iamVjdD4iKSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRvU3Ry
aW5nKCI8QnV0dGVyZmx5OiAiLCBSYXdQb2ludGVyKG9iamVjdC0+YnV0dGVyZmx5KCkpLCAiOyBw
dWJsaWMgbGVuZ3RoOiAiLCBvYmplY3QtPmdldEFycmF5TGVuZ3RoKCksICI7IHZlY3RvciBsZW5n
dGg6ICIsIG9iamVjdC0+Z2V0VmVjdG9yTGVuZ3RoKCksICI+IikpKTsKKyAgICAgICAgcmV0dXJu
IGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBBU0NJSUxpdGVyYWwoIjxub3Qgb2JqZWN0PiIpKTsK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCI8QnV0dGVyZmx5
OiAiLCBSYXdQb2ludGVyKG9iamVjdC0+YnV0dGVyZmx5KCkpLCAiOyBwdWJsaWMgbGVuZ3RoOiAi
LCBvYmplY3QtPmdldEFycmF5TGVuZ3RoKCksICI7IHZlY3RvciBsZW5ndGg6ICIsIG9iamVjdC0+
Z2V0VmVjdG9yTGVuZ3RoKCksICI+IikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2xlZXBTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblNsZWVwU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAxKQogICAgICAgICBzbGVlcChleGVjLT5hcmd1bWVu
dCgwKS50b051bWJlcihleGVjKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogY2xhc3MgRnVuY3Rpb25K
U0NTdGFja0Z1bmN0b3IgewpAQCAtMTY0Nyw3ICsxNjQ3LDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmdCdWlsZGVyJiBtX3RyYWNlOwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHRy
YWNlOwogICAgIHRyYWNlLmFwcGVuZExpdGVyYWwoIi0tPiBTdGFjayB0cmFjZTpcbiIpOwpAQCAt
MTY1NSwxNiArMTY1NSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
SlNDCiAgICAgRnVuY3Rpb25KU0NTdGFja0Z1bmN0b3IgZnVuY3Rvcih0cmFjZSk7CiAgICAgZXhl
Yy0+aXRlcmF0ZShmdW5jdG9yKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdHJhY2UudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUm9vdChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSb290KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFJvb3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsK
KyAgICByZXR1cm4gUm9vdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVh
dGVFbGVtZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNyZWF0ZUVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMTY3MiwzNyArMTY3MiwzNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlCiAKICAgICBSb290KiByb290
ID0ganNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9v
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1l
bnQgd2l0aG91dCBhIFJvb3QuIikpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFbGVt
ZW50OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcm9vdCkpOworICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBFbGVtZW50IHdpdGhvdXQgYSBSb290LiIpKSk7
CisgICAgcmV0dXJuIEVsZW1lbnQ6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCByb290KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdl
dEVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R2V0RWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KGV4ZWMtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEVsZW1lbnQq
IHJlc3VsdCA9IHJvb3QtPmVsZW1lbnQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCA/IHJlc3VsdCA6IGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiByZXN1bHQgPyByZXN1
bHQgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBqc0R5bmFtaWNDYXN0
PEVsZW1lbnQqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1p
Y0Nhc3Q8Um9vdCo+KGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZWxlbWVudCAmJiByb290
KQogICAgICAgICBlbGVtZW50LT5zZXRSb290KGV4ZWMtPnZtKCksIHJvb3QpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVTaW1w
bGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFNpbXBsZU9iamVjdDo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVy
biBTaW1wbGVPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0SGlk
ZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMTcxMSwxMiArMTcxMSwxMiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0CiAgICAgU2ltcGxlT2JqZWN0
KiBzaW1wbGVPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFNpbXBsZU9iamVjdCo+KGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIXNpbXBsZU9iamVjdCkpIHsKICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCB1c2Ugb2YgZ2V0
SGlkZGVuVmFsdWUgdGVzdCBmdW5jdGlvbiIpKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Zh
bHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc2ltcGxlT2JqZWN0LT5oaWRkZW5WYWx1ZSgpKTsKKyAgICByZXR1cm4gc2ltcGxlT2Jq
ZWN0LT5oaWRkZW5WYWx1ZSgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMTcyNSwzMyAr
MTcyNSwzMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAgICAg
U2ltcGxlT2JqZWN0KiBzaW1wbGVPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFNpbXBsZU9iamVjdCo+
KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIXNpbXBsZU9iamVjdCkpIHsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxp
ZCB1c2Ugb2Ygc2V0SGlkZGVuVmFsdWUgdGVzdCBmdW5jdGlvbiIpKTsKLSAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIEpTVmFs
dWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBzaW1wbGVPYmplY3QtPnNldEhpZGRl
blZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgSlNPYmplY3QqIGpzVGFyZ2V0ID0gYXNPYmplY3QodGFyZ2V0LmFz
Q2VsbCgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTUHJveHk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzVGFyZ2V0LT5n
ZXRQcm90b3R5cGVEaXJlY3QoKSwgSW1wdXJlUHJveHlUeXBlKTsKICAgICBKU1Byb3h5KiBwcm94
eSA9IEpTUHJveHk6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGpzVGFyZ2V0KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3h5KTsKKyAgICByZXR1cm4gcHJveHk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSdW50aW1lQXJyYXko
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVu
dGltZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBSdW50aW1lQXJyYXkqIGFycmF5ID0gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheSk7CisgICAgcmV0dXJuIGFycmF5Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSW1wdXJlR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0
ZUltcHVyZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjAs
NTAgKzE3NjAsNTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQog
ICAgICAgICBkZWxlZ2F0ZSA9IGFzT2JqZWN0KHRhcmdldC5hc0NlbGwoKSk7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBJbXB1cmVHZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKICAgICBJbXB1cmVHZXR0
ZXIqIHJlc3VsdCA9IEltcHVyZUdldHRlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwg
ZGVsZWdhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlQ3VzdG9tR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBDdXN0b21HZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKICAgICBDdXN0b21HZXR0ZXIqIHJlc3VsdCA9IEN1
c3RvbUdldHRlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVROb2RlT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVE5v
ZGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUTm9kZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgRE9NSklUR2V0dGVyOjpj
cmVhdGUoZXhlYy0+dm0oKSwgRE9NSklUR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSkpKTsKICAgICBET01KSVRO
b2RlKiByZXN1bHQgPSBET01KSVROb2RlOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdl
dHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25DcmVhdGVET01KSVRHZXR0ZXJPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0
dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBqc051bGwoKSk7CiAgICAgRE9NSklUR2V0dGVyKiByZXN1bHQgPSBET01KSVRHZXR0ZXI6
OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQ29tcGxleE9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0
ZXJDb21wbGV4T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVEdldHRlckNvbXBsZXg6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGpzTnVsbCgpKTsKICAgICBET01KSVRHZXR0ZXJDb21wbGV4KiByZXN1bHQgPSBET01KSVRHZXR0
ZXJDb21wbGV4OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKICAgICBET01KSVRGdW5j
dGlvbk9iamVjdCogcmVzdWx0ID0gRE9NSklURnVuY3Rpb25PYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVH
ZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xODExLDc3ICsxODExLDc2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXQKIAogICAgIEpTVmFsdWUgYmFz
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghYmFzZS5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGRlbGVnYXRlID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAgICAgaWYgKCFkZWxlZ2F0ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBJbXB1cmVHZXR0ZXIqIGltcHVyZUdldHRlciA9IGpzRHluYW1pY0Nhc3Q8SW1wdXJlR2V0dGVy
Kj4oYXNPYmplY3QoYmFzZS5hc0NlbGwoKSkpOwogICAgIGlmIChVTkxJS0VMWSghaW1wdXJlR2V0
dGVyKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJhcmd1bWVudCBpcyBub3QgYW4gSW1wdXJlR2V0dGVyIikpOwotICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgaW1wdXJlR2V0
dGVyLT5zZXREZWxlZ2F0ZSh2bSwgYXNPYmplY3QoZGVsZWdhdGUuYXNDZWxsKCkpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NBbmRT
d2VlcChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0Fu
ZFN3ZWVwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihleGVjLT5oZWFwKCktPnNpemVBZnRlckxhc3RGdWxsQ29sbGVj
dGlvbigpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFz
dEZ1bGxDb2xsZWN0aW9uKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXpl
QWZ0ZXJMYXN0RnVsbENvbGxlY3Rpb24oKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLT5o
ZWFwKCktPnNpemVBZnRlckxhc3RGdWxsQ29sbGVjdGlvbigpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdFN5bmMoQ29s
bGVjdGlvblNjb3BlOjpFZGVuKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0aW9uKCkpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Gb3JjZUdDU2xvd1Bh
dGhzKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Gb3JjZUdDU2xv
d1BhdGhzKEV4ZWNTdGF0ZSopCiB7CiAgICAgLy8gSXQncyBiZXN0IGZvciB0aGlzIHRvIGJlIHRo
ZSBmaXJzdCB0aGluZyBjYWxsZWQgaW4gdGhlIAogICAgIC8vIEpTIHByb2dyYW0gc28gdGhlIG9w
dGlvbiBpcyBzZXQgdG8gdHJ1ZSBiZWZvcmUgd2UgSklULgogICAgIE9wdGlvbnM6OmZvcmNlR0NT
bG93UGF0aHMoKSA9IHRydWU7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGV4ZWMtPmhlYXAoKS0+c2l6ZSgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmhlYXAo
KS0+c2l6ZSgpKTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgZ2VuZXJhbGx5IHZlcnkg
aGVscGZ1bCBpbiA2NC1iaXQgY29kZSBhcyB0aGUgdGFnIGFuZCBwYXlsb2FkCiAvLyBzaGFyZSBh
IHJlZ2lzdGVyLiBCdXQgaW4gMzItYml0IEpJVGVkIGNvZGUgdGhlIHRhZyBtYXkgbm90IGJlIGNo
ZWNrZWQgaWYgYW4KIC8vIG9wdGltaXphdGlvbiByZW1vdmVzIHR5cGUgY2hlY2tpbmcgcmVxdWly
ZW1lbnRzLCBzdWNoIGFzIGluID09PS4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25BZGRyZXNzT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQWRkcmVzc09mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgLy8gTmVlZCB0byBjYXN0IHRvIHVpbnQ2NF90IHNvIGJpdHdpc2VfY2Fz
dCB3aWxsIHBsYXkgYWxvbmcuCiAgICAgdWludDY0X3QgYXNOdW1iZXIgPSByZWludGVycHJldF9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc0NlbGwoKSk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJu
VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYXNO
dW1iZXIpKSk7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHJldHVybiBqc051bWJlcihi
aXR3aXNlX2Nhc3Q8ZG91YmxlPihhc051bWJlcikpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0R2V0dGVyU2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IEpTVmFsdWUgcHJvcGVydHkgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIXByb3BlcnR5
LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlTbG90IHNs
b3QodmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwog
ICAgIHZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBhc1N0cmluZyhwcm9wZXJ0eSktPnRvSWRl
bnRpZmllcihleGVjKSwgc2xvdCk7CkBAIC0xODkyLDI2ICsxODkxLDI2IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IGpzTnVsbCgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25W
ZXJzaW9uKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9u
KEV4ZWNTdGF0ZSopCiB7CiAgICAgLy8gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRp
YmlsaXR5IHdpdGggdGhlIE1vemlsbGEgSlMgdGVzdHMgYnV0IGZvciBub3cKICAgICAvLyB3ZSBk
b24ndCBhY3R1YWxseSBkbyBhbnkgdmVyc2lvbi1zcGVjaWZpYyBoYW5kbGluZwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2Fs
RmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291
bGQgbm90IG9wZW4gZmlsZS4iKSkpOwogCiAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKQEAgLTE5MjksMTkgKzE5MjgsMTkg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogCiAgICAgaWYgKGV4
Y2VwdGlvbikgewogICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgc2NvcGUsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFw
c2VkTVMoKSkpOworICAgIHJldHVybiBqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1blN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0
OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSks
IFZlY3RvcjxTdHJpbmc+KCkpOwogCkBAIC0xOTU2LDIyICsxOTU1LDIyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KIAogICAgIGlmIChleGNlcHRpb24pIHsKICAg
ICAgICAgc2NvcGUudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGV4
Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0OwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgVmVjdG9y
PGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShm
aWxlTmFtZSwgc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3Vs
ZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4g
ZmlsZS4iKSkpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKICAgICAKQEAgLTE5NzksMzcgKzE5NzgsMzcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIEpTVmFsdWUgcmVzdWx0ID0g
ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZp
bGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVh
dGlvbkV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV2YWx1
YXRpb25FeGNlcHRpb24pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTG9hZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2FkU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0
cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCiAgICAgTmFrZWRQdHI8RXhj
ZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlQ29kZSwgZXhl
Yy0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24p
OwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmlsZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgYm9vbCBpc0Jp
bmFyeSA9IGZhbHNlOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAg
ICAgIFN0cmluZyB0eXBlID0gZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAodHlwZSAh
PSAiYmluYXJ5IikKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
ICJFeHBlY3RlZCAnYmluYXJ5JyBhcyBzZWNvbmQgYXJndW1lbnQuIik7CiAgICAgICAgIGlzQmlu
YXJ5ID0gdHJ1ZTsKQEAgLTIwMjAsMjYgKzIwMTksMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJlYQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNj
b3BlLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsKIAogICAgIGlmICghaXNCaW5hcnkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihj
b250ZW50KSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihj
b250ZW50KSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlVWludDgpOwogICAgIGF1dG8gbGVu
Z3RoID0gY29udGVudC5zaXplKCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVVpbnQ4
VHlwZWRBcnJheShleGVjLCBzdHJ1Y3R1cmUsIEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMo
Y29udGVudC5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpLCBsZW5ndGgsIFtdICh2b2lkKiBwKSB7
IGZhc3RGcmVlKHApOyB9KSwgMCwgbGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5
bnRheChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVj
a1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmls
ZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFm
ZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKQEAg
LTIwNTIsNzYgKzIwNTEsNzYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZQogCiAgICAgaWYgKCF2YWxpZFN5bnRheCkKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIHN5bnRheEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
c3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFH
UykKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdz
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBs
aW5nRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICB1bnNpZ25lZCBmbGFnID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVy
KGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAg
ICAgICAgIFNhbXBsaW5nRmxhZ3M6OnNldEZsYWcoZmxhZyk7CiAgICAgfQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DbGVhclNhbXBsaW5n
RmxhZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4
ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAg
ICAgIFNhbXBsaW5nRmxhZ3M6OmNsZWFyRmxhZyhmbGFnKTsKICAgICB9Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogI2VuZGlm
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TaGFkb3dDaGlja2VuRnVu
Y3Rpb25zT25TdGFjayhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnNoYWRvd0NoaWNrZW4oKS5mdW5j
dGlvbnNPblN0YWNrKGV4ZWMpKTsKKyAgICByZXR1cm4gZXhlYy0+dm0oKS5zaGFkb3dDaGlja2Vu
KCkuZnVuY3Rpb25zT25TdGFjayhleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBl
eGVjLT52bSgpLnNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
R2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25HZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRv
bSgpLnNlZWQoKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPndlYWtSYW5kb20oKS5zZWVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIHNlZWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQz
MihleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbSgpLnNldFNlZWQoc2VlZCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzUm9wZShFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Jc1JvcGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoIWFyZ3VtZW50LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2Up
OwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIGltcGwgPSBhc1N0cmluZyhhcmd1bWVudCktPnRyeUdl
dFZhbHVlSW1wbCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbXBs
KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbighaW1wbCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4oRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxlclNvdXJjZU9yaWdpbihFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW4gPSBzdGF0ZS0+Y2Fs
bGVyU291cmNlT3JpZ2luKCk7CiAgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhzdGF0ZSwgc291cmNlT3JpZ2luLnN0cmluZygpKSk7CisgICAgICAg
IHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4ganNTdHJpbmcoc3RhdGUsIHNvdXJjZU9yaWdp
bi5zdHJpbmcoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsK
ICAgICBpbnQgYzsKQEAgLTIxMzIsNDcgKzIxMzEsNDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJlYQogICAgICAgICBsaW5lLmFwcGVuZChjKTsKICAgICB9CiAgICAg
bGluZS5hcHBlbmQoJ1wwJyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBsaW5lLmRhdGEoKSkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBsaW5lLmRhdGEo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmVjaXNlVGlt
ZShFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUo
RXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGN1cnJl
bnRUaW1lKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoY3VycmVudFRpbWUoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5ldmVySW5saW5l
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
c2V0TmV2ZXJJbmxpbmUoZXhlYykpOworICAgIHJldHVybiBzZXROZXZlcklubGluZShleGVjKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vREZHKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vREZHKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldE5ldmVyT3B0aW1pemUoZXhl
YykpOworICAgIHJldHVybiBzZXROZXZlck9wdGltaXplKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlm
IChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMt
PmFyZ3VtZW50KDApKSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldE5ldmVy
RlRMT3B0aW1pemUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vT1NSRXhpdEZ1enppbmcoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXRDYW5ub3RVc2VP
U1JFeGl0RnV6emluZyhleGVjKSk7CisgICAgcmV0dXJuIHNldENhbm5vdFVzZU9TUkV4aXRGdXp6
aW5nKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0
aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9wdGltaXplTmV4dEludm9jYXRpb24oZXhlYykpOwor
ICAgIHJldHVybiBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBpbGVz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlck9m
REZHQ29tcGlsZXMoZXhlYykpOworICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKGV4ZWMp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CkBAIC0yMTg0LDEwOCArMjE4Mywx
MDggQEAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mdW5kYW1lbgogICAgIG9wdGlv
bnNPYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNWYWx1ZSh2YWx1ZSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NPcHRpb25zKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogb3B0aW9uc09iamVjdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOwogI2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBk
ZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIFwKICAgICBhZGRPcHRp
b24oZXhlYy0+dm0oKSwgb3B0aW9uc09iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsKICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9P
UFRJT04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvcHRpb25zT2JqZWN0KTsKKyAgICByZXR1cm4gb3B0aW9uc09iamVjdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXph
dGlvblJldHJ5Q291bnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBDb2RlQmxvY2sq
IGJsb2NrID0gZ2V0U29tZUJhc2VsaW5lQ29kZUJsb2NrRm9yRnVuY3Rpb24oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAgICAgCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihibG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIoKSkpOworICAgIHJldHVybiBqc051bWJlcihibG9jay0+cmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25U
cmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTm90IGVub3VnaCBhcmd1bWVudHMiKSkpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpKTsKICAgICAKICAgICBKU0FycmF5QnVm
ZmVyKiBidWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVu
dCgwKSk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiRXhwZWN0ZWQgYW4gYXJyYXkgYnVmZmVyIikpKSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJFeHBl
Y3RlZCBhbiBhcnJheSBidWZmZXIiKSkpOwogICAgIAogICAgIEFycmF5QnVmZmVyQ29udGVudHMg
ZHVtbXlDb250ZW50czsKICAgICBidWZmZXItPmltcGwoKS0+dHJhbnNmZXJUbyhkdW1teUNvbnRl
bnRzKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIGV4ZWMtPnZtKCkuc2V0RmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChF
eGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUq
KQogewogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAg
ICAgLy8gV2l0aG91dCB0aGlzLCBWaXN1YWwgU3R1ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlz
IG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogI2VuZGlmCiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUq
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWJvcnQoRXhlY1N0YXRlKikKIHsKICAg
ICBDUkFTSCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFs
c2UxKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KTsgfQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhbHNlMihFeGVjU3Rh
dGUqKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7IH0KK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhbHNlMShFeGVjU3RhdGUqKSB7IHJldHVybiBqc0Jv
b2xlYW4oZmFsc2UpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTIoRXhl
Y1N0YXRlKikgeyByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsgfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVkMShFeGVjU3RhdGUqKSB7IHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IH0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25VbmRlZmluZWQyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsgfQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bklzSW50MzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VW5kZWZpbmVkMShFeGVjU3RhdGUqKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmluZWQyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7IH0KK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzSW50MzIoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhlYy0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKCFleGVjLT5hcmd1bWVudChpKS5pc0ludDMy
KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
OworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgfQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKKyAgICByZXR1cm4ganNCb29sZWFu
KHRydWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSWRlbnRp
dHkoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+YXJndW1l
bnQoMCkpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JZGVudGl0eShFeGVjU3Rh
dGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOyB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZmZlY3RmdWw0MihFeGVjU3RhdGUqKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWZmZWN0ZnVsNDIoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDQyKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKDQy
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2VNYXNxdWVy
YWRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtl
TWFzcXVlcmFkZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICByZXR1cm4gTWFzcXVlcmFkZXI6OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uSGFzQ3VzdG9tUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKHZh
bHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGFzT2JqZWN0KHZhbHVlKS0+aGFzQ3VzdG9tUHJvcGVydGllcygpKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihhc09iamVjdCh2YWx1ZSktPmhhc0N1c3RvbVByb3BlcnRpZXMoKSk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbihmYWxzZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBleGVjLT52bSgpLmR1bXBUeXBlUHJvZmlsZXJEYXRhKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZpbmRUeXBlRm9y
RXhwcmVzc2lvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25GaW5kVHlwZUZvckV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCkpOwogICAgIGV4ZWMtPnZtKCkudHlwZVBy
b2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgianNjIFRlc3Rpbmcg
QVBJOiBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbiIpKTsKQEAgLTIzMDAsMTAgKzIyOTks
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZpbgogICAgIHVuc2ln
bmVkIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1
YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpKTsKICAgICAKICAg
ICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZv
cm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
Tm9ybWFsLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGV4ZWMtPnZtKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAg
ICByZXR1cm4gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLnR5cGVQcm9maWxlcigpKTsKICAg
ICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxp
dGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rpb25SZXR1cm5UeXBlRm9yIikpOwpAQCAtMjMx
NCwxNyArMjMxMywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0
CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKTsKICAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVy
KCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sIG9mZnNldCwgZXhlY3V0YWJsZS0+c291cmNlSUQo
KSwgZXhlYy0+dm0oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhl
YywganNvblN0cmluZykpOworICAgIHJldHVybiBKU09OUGFyc2UoZXhlYywganNvblN0cmluZyk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9j
a0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwog
ICAgIGV4ZWMtPnZtKCkuY29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1wRGF0YSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNCYXNp
Y0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIoKSk7CiAKQEAgLTIzMzks
MTAgKzIzMzgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhcwog
ICAgIGludCBvZmZzZXQgPSBzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRh
YmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgIAogICAgIGJvb2wgaGFzRXhlY3V0ZWQg
PSBleGVjLT52bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+aGFzQmFzaWNCbG9ja0F0VGV4dE9m
ZnNldEJlZW5FeGVjdXRlZChvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGV4ZWMtPnZt
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGhhc0V4ZWN1dGVkKSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihoYXNFeGVjdXRlZCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25CYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnQoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlv
bkNvdW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgp
LmNvbnRyb2xGbG93UHJvZmlsZXIoKSk7CiAKQEAgLTIzNTcsODcgKzIzNTYsODcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkJhcwogICAgIGludCBvZmZzZXQgPSBzb3Vy
Y2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9m
ZnNldCgpOwogICAgIAogICAgIHNpemVfdCBleGVjdXRpb25Db3VudCA9IGV4ZWMtPnZtKCkuY29u
dHJvbEZsb3dQcm9maWxlcigpLT5iYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnRBdFRleHRPZmZzZXQo
b2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBleGVjLT52bSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoZXhlY3V0aW9uQ291bnQpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZShleGVjdXRpb25Db3VudCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopCiB7CiAgICAgT3B0
aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpID0gdHJ1ZTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRyYWluTWljcm90YXNrcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgZXhlYy0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSXMz
MkJpdFBsYXRmb3JtKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25J
czMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKikKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTRmFsc2UpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTRmFsc2UpOwogI2Vsc2UKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU1RydWUpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTVHJ1ZSk7CiAjZW5kaWYKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZp
bGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxk
IG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0g
bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGZpbGVOYW1lKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKICAgICBKU0Z1bmN0aW9uKiBlcnJv
ckhhbmRsZXIgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgMSwgU3RyaW5nKCksIFsmXShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAg
ICAgZXJyb3IgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fSk7CiAKICAgICBwcm9taXNlLT50aGVuKGV4ZWMsIG51bGxwdHIsIGVycm9ySGFuZGxlcik7CiAg
ICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVp
bHRpbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVh
dGVCdWlsdGluKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBhc1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKSktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1
bmN0aW9uVGV4dCwgeyB9KTsKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBjcmVhdGVCdWlsdGluRXhlY3V0YWJsZSh2bSwgc291cmNl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsIENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCktPmxpbmsodm0sIHNvdXJjZSks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGZ1bmMpOworICAgIHJldHVybiBmdW5jOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlR2xvYmFsT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigpKSk7CisgICAgcmV0dXJuIEdsb2JhbE9i
amVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxs
KCkpLCBWZWN0b3I8U3RyaW5nPigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1dU
RlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3Rv
cFdhdGNoIHN0b3BXYXRjaDsKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKQEAgLTI0NDcsMjAgKzI0
NDYsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIHN0
b3BXYXRjaC5zdG9wKCk7CiAKICAgICBpZiAoIXZhbGlkU3ludGF4KQotICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCJT
eW50YXhFcnJvcjogIiwgZXJyb3IubWVzc2FnZSgpLCAiOiIsIGVycm9yLmxpbmUoKSkpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMo
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCB0b1N0cmluZygiU3ludGF4RXJyb3I6ICIsIGVycm9yLm1lc3NhZ2Uo
KSwgIjoiLCBlcnJvci5saW5lKCkpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0b3BXYXRjaC5n
ZXRFbGFwc2VkTVMoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIoRXhl
Y1N0YXRlKikKIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTQzo6SlNWYWx1ZTo6SlNUcnVlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU1RydWUpOwogI2Vsc2UKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU0ZhbHNlKSk7CisgICAgcmV0dXJuIEpT
VmFsdWUoSlNDOjpKU1ZhbHVlOjpKU0ZhbHNlKTsKICNlbmRpZgogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMjQ3MCw1MyArMjQ2OSw1MyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuCiAgICAgc25hcHNob3RCdWlsZGVyLmJ1aWxkU25hcHNo
b3QoKTsKIAogICAgIFN0cmluZyBqc29uU3RyaW5nID0gc25hcHNob3RCdWlsZGVyLmpzb24oKTsK
LSAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4
ZWMsIGpzb25TdHJpbmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTT05QYXJzZShleGVjLCBq
c29uU3RyaW5nKTsKICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25SZXNldFN1cGVyU2FtcGxlclN0YXRlKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25SZXNldFN1cGVyU2FtcGxlclN0YXRlKEV4ZWNTdGF0ZSopCiB7CiAgICAgcmVz
ZXRTdXBlclNhbXBsZXJTdGF0ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpKQogICAgICAgICAgICAgb2JqZWN0
LT5lbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSk7CiAgICAgfQotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgU2FtcGxpbmdQcm9maWxlciYgc2FtcGxpbmdQcm9maWxlciA9IGV4
ZWMtPnZtKCkuZW5zdXJlU2FtcGxpbmdQcm9maWxlcihXVEY6OlN0b3B3YXRjaDo6Y3JlYXRlKCkp
OwogICAgIHNhbXBsaW5nUHJvZmlsZXIubm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9u
VGhyZWFkKCk7CiAgICAgc2FtcGxpbmdQcm9maWxlci5zdGFydCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVy
U3RhY2tUcmFjZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmICghdm0uc2FtcGxpbmdQcm9maWxlcigpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIlNhbXBsaW5nIHByb2ZpbGVyIHdhcyBuZXZlciBzdGFydGVkIikp
KSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJTYW1wbGluZyBwcm9maWxlciB3YXMgbmV2ZXIgc3RhcnRl
ZCIpKSk7CiAKICAgICBTdHJpbmcganNvblN0cmluZyA9IHZtLnNhbXBsaW5nUHJvZmlsZXIoKS0+
c3RhY2tUcmFjZXNBc0pTT04oKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVl
OjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKTsKICAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTWF4QXJndW1lbnRzKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKEpTQzo6
bWF4QXJndW1lbnRzKTsKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKQEAgLTI2MTEsNyAr
MjYxMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCAKIAogLy8g
dGVzdFdhc21Nb2R1bGUoSlNBcnJheUJ1ZmZlclZpZXcgc291cmNlLCBudW1iZXIgZnVuY3Rpb25D
b3VudCwgLi4uW1tXYXNtVmFsdWUsIFtXYXNtVmFsdWVdXV0pIHdoZXJlIHRoZSBpdGggY29weSBv
ZiBbW3Jlc3VsdCwgW2FyZ3NdXV0gaXMgYSBsaXN0CiAvLyBvZiBhcmd1bWVudHMgdG8gYmUgcGFz
c2VkIHRvIHRoZSBpdGggd2FzbSBmdW5jdGlvbiBhcyB3ZWxsIGFzIHRoZSBleHBlY3RlZCByZXN1
bHQuIFdhc21WYWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCAidHlwZSIgYW5kICJ2YWx1ZSIgcHJvcGVy
dGllcy4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdh
c21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTI2OTMsNyArMjY5Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBlbmNv
ZGVkSlNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFQkxZKQpAQCAtMjkyNiwxMiArMjkyNSwxMiBAQCBzdGF0aWMgYm9v
bCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24q
IGZ1bGZpbGxIYW5kbGVyID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDEsIFN0cmluZygpLCBbJiwgaXNMYXN0RmlsZV0oRXhlY1N0YXRlKiBleGVjKSB7CiAg
ICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgZmFsc2UsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIHJlamVjdEhhbmRsZXIgPSBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsm
LCBpc0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAgICAgICAgICAgICBjaGVja0V4
Y2VwdGlvbihpc0xhc3RGaWxlLCB0cnVlLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAg
ICBwcm9taXNlLT50aGVuKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmdWxmaWxsSGFuZGxl
ciwgcmVqZWN0SGFuZGxlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNh
bGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSUNhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsMTMgKzM2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgQVBJQ2FsbGJh
Y2tGdW5jdGlvbiB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSopOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChFeGVjU3RhdGUq
KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGwoRXhlY1N0YXRlKik7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3QoRXhlY1N0YXRlKik7CiAKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9u
OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNh
bGxiYWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NjcsMTMgKzY3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sK
IAogICAgIC8vIHJlc3VsdCBtdXN0IGJlIGEgdmFsaWQgSlNWYWx1ZS4KICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgcmVzdWx0KSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgcmVzdWx0KTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNh
bGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTcsMTUgKzk3LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKICAgICAgICAgfQogICAgICAgICBpZiAoZXhjZXB0aW9u
KSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBl
eGNlcHRpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVj
LCBleGNlcHRpb24pKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV4Y2VwdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgLy8gcmVzdWx0IG11c3QgYmUgYSB2YWxpZCBKU1ZhbHVlLgog
ICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKHJlc3Vs
dCkpOworICAgICAgICByZXR1cm4gdG9KUyhyZXN1bHQpOwogICAgIH0KICAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgMCkpKTsKKyAgICByZXR1
cm4gdG9KUyhKU09iamVjdE1ha2UoY3R4LCBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4o
Y29uc3RydWN0b3IpLT5jbGFzc1JlZigpLCAwKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjI0LDEyICsyMjQsMTIgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNDYWxsYmFj
a09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1ZhbHVlKTsKICAgICBzdGF0aWMgSlNDYWxsYmFj
a09iamVjdCogYXNDYWxsYmFja09iamVjdChFbmNvZGVkSlNWYWx1ZSk7CiAgCi0gICAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsKLSAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoRXhlY1N0YXRlKik7Cisg
ICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSopOworICAgIHN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEV4ZWNTdGF0ZSopOwogICAgCiAg
ICAgSlNWYWx1ZSBnZXRTdGF0aWNWYWx1ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAg
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7
CisgICAgc3RhdGljIEpTVmFsdWUgc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBjYWxsYmFja0dldHRlcihF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PEpTQ2FsbGJhY2tPYmplY3REYXRhPiBtX2NhbGxiYWNrT2JqZWN0RGF0YTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDIxLDcgKzQy
MSw3IEBAIENvbnN0cnVjdFR5cGUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjoKIH0KIAogdGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KLUVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NDQ1LDEyICs0NDUsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gZ2V0Q29uc3RydWN0RGF0YSBzaG91bGQgcHJldmVudCB1cyBm
cm9tIHJlYWNoaW5nIGhlcmUKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KQEAgLTQ5NCw3
ICs0OTQsNyBAQCBDYWxsVHlwZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldENhCiB9CiAK
IHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmNhbGwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTE4LDEy
ICs1MTgsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gZ2V0Q2FsbERhdGEgc2hvdWxkIHByZXZlbnQgdXMgZnJvbSByZWFjaGlu
ZyBoZXJlCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIHJldHVy
biB7IH07CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkBAIC02MjYsNyArNjI2LDcgQEAg
SlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldFN0YQogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgUGFyZW50PgotRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpz
dGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0pTVmFsdWUgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NjM2LDcgKzYzNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoK
ICAgICAvLyBDaGVjayBmb3IgY2FjaGVkIG9yIG92ZXJyaWRlIHByb3BlcnR5LgogICAgIFByb3Bl
cnR5U2xvdCBzbG90Mih0aGlzT2JqLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5KTsKICAgICBpZiAoUGFyZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iaiwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90MikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2xvdDIuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHJldHVybiBz
bG90Mi5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaWYgKFN0cmluZ0ltcGwq
IG5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsKICAgICAgICAgZm9yIChKU0NsYXNzUmVmIGpz
Q2xhc3MgPSB0aGlzT2JqLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+
cGFyZW50Q2xhc3MpIHsKQEAgLTY0NSwxOCArNjQ1LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50PjoKICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsQXNGdW5jdGlvbiA9IGVudHJ5LT5jYWxsQXNGdW5jdGlv
bikgewogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9u
LCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPnB1dERpcmVjdCh2bSwg
cHJvcGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG8pOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG87CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIlN0YXRpYyBmdW5jdGlvbiBwcm9wZXJ0eSBkZWZpbmVkIHdpdGggTlVMTCBj
YWxsQXNGdW5jdGlvbiBjYWxsYmFjay4iKSkpKTsKKyAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiU3Rh
dGljIGZ1bmN0aW9uIHByb3BlcnR5IGRlZmluZWQgd2l0aCBOVUxMIGNhbGxBc0Z1bmN0aW9uIGNh
bGxiYWNrLiIpKSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC02NzksMTUgKzY3OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlm
IChleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
c2NvcGUsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UyhleGVjLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB2
YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImhhc1Byb3BlcnR5IGNhbGxiYWNrIHJldHVybmVkIHRy
dWUgZm9yIGEgcHJvcGVydHkgdGhhdCBkb2Vzbid0IGV4aXN0LiIpKSkpOworICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJoYXNQcm9wZXJ0eSBjYWxsYmFjayByZXR1cm5lZCB0cnVlIGZvciBhIHByb3Bl
cnR5IHRoYXQgZG9lc24ndCBleGlzdC4iKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNDEsOCAr
MTE0MSw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAg
ICAgICAgIC8vIHRvIG1ha2Ugc29tZSBzcGFjZSBoZXJlLgogICAgICAgICAgICAgaml0Lm1ha2VT
cGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCi0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRK
U1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGdldHRlcjogSlNWYWx1ZSAoKkdldFZhbHVlRnVu
YykoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBDdXN0b20gdmFsdWVz
IGFyZSBwYXNzZWQgdGhlIHNsb3RCYXNlICh0aGUgcHJvcGVydHkgaG9sZGVyKSwgY3VzdG9tIGFj
Y2Vzc29ycyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1bGUgKHJlY2lldmVyKS4KICAgICAgICAgICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBj
dXN0b20gYWNjZXNzb3JzLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1ODAxNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODM4LDcgKzgzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UmUKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVu
dCk7CiAgICAgCiAgICAgaWYgKCFiYXNlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKIAog
ICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAg
IEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFpbnB1dCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCShyZXZpc2lvbiAy
MTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCi10eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24p
KEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNT
dGF0ZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDIwICszOCwyMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5
cGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25EZXRhaWxzKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyhFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0
UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVG
dW5jdGlvblByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vh
a01hcFNpemUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcEVudHJpZXMoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVk
U2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3Rv
dHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
SXRlcmF0b3JFbnRyaWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0
aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3VidHlwZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90
b3R5cGVGdW5jdGlvbkZ1bmN0aW9uRGV0YWlscyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldElu
dGVybmFsUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkludGVybmFsQ29uc3RydWN0
b3JOYW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVj
dGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXNIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25X
ZWFrTWFwU2l6ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBFbnRyaWVzKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrU2V0
RW50cmllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkl0ZXJhdG9yRW50cmllcyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90
b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOwogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRl
KEV4ZWNTdGF0ZSopOwogCiBjb25zdCBDbGFzc0luZm8gSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIkluamVjdGVkU2NyaXB0SG9zdCIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUpIH07CiAK
QEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZTo6Zmlu
aQogICAgIEpTQ19OQVRJVkVfR0VUVEVSKCJldmFsdWF0ZSIsIGpzSW5qZWN0ZWRTY3JpcHRIb3N0
UHJvdG90eXBlQXR0cmlidXRlRXZhbHVhdGUsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
QXR0cmlidXRlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlQXR0cmlidXRlRXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODcsMTAgKzg3LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZXZhbHVhdGUoZXhlYykpOworICAgIHJldHVybiBjYXN0
ZWRUaGlzLT5ldmFsdWF0ZShleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSW50ZXJuYWxDb25zdHJ1Y3Rv
ck5hbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmludGVybmFsQ29uc3RydWN0b3JOYW1lKGV4ZWMp
KTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+aW50ZXJuYWxDb25zdHJ1Y3Rvck5hbWUoZXhlYyk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbklzSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25J
c0hUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEx
MywxMCArMTEzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMK
ICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXNI
VE1MQWxsQ29sbGVjdGlvbihleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmlzSFRNTEFs
bENvbGxlY3Rpb24oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTEyNiwxMCArMTI2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+cHJveHlUYXJnZXRWYWx1ZShleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMt
PnByb3h5VGFyZ2V0VmFsdWUoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBTaXplKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMTM5LDEwICsxMzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT53ZWFrTWFwU2l6ZShleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPndlYWtNYXBT
aXplKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrTWFwRW50cmllcyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvbldlYWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1
MiwxMCArMTUyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMK
ICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+d2Vh
a01hcEVudHJpZXMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT53ZWFrTWFwRW50cmll
cyhleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2Ny
aXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25X
ZWFrU2V0U2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjUsMTAgKzE2
NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYg
KCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPndlYWtTZXRTaXpl
KGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+d2Vha1NldFNpemUoZXhlYyk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGVGdW5jdGlvbldlYWtTZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJp
ZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTc4LDEwICsxNzgsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVk
VGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT53ZWFrU2V0RW50cmllcyhleGVj
KSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPndlYWtTZXRFbnRyaWVzKGV4ZWMpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
RnVuY3Rpb25JdGVyYXRvckVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JdGVyYXRvckVudHJp
ZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTkxLDEwICsxOTEsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVk
VGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pdGVyYXRvckVudHJpZXMoZXhl
YykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5pdGVyYXRvckVudHJpZXMoZXhlYyk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
RXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjA0LDEwICsyMDQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihleGVjKSk7CisgICAgcmV0dXJuIGNhc3Rl
ZFRoaXMtPmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25T
dWJ0eXBlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVk
U2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3VidHlwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0yMTcsMTAgKzIxNywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPnN1YnR5cGUoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5zdWJ0
eXBlKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MjMwLDEwICsyMzAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVk
UwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5m
dW5jdGlvbkRldGFpbHMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5mdW5jdGlvbkRl
dGFpbHMoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyhFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90
b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0yNDMsNyArMjQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YXN0ZWRUaGlzLT5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXhlYykpOworICAgIHJldHVybiBjYXN0
ZWRUaGlzLT5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3
LDE5ICszNywxOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIC8vIEZ1bmN0aW9ucy4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRoU2NvcGVFeHRl
bnNpb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxs
RnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQ
cm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKEV4ZWNTdGF0ZSopOwogCiAvLyBBdHRy
aWJ1dGVzLgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0
Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFT
Y3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVMaW5lKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1u
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZh
U2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25OYW1lKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmli
dXRlU2NvcGVDaGFpbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVRoaXNPYmplY3QoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxs
RnJhbWVBdHRyaWJ1dGVUeXBlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lSXNUYWlsRGVsZXRlZChFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0
cmlidXRlQ2FsbGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVTb3VyY2VJRChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGlu
ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0
Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVGdW5jdGlvbk5hbWUoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxG
cmFtZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVRoaXNPYmplY3QoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZVR5cGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzSmF2YVNjcmlwdENhbGxGcmFtZUlzVGFpbERlbGV0ZWQoRXhlY1N0YXRlKik7CiAKIGNvbnN0
IENsYXNzSW5mbyBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkph
dmFTY3JpcHRDYWxsRnJhbWUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZSkgfTsKIApAQCAtNzMsNyArNzMsNyBAQCB2
b2lkIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZTo6ZmluCiAgICAgSlNDX05BVElWRV9H
RVRURVIoImlzVGFpbERlbGV0ZWQiLCBqc0phdmFTY3JpcHRDYWxsRnJhbWVJc1RhaWxEZWxldGVk
LCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3Bl
RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFT
Y3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9u
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgzLDEwICs4MywxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlz
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5z
aW9uKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+ZXZhbHVhdGVXaXRoU2NvcGVFeHRl
bnNpb24oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90
eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC05NiwxMCArOTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0ph
dmFTY3JpcAogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5zY29wZURlc2NyaXB0aW9ucyhleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnNj
b3BlRGVzY3JpcHRpb25zKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNhbGxlcihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVy
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEwOSwxMCArMTA5LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRo
aXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y2FsbGVyKGV4ZWMpKTsKKyAgICBy
ZXR1cm4gY2FzdGVkVGhpcy0+Y2FsbGVyKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNvdXJjZUlEKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRy
aWJ1dGVTb3VyY2VJRChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjIsMTAg
KzEyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAg
aWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnNvdXJjZUlE
KGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+c291cmNlSUQoZXhlYyk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRl
TGluZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0
Q2FsbEZyYW1lQXR0cmlidXRlTGluZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0xMzUsMTAgKzEzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNj
cmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PmxpbmUoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5saW5lKGV4ZWMpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0
ZUNvbHVtbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE0OCwxMCArMTQ4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNK
YXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+Y29sdW1uKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+Y29sdW1uKGV4ZWMp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25OYW1lKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2MSwxMCArMTYxLDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZnVuY3Rpb25OYW1lKGV4ZWMpKTsKKyAgICByZXR1
cm4gY2FzdGVkVGhpcy0+ZnVuY3Rpb25OYW1lKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTc0LDEwICsxNzQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3Jp
cAogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5z
Y29wZUNoYWluKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+c2NvcGVDaGFpbihleGVj
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJh
bWVBdHRyaWJ1dGVUaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUaGlzT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE4NywxMCArMTg3LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGhpc09iamVjdChleGVjKSk7CisgICAgcmV0dXJuIGNh
c3RlZFRoaXMtPnRoaXNPYmplY3QoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlVHlwZShFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlVHlw
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMDAsMTAgKzIwMCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRU
aGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnR5cGUoZXhlYykpOworICAgIHJl
dHVybiBjYXN0ZWRUaGlzLT50eXBlKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUlzVGFpbERlbGV0ZWQoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUlzVGFpbERlbGV0
ZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjEzLDcgKzIxMyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRo
aXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXNUYWlsRGVsZXRlZChleGVjKSk7
CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmlzVGFpbERlbGV0ZWQoZXhlYyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MywgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0MiwxMCArMTQyLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tU
eXBlKTsKICAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoVk0mLCBj
b25zdCBWZWN0b3I8U3RhY2tGcmFtZT4mKTsKIAotICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
KTsKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9y
Q29uc3RydWN0b3IoRXhlY1N0YXRlKik7Ci0gICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSopOwotICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTmF0
aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRXJyb3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUo
Q2FsbEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxOSw3ICs4MTksNyBAQCBz
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIGlmIChjYWxs
VHlwZSA9PSBDYWxsVHlwZTo6SG9zdCkgewogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOworICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24oZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAg
ICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKQEAgLTg0OCw3ICs4
NDgsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgaWYg
KGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6SG9zdCkgewogICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxl
ZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS0+aG9zdENhbGxSZXR1
cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKSk7CisgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCiAg
ICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEyMzUsNyArMTIzNSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpI
b3N0KSB7CiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Y0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2Fs
bGVlKSk7Ci0gICAgICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAgICB2
bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxs
ZWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2Fs
bGVlLCBleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSk7CiAgICAgICAgIH0KQEAgLTEyNTgsNyArMTI1OCw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RU
eXBlOjpIb3N0KSB7CiAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxl
ZSkpOwotICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgdm0uaG9z
dENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxs
ZWUpOwogCiAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWNDYWxsZWUsIGV4ZWNDYWxsZWUs
IExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExMjYsNyArMTEyNiw3IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAg
ICMgaGF2ZSBhIGZpeGVkIHByb3RvdHlwZSBvZiAxIGFyZ3M6IHRoZSBwYXNzZWQgRXhlY1N0YXRl
LgogICAgICAgICB3aGVuICJjbG9vcENhbGxOYXRpdmUiCiAgICAgICAgICAgICAkYXNtLnB1dGMg
Im5hdGl2ZUZ1bmMgPSAje29wZXJhbmRzWzBdLmNsVmFsdWUoOm5hdGl2ZUZ1bmMpfTsiCi0gICAg
ICAgICAgICAkYXNtLnB1dGMgImZ1bmN0aW9uUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
bmF0aXZlRnVuYyh0MC5leGVjU3RhdGUpKTsiCisgICAgICAgICAgICAkYXNtLnB1dGMgImZ1bmN0
aW9uUmV0dXJuVmFsdWUgPSBuYXRpdmVGdW5jKHQwLmV4ZWNTdGF0ZSk7IgogICAgICAgICAgICAg
JGFzbS5wdXRjICIjaWYgVVNFKEpTVkFMVUUzMl82NCkiCiAgICAgICAgICAgICAkYXNtLnB1dGMg
IiAgICB0MS5pID0gZnVuY3Rpb25SZXR1cm5WYWx1ZS50YWcoKTsiCiAgICAgICAgICAgICAkYXNt
LnB1dGMgIiAgICB0MC5pID0gZnVuY3Rpb25SZXR1cm5WYWx1ZS5wYXlsb2FkKCk7IgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDExLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwg
MjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAgLTk0LDEw
ICs5NCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0QXJyYXlXaXRoCiAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgYXJncywg
bmV3VGFyZ2V0KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGV4ZWMsIGFyZ3MsIGV4ZWMtPm5ld1Rh
cmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBh
cmdzLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgQXJyYXlDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQpAQCAtMTA2LDEwICsxMDYsMTAgQEAgQ29uc3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9y
OjpnZXRDb25zdAogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxBcnJheUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgYXJn
cywgSlNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhl
eGVjLCBhcmdzLCBKU1ZhbHVlKCkpOwogfQogCiBDYWxsVHlwZSBBcnJheUNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkBAIC0xNTAsMTUgKzE1MCwx
NSBAQCBib29sIGlzQXJyYXlTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJveHlPCiAKIC8vIEVTNiA3
LjIuMgogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheQotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0Fy
cmF5U2xvdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25z
dHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheVNsb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFT
U0VSVChqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0FycmF5U2xvd0lubGluZShleGVj
LCBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKSk7Cisg
ICAgcmV0dXJuIGpzQm9vbGVhbihpc0FycmF5U2xvd0lubGluZShleGVjLCBqc0Nhc3Q8UHJveHlP
YmplY3QqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3Ry
dWN0b3JQcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxBcnJheUNv
bnN0cnVjdG9yKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbihqc0R5bmFtaWNDYXN0PEFycmF5Q29uc3RydWN0b3IqPihleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIx
MDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOCwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Miw4ICs2Miw4IEBA
IHByaXZhdGU6CiAKIEpTVmFsdWUgY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWNTdGF0
ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbGVu
Z3RoLCBKU1ZhbHVlIHByb3RvdHlwZSA9IEpTVmFsdWUoKSk7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVj
dG9yUHJpdmF0ZUZ1bmNJc0FycmF5U2xvdyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5Q29uc3RydWN0b3IoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5j
SXNBcnJheVNsb3coRXhlY1N0YXRlKik7CiBib29sIGlzQXJyYXlTbG93KEV4ZWNTdGF0ZSosIFBy
b3h5T2JqZWN0KiBhcmd1bWVudCk7CiAKIC8vIEVTNiA3LjIuMgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNy0yMDA5LCAyMDExLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA5LCAyMDExLCAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNDgsMTcg
KzQ4LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1No
aWZ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNT
dGF0ZSopOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXlQcm90b3R5
cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0zODIsNyArMzgyLDcgQEAgdm9p
ZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgIH0KIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM5MCwxMSArMzkwLDExIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIC8vIDEuIExldCBhcnJheSBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICAvLyAyLiBMZXQgZnVuYyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGFycmF5IHdp
dGggYXJndW1lbnQgImpvaW4iLgogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBKU1ZhbHVlKHRoaXNP
YmplY3QpLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5qb2luKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMy4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxz
ZSwgdGhlbiBsZXQgZnVuYyBiZSB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kIE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcgKDE1LjIuNC4yKS4KICAgICBib29sIGN1c3RvbUpvaW5DYXNlID0g
ZmFsc2U7CkBAIC00MDcsMTMgKzQwNywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAKICAgICBpZiAoVU5MSUtFTFkoY3VzdG9tSm9pbkNhc2UpKSB7CiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJbb2JqZWN0ICIsIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Y2xhc3NOYW1lKHRoaXNPYmplY3QpLCAiXSIpKTsKKyAgICAgICAgcmV0dXJuIGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiwgdGhpc09iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5jbGFzc05hbWUodGhpc09iamVjdCksICJdIik7CiAgICAgfQogCiAgICAgLy8g
NC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0
aG9kIG9mIGZ1bmMgcHJvdmlkaW5nIGFycmF5IGFzIHRoZSB0aGlzIHZhbHVlIGFuZCBhbiBlbXB0
eSBhcmd1bWVudHMgbGlzdC4KICAgICBpZiAoIWlzSlNBcnJheSh0aGlzT2JqZWN0KSB8fCBjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gIT0gYXJy
YXlQcm90b0Z1bmNKb2luKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgICAgIHJldHVybiBjYWxs
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKICAgICB9CiAKICAgICBBU1NFUlQoaXNKU0FycmF5KHRoaXNWYWx1ZSkpOwpA
QCAtNDI0LDg2ICs0MjQsODYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkp
OwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZh
bHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5
UmV0dXJuVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJuVmFsdWU7CiAKICAgICBKU1N0cmlu
Z0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5
KGkpOwogICAgICAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlz
QXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVt
ZW50KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpv
aW4oKmV4ZWMpKTsKKyAgICByZXR1cm4gam9pbmVyLmpvaW4oKmV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogCiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkp
OwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJu
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJuVmFsdWU7CiAKICAgICBKU1N0cmluZ0pvaW5l
ciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAgQXJnTGlzdCBhcmd1bWVudHMoZXhl
Yyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4
ZWMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0
aW9uID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAg
ICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAg
aWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVu
dCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVs
ZW1lbnQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgfQogI2Vsc2UgLy8gIUVOQUJMRShJTlRMKQogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVu
Y3Rpb24gPSBlbGVtZW50LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmlu
Zyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShj
b252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENh
bGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJz
aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0
KCkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAjZW5kaWYgLy8gIUVO
QUJMRShJTlRMKQogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMpKTsKKyAgICByZXR1cm4gc3RyaW5nSm9pbmVy
LmpvaW4oKmV4ZWMpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2YWx1
ZSkKQEAgLTY2Miw3ICs2NjIsNyBAQCBnZW5lcmFsQ2FzZToKICAgICByZXR1cm4gam9pbmVyLmpv
aW4oc3RhdGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY3MSwxNiArNjcx
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAh
dGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7CiAgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYg
KEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOworICAgICAg
ICByZXR1cm4gZWFybHlSZXR1cm5WYWx1ZTsKIAogICAgIC8vIDIuIExldCBsZW4gYmUgPyBUb0xl
bmd0aCg/IEdldChPLCAibGVuZ3RoIikpLgogICAgIGRvdWJsZSBsZW5ndGggPSB0b0xlbmd0aChl
eGVjLCB0aGlzT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
Ly8gMy4gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgbGV0IHNlcGFyYXRvciBiZSB0aGUgc2lu
Z2xlLWVsZW1lbnQgU3RyaW5nICIsIi4KICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CkBAIC02OTEsMzkgKzY5MSwzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CiAgICAgICAgICAgICBKU1N0cmluZyog
anNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Ci0gICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
d0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJhdG9yLCBsZW5ndGg2NCkpOworICAgICAg
ICAgICAgcmV0dXJuIHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVu
Z3RoNjQpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgdW5zaWduZWRMZW5ndGggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGRvdWJsZT4odW5zaWduZWRMZW5ndGgpID09IGxlbmd0aCk7CiAKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZhc3RKb2luKCpleGVjLCB0
aGlzT2JqZWN0LCB7ICZjb21tYSwgMSB9LCB1bnNpZ25lZExlbmd0aCkpOworICAgICAgICByZXR1
cm4gZmFzdEpvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIHsgJmNvbW1hLCAxIH0sIHVuc2lnbmVkTGVu
Z3RoKTsKICAgICB9CiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJpbmcoc2VwYXJhdG9y
KS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKFVOTElLRUxZ
KGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB8fCAhY2FuVXNl
RmFzdEpvaW4odGhpc09iamVjdCkpKSB7CiAgICAgICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxk
b3VibGU+KGxlbmd0aDY0KSA9PSBsZW5ndGgpOwogCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG93Sm9pbigqZXhlYywgdGhpc09iamVj
dCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CisgICAgICAgIHJldHVybiBzbG93Sm9pbigqZXhl
YywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KTsKICAgICB9CiAKICAgICBhdXRv
IHZpZXdXaXRoU3RyaW5nID0ganNTZXBhcmF0b3ItPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygq
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZhc3RKb2luKCpleGVjLCB0aGlzT2Jq
ZWN0LCB2aWV3V2l0aFN0cmluZy52aWV3LCBsZW5ndGgpKTsKKyAgICByZXR1cm4gZmFzdEpvaW4o
KmV4ZWMsIHRoaXNPYmplY3QsIHZpZXdXaXRoU3RyaW5nLnZpZXcsIGxlbmd0aCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTczMiwzNiArNzMyLDM2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVl
KSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoZXhlYykpOworICAgICAgICByZXR1cm4gYXNB
cnJheSh0aGlzVmFsdWUpLT5wb3AoZXhlYyk7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCi0gICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihs
ZW5ndGgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSByZXN1
bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgbGVuZ3RoIC0gMSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggLSAxKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVU
b0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBw
dXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NzEsMTUgKzc3MSwxNSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
YXNBcnJheSh0aGlzVmFsdWUpOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGFy
cmF5LT5wdXNoKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSk7CiAgICAgfQogICAgIAogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNj
b3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmop
KQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBl
eGVjLT5hcmd1bWVudENvdW50KCk7IG4rKykgewogICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdl
ciBvdmVyZmxvdzsgd2hlcmUgc2FmZSB3ZSBjYW4gZG8gYSBmYXN0IHB1dCBieSBpbmRleC4KQEAg
LTc5MCwxNiArNzkwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0
aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZXhlYykpOwogICAgICAgICAgICAgdGhp
c09iai0+bWV0aG9kVGFibGUodm0pLT5wdXQodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUgbmV3
TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcHV0
TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBuZXdMZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUobmV3TGVuZ3RoKTsKKyAgICByZXR1cm4gbmV3TGVuZ3RoOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgwNywxMCArODA3LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAg
aWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVl
KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5n
dGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtODIyLDcgKzgyMiw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKGNvbnRhaW5zSG9sZShk
YXRhLCBsZW5ndGgpICYmIGhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSgqZXhlYywgdGhpc09i
amVjdCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgc3RkOjpyZXZlcnNlKGRhdGEsIGRh
dGEgKyBsZW5ndGgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3Qp
OworICAgICAgICByZXR1cm4gdGhpc09iamVjdDsKICAgICB9CiAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0
LT5idXR0ZXJmbHkoKTsKQEAgLTgzMiw3ICs4MzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChjb250YWluc0hvbGUoZGF0YSwgbGVuZ3Ro
KSAmJiBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUoKmV4ZWMsIHRoaXNPYmplY3QpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIHN0ZDo6cmV2ZXJzZShkYXRhLCBkYXRhICsgbGVuZ3Ro
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3Q7CiAgICAgfQogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgYXV0byYgc3RvcmFnZSA9ICp0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CkBAIC04NDIsNyArODQyLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGF1dG8gZGF0YSA9IHN0b3JhZ2UudmVjdG9yKCkuZGF0YSgpOwogICAgICAgICBzdGQ6OnJldmVy
c2UoZGF0YSwgZGF0YSArIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhpc09iamVjdCk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0OwogICAgIH0KICAgICB9CiAK
QEAgLTg1MCw3NSArODUwLDc1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2Vy
KyspIHsKICAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAg
ICAgIGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dl
cik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBKU1Zh
bHVlIGxvd2VyVmFsdWU7CiAgICAgICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAg
bG93ZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBsb3dlcik7Ci0gICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBi
b29sIHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgSlNWYWx1ZSB1
cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHVwcGVy
VmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBwZXIpOwotICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHVw
cGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4
ZWMsIGxvd2VyLCB1cHBlclZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGxvd2VyKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2Vzcykp
IHsKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUs
IHRydWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
dXBwZXIpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9w
ZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QpOworICAgIHJldHVybiB0
aGlzT2JqZWN0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRv
T2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2Jq
KTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoKSk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0
SW5kZXgoZXhlYywgMCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzaGlm
dDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDEsIDAsIGxl
bmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGggLSAx
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTbGlj
ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNT
bGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5uZXRzY2Fw
ZS5jb20vZG9jcy9tYW51YWxzL2pzL2NsaWVudC9qc3JlZi9hcnJheS5odG0jMTE5MzcxMyBvciAx
NS40LjQuMTAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtOTI2LDI2ICs5MjYsMjYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5n
dGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgdW5zaWdu
ZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5n
dGgsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHN0ZDo6
cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09iaiwgZW5kIC0gYmVnaW4pOwogICAgIC8v
IFdlIGNhbiBvbmx5IGdldCBhbiBleGNlcHRpb24gaWYgd2UgY2FsbCBzb21lIHVzZXIgZnVuY3Rp
b24uCiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKFVOTElL
RUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0
aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBib29sIG9rVG9Eb0Zhc3RQYXRoID0gc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYg
bGVuZ3RoID09IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIGlmIChMSUtFTFkob2tUb0RvRmFzdFBhdGgpKSB7CiAgICAgICAgIGlm
IChKU0FycmF5KiByZXN1bHQgPSBhc0FycmF5KHRoaXNPYmopLT5mYXN0U2xpY2UoKmV4ZWMsIGJl
Z2luLCBlbmQgLSBiZWdpbikpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIEpTT2JqZWN0
KiByZXN1bHQ7CkBAIC05NTMsMjQgKzk1MywyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwog
ICAgIGVsc2UgewogICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIGVuZCAtIGJlZ2luKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbiA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBrID0g
YmVnaW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3Bl
cnR5KGV4ZWMsIHRoaXNPYmosIGspOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgbiwgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHNldExlbmd0aChleGVjLCB2bSwgcmVzdWx0LCBuKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxp
Y2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIDE1LjQuNC4xMgogCkBAIC05ODAsMzggKzk4
MCwzOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRo
aXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCi0gICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc3RkOjpwYWly
PFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNp
ZXNDb25zdHJ1Y3RBcnJheShleGVjLCB0aGlzT2JqLCAwKTsKICAgICAgICAgQVNTRVJUKCEhc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzcGVjaWVzUmVzdWx0
LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpCi0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICAgICAgSlNPYmplY3QqIHJlc3VsdDsKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3Qg
PT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKICAgICAgICAgICAgIHJl
c3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzZXRMZW5ndGgoZXhlYywgdm0sIHJlc3VsdCwgMCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHNldExl
bmd0aChleGVjLCB2bSwgdGhpc09iaiwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHVu
c2lnbmVkIGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1
bnNpZ25lZCBhY3R1YWxEZWxldGVDb3VudCA9IGxlbmd0aCAtIGFjdHVhbFN0YXJ0OwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIGRvdWJsZSBkZWxldGVDb3Vu
dCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChkZWxldGVDb3VudCA8
IDApCiAgICAgICAgICAgICBhY3R1YWxEZWxldGVDb3VudCA9IDA7CiAgICAgICAgIGVsc2UgaWYg
KGRlbGV0ZUNvdW50ID4gbGVuZ3RoIC0gYWN0dWFsU3RhcnQpCkBAIC0xMDIzLDExICsxMDIzLDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBzdGQ6OnBh
aXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3Bl
Y2llc0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGFjdHVhbERlbGV0ZUNvdW50KTsKICAg
ICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKICAgICBpZiAoc3BlY2llc1Jlc3Vs
dC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgYm9vbCBv
a1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5n
dGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBp
ZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkKICAgICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlz
T2JqKS0+ZmFzdFNsaWNlKCpleGVjLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwog
CkBAIC0xMDM3LDIwICsxMDM3LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGFjdHVhbERlbGV0ZUNvdW50OyArK2spIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYg
PSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYWN0dWFsU3RhcnQpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIHYsIHRydWUp
OwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhVbmRlY2lkZWQpLCBhY3R1YWxEZWxldGVDb3VudCk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7ICsraykgewogICAgICAg
ICAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBhY3R1
YWxTdGFydCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRl
eCh2bSwgaywgdik7CkBAIC0xMDYxLDIyICsxMDYxLDIyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB1bnNpZ25lZCBpdGVtQ291bnQgPSBzdGQ6Om1heDxp
bnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChpdGVtQ291bnQgPCBh
Y3R1YWxEZWxldGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9y
U3BsaWNlPihleGVjLCB0aGlzT2JqLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0
ZW1Db3VudCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgfSBlbHNlIGlmIChpdGVtQ291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkgewogICAgICAg
ICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGFj
dHVhbFN0YXJ0LCBhY3R1YWxEZWxldGVDb3VudCwgaXRlbUNvdW50LCBsZW5ndGgpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25l
ZCBrID0gMDsgayA8IGl0ZW1Db3VudDsgKytrKSB7CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5k
ZXhJbmxpbmUoZXhlYywgayArIGFjdHVhbFN0YXJ0LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChr
ICsgMiksIHRydWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICB9CiAgICAgCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHNldExlbmd0aChleGVjLCB2bSwg
dGhpc09iaiwgbGVuZ3RoIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpdGVtQ291bnQpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEwODUsMjYgKzEwODUsMjYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgo
ZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlz
T2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyAr
K2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBrLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGxlbmd0aCAr
IG5yQXJncyk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHB1dExlbmd0aChleGVjLCB2bSwg
dGhpc09iaiwgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0xMTEzLDI2ICsxMTEzLDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhl
eGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNl
cHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKLSAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVs
ZW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsr
aW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwg
aW5kZXgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
aWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJp
Y3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
aW5kZXgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0K
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICByZXR1cm4g
anNOdW1iZXIoLTEpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMTE0MSwxMCArMTE0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCi0g
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsK
IAogICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpIHsKQEAgLTExNTMsNyArMTE1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCAwKSB7CiAg
ICAgICAgICAgICBmcm9tRG91YmxlICs9IGxlbmd0aDsKICAgICAgICAgICAgIGlmIChmcm9tRG91
YmxlIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KC0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoZnJvbURvdWJsZSA8IGxlbmd0aCkKICAgICAgICAgICAgIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUpOwpAQCAtMTE2MywxNSArMTE2MywxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgZG8gewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICB9IHdoaWxlIChpbmRleC0tKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoLTEpOwog
fQogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpT
QXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3VyY2UsIHVu
c2lnbmVkIHNvdXJjZUxlbmd0aCkKQEAgLTExOTksNyArMTE5OSw3IEBAIHN0YXRpYyBib29sIG1v
dmVFbGVtZW50cyhFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIGNvbmNhdEFwcGVuZE9uZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
SlNBcnJheSogZmlyc3QsIEpTVmFsdWUgc2Vjb25kKQorc3RhdGljIEpTVmFsdWUgY29uY2F0QXBw
ZW5kT25lKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiBmaXJzdCwgSlNWYWx1ZSBz
ZWNvbmQpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBA
IC0xMjE2LDI1ICsxMjE2LDI1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25jYXRBcHBlbmRP
bmUoRXgKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KHR5cGUpOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OmNyZWF0ZSh2bSwgcmVzdWx0
U3RydWN0dXJlLCBmaXJzdEFycmF5U2l6ZSArIDEpOwogICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29w
ZSkpOworICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsK
IAogICAgIGJvb2wgc3VjY2VzcyA9IHJlc3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBm
aXJzdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQs
IDAsIGZpcnN0LCBmaXJzdEFycmF5U2l6ZSk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgPT0gc3VjY2Vzcyk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAg
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgZmlyc3RBcnJheVNpemUsIHNlY29uZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiAKIH0KIAogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQ29u
Y2F0TWVtY3B5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnRD
b3VudCgpID09IDIpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xMjQ2LDEzICsxMjQ2
LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICAvLyBo
YXMgaW5kZXhlZCBhY2Nlc3NvcnMgdGhlbiBvbmUgb2YgdGhvc2UgYWNjZXNzb3JzIG1pZ2h0IGNo
YW5nZSB0aGUgdmFsdWUgb2YgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZQogICAgIC8vIG9uIHRo
ZSBzZWNvbmQgYXJndW1lbnQuCiAgICAgaWYgKFVOTElLRUxZKHNob3VsZFVzZVNsb3dQdXQoZmly
c3RBcnJheS0+aW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgdGhlIHNwZWNpZXMgY29uc3RydWN0b3IgaGVyZSBzaW5jZSBjaGVja2luZyBpdCBp
biB0aGUgSlMgd3JhcHBlciBpcyB0b28gZXhwZW5zaXZlIGZvciB0aGUgbm9uLW9wdGltaXppbmcg
dGllcnMuCiAgICAgYm9vbCBpc1ZhbGlkID0gc3BlY2llc1dhdGNocG9pbnRzVmFsaWQoZXhlYywg
Zmlyc3RBcnJheSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaXNWYWxpZCk7
CiAgICAgaWYgKFVOTElLRUxZKCFpc1ZhbGlkKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIEpTVmFsdWUg
c2Vjb25kID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSk7CiAgICAgaWYgKCFpc0pTQXJyYXko
c2Vjb25kKSkgewpAQCAtMTI3MiwyNCArMTI3MiwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9QCiAgICAgSW5kZXhpbmdUeXBlIHR5cGUgPSBmaXJzdEFycmF5LT5t
ZXJnZUluZGV4aW5nVHlwZUZvckNvcHlpbmcoc2Vjb25kVHlwZSk7CiAgICAgaWYgKHR5cGUgPT0g
Tm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZhc3RDb3B5KHZtLCBzZWNvbmRBcnJheSkgfHwg
Zmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXplKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92
ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXpl
KTsKICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNzKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgc3VjY2VzcyA9IG1vdmVF
bGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNl
Y29uZEFycmF5U2l6ZSk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3Vj
Y2Vzcyk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAgICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIFN0cnVjdHVyZSogcmVzdWx0U3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24odHlwZSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh2bSwgcmVzdWx0U3RydWN0dXJlLCBmaXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5
U2l6ZSk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIAogICAgIGlmICh0eXBlID09IEFy
cmF5V2l0aERvdWJsZSkgewogICAgICAgICBkb3VibGUqIGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7CkBAIC0xMzA3LDEwICsxMzA3LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICB9CiAKICAgICBy
ZXN1bHQtPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoZmlyc3RBcnJheVNpemUgKyBzZWNv
bmRBcnJheVNpemUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDMpOwogCkBAIC0xMzIz
LDcgKzEzMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAg
ICAgaWYgKCFyZXN1bHRBcnJheS0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCBzdGFydEluZGV4LCBv
dGhlckFycmF5KSkKICAgICAgICAgbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHRBcnJheSwg
c3RhcnRJbmRleCwgb3RoZXJBcnJheSwgb3RoZXJBcnJheS0+bGVuZ3RoKCkpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTEsIDIwMTUsIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtNjcsOSArNjcsOSBAQCBwcml2YXRlOgogICAgIFNwZWNpZXNXYXRjaHBvaW50U3RhdHVzIG1f
c3BlY2llc1dhdGNocG9pbnRTdGF0dXMgeyBTcGVjaWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0
aWFsaXplZCB9OwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1ZhbHVlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUHJpdmF0ZUZ1bmNBcHBlbmRNZW1j
cHkoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Zh
bHVlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUHJpdmF0
ZUZ1bmNDb25jYXRNZW1jcHkoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b1ByaXZhdGVGdW5jQXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rp
b25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5jb20+LgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTAsMTYgKzUxLDE2IEBAIHZvaWQgQXN5bmNGdW5jdGlvbkNvbnN0cnVj
dG9yOjpmaW5pc2hDcmUKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxBc3luY0Z1bmN0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
cmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RG
dW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2Jh
bE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkFzeW5jKSk7CisgICAg
cmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5q
c0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9k
ZTo6QXN5bmMpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0
aW9uTW9kZTo6QXN5bmMpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywg
RnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpBc3luYyk7CiB9CiAKIENhbGxUeXBlIEFzeW5jRnVu
Y3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRh
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVj
dC5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0F0b21pY3NPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogICAgIG1hY3JvKHhvciwgWG9yLCAzKQog
CiAjZGVmaW5lIERFQ0xBUkVfRlVOQ19QUk9UTyhsb3dlck5hbWUsIHVwcGVyTmFtZSwgY291bnQp
ICAgICAgICAgICAgICAgICBcCi0gICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9t
aWNzRnVuYyAjIyB1cHBlck5hbWUoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGF0b21pY3NGdW5jICMjIHVwcGVyTmFtZShFeGVjU3RhdGUqKTsKIEZPUl9FQUNIX0FUT01J
Q1NfRlVOQyhERUNMQVJFX0ZVTkNfUFJPVE8pCiAjdW5kZWYgREVDTEFSRV9GVU5DX1BST1RPCiAK
QEAgLTg4LDE5ICs4OCwxOSBAQCB2b2lkIEF0b21pY3NPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiBuYW1lc3BhY2UgewogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1FeHRyYUFyZ3MsIHR5cGVu
YW1lIEFkYXB0b3IsIHR5cGVuYW1lIEZ1bmM+Ci1FbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRp
b25XaXRoQXJnc0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgSlNBcnJh
eUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3LCB1bnNpZ25lZCBhY2Nlc3NJbmRleCwgY29uc3Qg
RnVuYyYgZnVuYykKK0pTVmFsdWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3NDYXNlKEV4ZWNTdGF0
ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5
VmlldywgdW5zaWduZWQgYWNjZXNzSW5kZXgsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIHR5cGVkQXJyYXkgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qPih0eXBlZEFycmF5Vmlldyk7CiAgICAgCiAgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBleHRyYUFyZ3NbbnVtRXh0cmFBcmdzICsgMV07IC8vIEFk
ZCAxIHRvIGF2b2lkIDAgc2l6ZSBhcnJheSBlcnJvciBpbiBWUy4KICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtRXh0cmFBcmdzOyArK2kpIHsKICAgICAgICAgaW50MzJfdCB2YWx1ZSA9
IGV4ZWMtPmFyZ3VtZW50KDIgKyBpKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBleHRyYUFyZ3NbaV0g
PSBBZGFwdG9yOjp0b05hdGl2ZUZyb21JbnQzMih2YWx1ZSk7CiAgICAgfQogCiAgICAgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSByZXN1bHQgPSBmdW5jKHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkg
KyBhY2Nlc3NJbmRleCwgZXh0cmFBcmdzKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFk
YXB0b3I6OnRvSlNWYWx1ZShyZXN1bHQpKTsKKyAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVl
KHJlc3VsdCk7CiB9CiAKIHVuc2lnbmVkIHZhbGlkYXRlZEFjY2Vzc0luZGV4KFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheVZpZXcpCkBAIC0xMjcs
NyArMTI3LDcgQEAgdW5zaWduZWQgdmFsaWRhdGVkQWNjZXNzSW5kZXgoVk0mIHZtLCBFeAogfQog
CiB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1FeHRyYUFyZ3MsIHR5cGVuYW1lIEZ1bmM+Ci1FbmNvZGVk
SlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZ1
bmMmIGZ1bmMpCitKU1ZhbHVlIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhFCiAgICAgSlNWYWx1ZSB0eXBl
ZEFycmF5VmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXR5cGVkQXJyYXlWYWx1
ZS5pc0NlbGwoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJUeXBlZCBhcnJheSBhcmd1bWVudCBtdXN0IGJlIGEgY2VsbC4iKSk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogICAgIAogICAgIEpTQ2VsbCogdHlwZWRBcnJheUNlbGwgPSB0eXBlZEFycmF5
VmFsdWUuYXNDZWxsKCk7CkBAIC0xNTEsMTcgKzE1MSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9t
aWNPcGVyYXRpb25XaXRoQXJncyhFCiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlR5cGVkIGFycmF5
IGFyZ3VtZW50IG11c3QgYmUgYW4gSW50OEFycmF5LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBV
aW50OEFycmF5LCBVaW50MTZBcnJheSwgb3IgVWludDMyQXJyYXkuIikpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAgICAgCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3ID0g
anNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4odHlwZWRBcnJheUNlbGwpOwogICAgIGlmICghdHlw
ZWRBcnJheVZpZXctPmlzU2hhcmVkKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCB3cmFwIGEgU2hh
cmVkQXJyYXlCdWZmZXIuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBhY2Nlc3NJbmRleCA9IHZhbGlkYXRlZEFjY2Vzc0luZGV4KHZtLCBleGVjLCB0eXBlZEFycmF5
Vmlldyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSW50OEFycmF5VHlwZToKQEAgLTE3OCwx
MyArMTc4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKEUKICAg
ICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzQ2FzZTxudW1FeHRyYUFyZ3MsIFVp
bnQzMkFkYXB0b3I+KGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1
bmMpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNBZGQoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jQWRkKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4
ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0xOTIsNyArMTkyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0FuZChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNBbmQoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwxPigKICAgICAg
ICAgZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKQEAgLTIwMCw3ICsy
MDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAg
IH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jQ29tcGFy
ZUV4Y2hhbmdlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNz
RnVuY0NvbXBhcmVFeGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21p
Y09wZXJhdGlvbldpdGhBcmdzPDI+KAogICAgICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29u
c3QgYXV0byogYXJncykgewpAQCAtMjA4LDcgKzIwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXRvbWljc0Z1bmNFeGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNFeGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAgICAgICBleGVjLCBbJl0g
KGF1dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykgewpAQCAtMjE2LDEzICsyMTYsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0lzTG9ja0ZyZWUoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jSXNMb2NrRnJlZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpbnQzMl90IHNpemUgPSBleGVj
LT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBib29sIHJlc3VsdDsKICAgICBzd2l0Y2ggKHNp
emUpIHsKQEAgLTIzNSwxMCArMjM1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXRvbWljc0Z1bmMKICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKKyAgICBy
ZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXRvbWljc0Z1bmNMb2FkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuY0xvYWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhdG9taWNP
cGVyYXRpb25XaXRoQXJnczwwPigKICAgICAgICAgZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0
IGF1dG8qKSB7CkBAIC0yNDYsNyArMjQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuY09yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuY09yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYXRvbWljT3Bl
cmF0aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBh
dXRvKiBhcmdzKSB7CkBAIC0yNTQsNyArMjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhdG9taWNzRnVuY1N0b3JlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhdG9taWNzRnVuY1N0b3JlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4g
YXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRy
LCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0yNjQsNyArMjY0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdWIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJl
dHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwxPigKICAgICAgICAgZXhlYywgWyZdIChhdXRv
KiBwdHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKQEAgLTI3Miw3ICsyNzIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIH0pOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FpdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNXYWl0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTI4MCwyOCArMjgwLDI4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXRvbWljc0Z1bmMKICAgICBKU0ludDMyQXJyYXkqIHR5cGVkQXJyYXkgPSBqc0R5bmFt
aWNDYXN0PEpTSW50MzJBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIXR5cGVk
QXJyYXkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IGJlIGFuIEludDMyQXJyYXkuIikpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBpZiAoIXR5cGVkQXJyYXktPmlzU2hhcmVkKCkp
IHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlw
ZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IHdyYXAgYSBTaGFyZWRBcnJheUJ1ZmZlci4iKSk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0
ZWRBY2Nlc3NJbmRleCh2bSwgZXhlYywgdHlwZWRBcnJheSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIGludDMyX3QqIHB0ciA9IHR5cGVk
QXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJbmRleDsKICAgICAKICAgICBpbnQzMl90IGV4
cGVjdGVkVmFsdWUgPSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBkb3VibGUgdGlt
ZW91dEluTWlsbGlzZWNvbmRzID0gZXhlYy0+YXJndW1lbnQoMykudG9OdW1iZXIoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIGlm
ICghdm0ubV90eXBlZEFycmF5Q29udHJvbGxlci0+aXNBdG9taWNzV2FpdEFsbG93ZWRPbkN1cnJl
bnRUaHJlYWQoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJBdG9taWNzLndhaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIHRoZSBjdXJyZW50IHRo
cmVhZC4iKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIFNlY29uZHMgdGltZW91dCA9
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKQEAgLTMz
OSwxMCArMzM5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMK
ICAgICAgICAgcmVzdWx0U3RyaW5nID0gInRpbWVkLW91dCI7CiAgICAgZWxzZQogICAgICAgICBy
ZXN1bHRTdHJpbmcgPSAib2siOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
ZXhlYywgQVNDSUlMaXRlcmFsKHJlc3VsdFN0cmluZykpKTsKKyAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgQVNDSUlMaXRlcmFsKHJlc3VsdFN0cmluZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXRvbWljc0Z1bmNXYWtlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTM1MCwxNiArMzUwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRv
bWljc0Z1bmMKICAgICBKU0ludDMyQXJyYXkqIHR5cGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpT
SW50MzJBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIXR5cGVkQXJyYXkpIHsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQg
YXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IGJlIGFuIEludDMyQXJyYXkuIikpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICAgICAKICAgICBpZiAoIXR5cGVkQXJyYXktPmlzU2hhcmVkKCkpIHsKICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkg
Zm9yIHdhaXQvd2FrZSBtdXN0IHdyYXAgYSBTaGFyZWRBcnJheUJ1ZmZlci4iKSk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJ
bmRleCh2bSwgZXhlYywgdHlwZWRBcnJheSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIGludDMyX3QqIHB0ciA9IHR5cGVkQXJyYXktPnR5
cGVkVmVjdG9yKCkgKyBhY2Nlc3NJbmRleDsKICAgICAKQEAgLTM2NywxNCArMzY3LDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICB1bnNpZ25lZCBjb3Vu
dCA9IFVJTlRfTUFYOwogICAgIGlmICghY291bnRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAg
ICAgIGludDMyX3QgY291bnRJbnQgPSBjb3VudFZhbHVlLnRvSW50MzIoZXhlYyk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGNv
dW50ID0gc3RkOjptYXgoMCwgY291bnRJbnQpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoUGFya2luZ0xvdDo6dW5wYXJrQ291bnQocHRyLCBjb3VudCkpKTsK
KyAgICByZXR1cm4ganNOdW1iZXIoUGFya2luZ0xvdDo6dW5wYXJrQ291bnQocHRyLCBjb3VudCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jWG9yKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1hvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAg
ICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYs
MTYgKzQ2LDE2IEBAIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIH0K
IAogLy8gRUNNQSAxNS42LjIKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJvb2xlYW4gPSBqc0Jvb2xl
YW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKICAgICBTdHJ1Y3R1cmUqIGJv
b2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVy
ZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xl
YW5PYmplY3Q6OmNyZWF0ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CiAgICAgb2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHZtLCBib29sZWFuKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7
CisgICAgcmV0dXJuIG9iajsKIH0KIAogQ29uc3RydWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
QEAgLTY1LDkgKzY1LDkgQEAgQ29uc3RydWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENv
bgogfQogCiAvLyBFQ01BIDE1LjYuMQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvQm9vbGVhbihleGVjKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQo
MCkudG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA4LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMCw4
ICszMCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFu
UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC02NSwzOCArNjUsMzggQEAg
dm9pZCBCb29sZWFuUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jv
b2xlYW4oZmFsc2UpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFsbFN0
cmluZ3MuZmFsc2VTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmZh
bHNlU3RyaW5nKCk7CiAKICAgICBpZiAodGhpc1ZhbHVlID09IGpzQm9vbGVhbih0cnVlKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmco
KSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKIAogICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEJvb2xlYW5PYmplY3Q6OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIGlmIChhc0Jvb2xl
YW5PYmplY3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpID09IGpzQm9vbGVhbihmYWxzZSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy5mYWxzZVN0
cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKTsK
IAogICAgIEFTU0VSVChhc0Jvb2xlYW5PYmplY3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgp
ID09IGpzQm9vbGVhbih0cnVlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21h
bGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7CisgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MudHJ1
ZVN0cmluZygpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29s
ZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzQm9vbGVhbigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CisgICAgICAgIHJldHVybiB0
aGlzVmFsdWU7CiAKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhCb29sZWFuT2JqZWN0Ojpp
bmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzQm9vbGVhbk9iamVjdCh0aGlzVmFsdWUpLT5p
bnRlcm5hbFZhbHVlKCkpOworICAgIHJldHVybiBhc0Jvb2xlYW5PYmplY3QodGhpc1ZhbHVlKS0+
aW50ZXJuYWxWYWx1ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
NyArNDYsNyBAQCBlbnVtIGNsYXNzIENhbGxUeXBlIDogdW5zaWduZWQgewogICAgIEpTCiB9Owog
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRpdmVGdW5jdGlvbiko
RXhlY1N0YXRlKik7Cit0eXBlZGVmIEpTVmFsdWUgKEpTQ19IT1NUX0NBTEwgKk5hdGl2ZUZ1bmN0
aW9uKShFeGVjU3RhdGUqKTsKIAogc3RydWN0IENhbGxEYXRhIHsKICAgICB1bmlvbiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAko
cmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29s
ZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwyNyArMzYsMjcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShDb25zb2xl
T2JqZWN0KTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY0RlYnVnKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0xvZyhFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNJbmZvKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY1dhcm4oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zb2xlUHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpclhNTChF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNUYWJsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNBc3NlcnQoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQ291
bnQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
b2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Rha2VIZWFw
U25hcHNob3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lRW5kKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVTdGFt
cChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNv
bGVQcm90b0Z1bmNHcm91cChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cENvbGxhcHNlZChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cEVu
ZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY0RlYnVnKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
b2xlUHJvdG9GdW5jRXJyb3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNMb2coRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNJbmZvKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jV2FybihFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGly
WE1MKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJv
dG9GdW5jVGFibGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNUcmFjZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0Fzc2VydChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NvdW50KEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVF
bmQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90
b0Z1bmNUYWtlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVFbmQoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lU3RhbXAoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91
cChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY0dyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBFbmQoRXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNz
SW5mbyBDb25zb2xlT2JqZWN0OjpzX2luZm8gPSB7ICJDb25zb2xlIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShDb25zb2xlT2JqZWN0KSB9OwogCkBAIC0xMDQsMTg3ICsx
MDQsMTg3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWQKICAgICBy
ZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25zb2xlTG9nV2l0aExldmVsKEV4ZWNTdGF0ZSogZXhlYywgTWVzc2FnZUxldmVsIGxldmVs
KQorc3RhdGljIEpTVmFsdWUgY29uc29sZUxvZ1dpdGhMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIE1l
c3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAw
KSk7CiAgICAgY2xpZW50LT5sb2dXaXRoTGV2ZWwoZXhlYywgV1RGTW92ZShhcmd1bWVudHMpLCBs
ZXZlbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0RlYnVnKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RlYnVnKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhMZXZlbChleGVjLCBNZXNzYWdlTGV2ZWw6OkRl
YnVnKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4g
Y29uc29sZUxvZ1dpdGhMZXZlbChleGVjLCBNZXNzYWdlTGV2ZWw6OkVycm9yKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0xvZyhFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNMb2coRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBjb25zb2xlTG9nV2l0aExldmVs
KGV4ZWMsIE1lc3NhZ2VMZXZlbDo6TG9nKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0luZm8oRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jSW5mbyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgcmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoZXhlYywgTWVzc2FnZUxldmVs
OjpJbmZvKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY1dhcm4oRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zb2xlUHJvdG9GdW5jV2FybihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IGNvbnNvbGVMb2dXaXRoTGV2ZWwoZXhlYywgTWVzc2FnZUxldmVsOjpXYXJuaW5nKTsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NsZWFy
KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGll
bnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBp
ZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBjbGllbnQtPmNsZWFyKGV4
ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNEaXIoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNv
bnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0
b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT5kaXIoZXhl
YywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyWE1MKEV4ZWNTdGF0ZSog
ZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpclhN
TChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywg
MCkpOwogICAgIGNsaWVudC0+ZGlyWE1MKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY1RhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT50YWJsZShleGVjLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwog
ICAgIGNsaWVudC0+dHJhY2UoZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9G
dW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc29sZVByb3RvRnVuY0Fzc2VydChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5j
b25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgYm9vbCBjb25kaXRpb24gPSBleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYyk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChjb25kaXRpb24pCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMSkp
OwogICAgIGNsaWVudC0+YXNzZXJ0aW9uKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY0NvdW50KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0NvdW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT5jb3VudChleGVjLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVu
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlm
ICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKCFhcmdzQ291bnQpIHsKICAgICAgICAg
Y2xpZW50LT5wcm9maWxlKGV4ZWMsIFN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIGNsaWVudC0+cHJvZmlsZShleGVjLCB0aXRsZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY1Byb2ZpbGVFbmQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKICAgICBpZiAoIWFyZ3NDb3VudCkgewogICAgICAgICBjbGllbnQtPnByb2ZpbGVFbmQo
ZXhlYywgU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgY2xpZW50LT5wcm9maWxlRW5kKGV4ZWMsIHRpdGxlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFr
ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpOwogICAgIGlmICghYXJnc0NvdW50KSB7CiAgICAgICAgIGNsaWVudC0+dGFrZUhlYXBTbmFw
c2hvdChleGVjLCBTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBjbGllbnQtPnRha2VIZWFwU25hcHNob3QoZXhlYywgdGl0bGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC0yOTQsODggKzI5NCw4OCBAQCBzdGF0aWMg
U3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoCiAgICAgcmV0dXJuIHZhbHVlLnRvV1RG
U3RyaW5nKGV4ZWMpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBTdHJpbmcgdGl0bGU7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCiAgICAgICAgIHRpdGxlID0gQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxz
ZSB7CiAgICAgICAgIHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVj
LT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIH0KIAogICAgIGNsaWVudC0+dGltZShleGVjLCB0aXRsZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Rp
bWVFbmQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
b2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Q29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25z
b2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgU3RyaW5nIHRpdGxlOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAg
ICAgICB0aXRsZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAg
ICAgdGl0bGUgPSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAg
ICAgY2xpZW50LT50aW1lRW5kKGV4ZWMsIHRpdGxlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1w
KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY1RpbWVTdGFtcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCog
Y2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAg
ICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRB
cmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+dGltZVN0YW1wKGV4ZWMsIFdURk1vdmUo
YXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dyb3VwKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dyb3VwKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xp
ZW50LT5ncm91cChleGVjLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91
cENvbGxhcHNlZChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNHcm91cENvbGxhcHNlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Q29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25z
b2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9y
OjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+Z3JvdXBDb2xs
YXBzZWQoZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBFbmQo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJv
dG9GdW5jR3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvbnNvbGVDbGllbnQqIGNs
aWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAg
IGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJn
dW1lbnRzKGV4ZWMsIDApKTsKICAgICBjbGllbnQtPmdyb3VwRW5kKGV4ZWMsIFdURk1vdmUoYXJn
dW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRl
ci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgY29u
c3QgQ2xhc3NJbmZvIEN1c3RvbUdldHRlclNldHRlcjo6c19pbgogYm9vbCBjYWxsQ3VzdG9tU2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0
dGVyLCBib29sIGlzQWNjZXNzb3IsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIEFTU0VSVChzZXR0ZXIpOwotICAgIGJvb2wgcmVzdWx0ID0gc2V0dGVyKGV4ZWMsIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICBi
b29sIHJlc3VsdCA9IHNldHRlcihleGVjLCB0aGlzVmFsdWUsIHZhbHVlKTsKICAgICAvLyBBbHdh
eXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFz
IGFuIGFjY2Vzc29yIHRvIHVzZXJzLgogICAgIGlmIChpc0FjY2Vzc29yKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxMSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgs
IDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC01Miw4ICs1Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5h
bWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0xNzQsMTAg
KzE3NCwxMCBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
cmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CiB9
CiAgICAgCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
RGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3Ry
dWN0RGF0ZShleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2Jh
bE9iamVjdCgpLCBleGVjLT5uZXdUYXJnZXQoKSwgYXJncykpOworICAgIHJldHVybiBjb25zdHJ1
Y3REYXRlKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFs
T2JqZWN0KCksIGV4ZWMtPm5ld1RhcmdldCgpLCBhcmdzKTsKIH0KIAogQ29uc3RydWN0VHlwZSBE
YXRlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKQEAgLTE4NywxMiArMTg3LDEyIEBAIENvbnN0cnVjdFR5cGUgRGF0ZUNv
bnN0cnVjdG9yOjpnZXRDb25zdHIKIH0KIAogLy8gRUNNQSAxNS45LjIKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbERhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdHM7CiAgICAgbXNUb0dy
ZWdvcmlhbkRhdGVUaW1lKHZtLCBjdXJyZW50VGltZU1TKCksIFdURjo6TG9jYWxUaW1lLCB0cyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBmb3Jt
YXREYXRlVGltZSh0cywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwgZmFsc2UpKSk7CisgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGlt
ZUZvcm1hdERhdGVBbmRUaW1lLCBmYWxzZSkpOwogfQogCiBDYWxsVHlwZSBEYXRlQ29uc3RydWN0
b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTIwMSwyOCAr
MjAxLDI4IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlMKICAgICBy
ZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFy
c2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmluZyBkYXRlU3RyID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihwYXJzZURhdGUodm0sIGRhdGVTdHIpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4ganNOdW1iZXIocGFyc2VEYXRlKHZtLCBkYXRl
U3RyKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAjaWYgIUVOQUJMRShXRUJfUkVQTEFZKQogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICNl
bmRpZgogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihOT1JNQUxfT1JfREVU
RVJNSU5JU1RJQ19GVU5DVElPTihqc0N1cnJlbnRUaW1lKCksIGRldGVybWluaXN0aWNDdXJyZW50
VGltZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKSkpOworICAgIHJldHVybiBqc051bWJl
cihOT1JNQUxfT1JfREVURVJNSU5JU1RJQ19GVU5DVElPTihqc0N1cnJlbnRUaW1lKCksIGRldGVy
bWluaXN0aWNDdXJyZW50VGltZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqIGV4ZWMpIAor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVVVEMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGRv
dWJsZSBtcyA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4ZWMsIEFyZ0xpc3QoZXhlYyks
IFdURjo6VVRDVGltZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aW1l
Q2xpcChtcykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodGltZUNsaXAobXMpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC01Nyw2ICs1Nyw2IEBAIHByaXZhdGU6CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRl
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFy
Z0xpc3QmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKik7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCkBAIC03Miw1MCArNzIsNTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
TWludXRlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
Q0RheShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51
dGVzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDTW9udGgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhv
dXJzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENEYXRlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01p
bnV0ZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVE
YXRlU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1ByaW1pdGl2ZVN5bWJv
bChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyhFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vj
b25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
TWludXRlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0TW9udGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFNlY29uZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250
aChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRD
U2Vjb25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0WWVhcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0RGF0ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0RnVsbFllYXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
TW9udGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Nl
dFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFllYXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1ByaW1pdGl2ZVN5bWJvbChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0
cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9V
VENTdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNUb0pTT04oRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMzE4LDcgKzMxOCw3IEBAIHN0YXRp
YyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKIAogI2VuZGlmIC8vIE9TKERBUldJ
TikgJiYgVVNFKENGKQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVUaW1lRm9ybWF0IGZvcm1hdCwgYm9vbCBhc1VUQ1Zhcmlh
bnQpCitzdGF0aWMgSlNWYWx1ZSBmb3JtYXRlRGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywg
RGF0ZVRpbWVGb3JtYXQgZm9ybWF0LCBib29sIGFzVVRDVmFyaWFudCkKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtMzMxLDkgKzMzMSw5IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBmb3JtYXRlRGF0ZUluc3RhbmMKICAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3Jl
Z29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKICAgICAgICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiSW52YWxpZCBEYXRlIikpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBEYXRlIikpKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERh
dGVUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0LCBhc1VUQ1ZhcmlhbnQpKSk7CisgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVGltZSgqZ3JlZ29yaWFu
RGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJpYW50KSk7CiB9CiAKIC8vIENvbnZlcnRzIGEgbGlz
dCBvZiBhcmd1bWVudHMgc2VudCB0byBhIERhdGUgbWVtYmVyIGZ1bmN0aW9uIGludG8gbWlsbGlz
ZWNvbmRzLCB1cGRhdGluZwpAQCAtNTA5LDE5ICs1MDksMTkgQEAgdm9pZCBEYXRlUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogCiAvLyBGdW5jdGlvbnMKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1ZhcmlhbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9y
bWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBhc1VUQ1Zh
cmlhbnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGFz
VVRDVmFyaWFudCA9IHRydWU7CiAgICAgcmV0dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2UoZXhlYywg
RGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwgYXNVVENWYXJpYW50KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhl
Yy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAg
LTUzNCw3ICs1MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlz
RGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5E
YXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBEYXRlIikpKSk7CisgICAgICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBEYXRlIikpKTsKICAgICAvLyBNYXhpbXVtIGFtb3VudCBvZiBzcGFjZSB3ZSBuZWVkIGlu
IGJ1ZmZlcjogNyAobWF4LiBkaWdpdHMgaW4geWVhcikgKyAyICogNSAoMiBjaGFyYWN0ZXJzIGVh
Y2ggZm9yIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSArIDQgKC4gKyAzIGRpZ2l0
cyBmb3IgbWlsbGlzZWNvbmRzKQogICAgIC8vIDYgZm9yIGZvcm1hdHRpbmcgYW5kIG9uZSBmb3Ig
bnVsbCB0ZXJtaW5hdGlvbiA9IDI4LiBXZSBhZGQgb25lIGV4dHJhIGNoYXJhY3RlciB0byBhbGxv
dyB1cyB0byBmb3JjZSBudWxsIHRlcm1pbmF0aW9uLgogICAgIGNoYXIgYnVmZmVyWzI4XTsKQEAg
LTU1MSwyNCArNTUxLDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnUKIAogICAgIEFTU0VSVChjaGFyYWN0ZXJzV3JpdHRlbiA+IDAgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNoYXJhY3RlcnNXcml0dGVuKSA8IHNpemVvZihidWZmZXIpKTsKICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcnNXcml0dGVuKSA+PSBzaXplb2YoYnVmZmVyKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAg
ICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoYnVmZmVyLCBjaGFyYWN0ZXJz
V3JpdHRlbikpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhi
dWZmZXIsIGNoYXJhY3RlcnNXcml0dGVuKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1ZhcmlhbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9y
bWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRlVGltZUZvcm1hdERhdGUsIGFzVVRDVmFyaWFudCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1Zh
cmlhbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9ybWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRl
VGltZUZvcm1hdFRpbWUsIGFzVVRDVmFyaWFudCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZt
KCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC01NzYs
MTAgKzU3NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIERhdGVJ
bnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmos
IHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlQW5kVGltZSkpOworICAg
IHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+
aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFuZFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CkBAIC01ODcsMTAgKzU4NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlz
VmFsdWUpOyAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZvcm1hdExvY2FsZURhdGUoZXhl
YywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRl
KSk7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNE
YXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1l
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwpAQCAtNTk4LDEwICs1OTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhp
c1ZhbHVlKTsgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXRMb2NhbGVEYXRlKGV4
ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlVGlt
ZSkpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlz
RGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlVGltZSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvUHJpbWl0aXZlU3ltYm9sKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVT
eW1ib2woRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjE1LDI2ICs2MTUsMjYg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgSlNWYWx1
ZSBoaW50VmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlIHR5cGUgPSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoZXhlYywgaGludFZh
bHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHR5cGUgPT0g
Tm9QcmVmZXJlbmNlKQogICAgICAgICB0eXBlID0gUHJlZmVyU3RyaW5nOwogCiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+b3JkaW5h
cnlUb1ByaW1pdGl2ZShleGVjLCB0eXBlKSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm9yZGlu
YXJ5VG9QcmltaXRpdmUoZXhlYywgdHlwZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0RhdGVJbnN0
YW5jZSh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkpOworICAgIHJldHVybiBhc0RhdGVJbnN0
YW5jZSh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkp
OwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC02NDUsMTEg
KzY0NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAg
ICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9i
ai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkpKTsKKyAgICAg
ICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1l
LT55ZWFyKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNjYwLDExICs2NjAsMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVU
aW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVhcigpKSk7CisgICAgICAgIHJldHVybiBqc05h
TigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVhcigpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW9udGgoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250
aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKQEAgLTY3NSwxMSArNjc1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGlt
ZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdv
cmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1v
bnRoKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lLT5tb250aCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTY5MCwxMSArNjkwLDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVn
b3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKCkpKTsKKyAgICAgICAg
cmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5t
b250aCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CkBAIC03MDUsMTEgKzcwNSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29y
aWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAg
aWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRh
dGVUaW1lLT5tb250aERheSgpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVy
biBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAt
NzIwLDExICs3MjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bW9udGhE
YXkoKSkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC03MzUsMTEgKzczNSwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0
ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpKTsKKyAgICAgICAgcmV0dXJuIGpz
TmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CkBAIC03NTAsMTEgKzc1MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFu
RGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAg
aWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRh
dGVUaW1lLT53ZWVrRGF5KCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgp
KTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzY1LDEx
ICs3NjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAg
ICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVP
YmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+aG91cigpKSk7CisgICAg
ICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGlt
ZS0+aG91cigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTc4MCwxMSArNzgwLDExIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVU
QyhleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsK
KyAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OwpAQCAtNzk1LDExICs3OTUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bWlu
dXRlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtODEwLDExICs4
MTAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmot
PmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKCkpKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVU
aW1lLT5taW51dGUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtODI1LDExICs4MjUsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1l
KGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7
CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNvbmQoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRV
VENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRo
aXNWYWx1ZSgpOwpAQCAtODQwLDExICs4NDAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlh
bkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAg
IGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5E
YXRlVGltZS0+c2Vjb25kKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNvbmQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25k
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKQEAgLTg1NCwxNCArODU0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnUKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2Uo
dGhpc1ZhbHVlKTsgCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVt
YmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKIAogICAgIGRvdWJs
ZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7CiAgICAgZG91YmxlIG1zID0gbWls
bGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihtcykpOworICAgIHJldHVybiBqc051bWJlcihtcyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vj
b25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKQEAgLTg3MSwxNCArODcxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnUKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFu
Y2UodGhpc1ZhbHVlKTsgCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFs
TnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWlsbGkpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKIAogICAgIGRv
dWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7CiAgICAgZG91YmxlIG1zID0g
bWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihtcykpOworICAgIHJldHVybiBqc051bWJlcihtcyk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVP
ZmZzZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CkBAIC04ODksMTEgKzg4OSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0
ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFn
cmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC1ncmVnb3JpYW5EYXRlVGlt
ZS0+dXRjT2Zmc2V0KCkgLyBtaW51dGVzUGVySG91cikpOworICAgICAgICByZXR1cm4ganNOYU4o
KTsKKyAgICByZXR1cm4ganNOdW1iZXIoLWdyZWdvcmlhbkRhdGVUaW1lLT51dGNPZmZzZXQoKSAv
IG1pbnV0ZXNQZXJIb3VyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC05MDUsMTAgKzkwNSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIobWlsbGkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
PnZtKCksIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZy
b21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBudW1BcmdzVG9Vc2UsIFdURjo6VGltZVR5
cGUgaW5wdXRUaW1lVHlwZSkKK3N0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdz
KEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgV1RGOjpUaW1lVHlwZSBpbnB1dFRp
bWVUeXBlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZt
KCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC05MjIs
NyArOTIyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpIHx8IHN0ZDo6aXNuYW4obWlsbGkpKSB7CiAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldElu
dGVybmFsVmFsdWUodm0sIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgIAogICAgIGRvdWJs
ZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7CkBAIC05MzIsMjMgKzkzMiwyMyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltCiAgICAgICAgID8gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpCiAgICAgICAgIDogdGhpc0RhdGVP
YmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghb3RoZXIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOwog
CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFuRGF0ZVRpbWU7CiAgICAgZ3JlZ29yaWFu
RGF0ZVRpbWUuY29weUZyb20oKm90aGVyKTsKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdU
aW1lQXJncyhleGVjLCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewog
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAKIAogICAgIGRvdWJs
ZSBuZXdVVENEYXRlID0gZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHZtLCBncmVnb3JpYW5EYXRlVGlt
ZSwgbXMsIGlucHV0VGltZVR5cGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodGlt
ZUNsaXAobmV3VVRDRGF0ZSkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZt
LCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0
ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLCBXVEY6OlRpbWVUeXBlIGlu
cHV0VGltZVR5cGUpCitzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFeGVj
U3RhdGUqIGV4ZWMsIGludCBudW1BcmdzVG9Vc2UsIFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlw
ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtOTU5LDcgKzk1
OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXQKICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFO
KCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJl
c3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtOTc1
LDkzICs5NzUsOTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdAog
ICAgICAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKICAg
ICAgICAgICAgIDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgICAg
ICBpZiAoIW90aGVyKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKKyAgICAgICAgICAgIHJldHVybiBqc05hTigpOwogICAgICAgICBncmVnb3JpYW5EYXRlVGlt
ZS5jb3B5RnJvbSgqb3RoZXIpOwogICAgIH0KICAgICAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVz
VXNpbmdEYXRlQXJncyhleGVjLCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1l
KSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRl
T2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAKIAogICAg
IGRvdWJsZSBuZXdVVENEYXRlID0gZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHZtLCBncmVnb3JpYW5E
YXRlVGltZSwgbXMsIGlucHV0VGltZVR5cGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIodGltZUNsaXAobmV3VVRDRGF0ZSkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAxLCBXVEY6OkxvY2FsVGlt
ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0
dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDEsIFdURjo6VVRDVGltZSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNv
bmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFy
Z3MoZXhlYywgMiwgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDIsIFdURjo6
VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3
VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMywgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdz
KGV4ZWMsIDMsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJl
dHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCA0LCBXVEY6OkxvY2FsVGltZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJz
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0
VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyhleGVjLCA0LCBXVEY6OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDEsIFdURjo6TG9jYWxUaW1l
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCAxLCBXVEY6OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMiwgV1RGOjpMb2Nh
bFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3
VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMiwgV1RGOjpVVENUaW1lKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMs
IDMsIFdURjo6TG9jYWxUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDMsIFdURjo6VVRDVGlt
ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFll
YXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7IAogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgZG91YmxlIG1pbGxp
ID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CkBAIC0xMDk1LDE3ICsxMDk1LDE3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBpZiAoIXN0ZDo6
aXNmaW5pdGUoeWVhcikpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwogICAg
ICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIGdyZWdvcmlhbkRhdGVUaW1lLnNldFllYXIodG9JbnQzMigoeWVhciA+PSAw
ICYmIHllYXIgPD0gOTkpID8gKHllYXIgKyAxOTAwKSA6IHllYXIpKTsKICAgICBkb3VibGUgdGlt
ZUluTWlsbGlzZWNvbmRzID0gZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHZtLCBncmVnb3JpYW5EYXRl
VGltZSwgbXMsIFdURjo6TG9jYWxUaW1lKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KHRpbWVDbGlwKHRpbWVJbk1pbGxpc2Vjb25kcykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTExMTYsMjcgKzExMTYsMjcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOwogCiAgICAg
Ly8gTk9URTogSUUgcmV0dXJucyB0aGUgZnVsbCB5ZWFyIGV2ZW4gaW4gZ2V0WWVhci4KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkg
LSAxOTAwKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkg
LSAxOTAwKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBv
YmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBpZiAodGltZVZhbHVlLmlzTnVtYmVyKCkgJiYgISh0aW1lVmFs
dWUuaXNJbnQzMigpIHx8IHN0ZDo6aXNmaW5pdGUodGltZVZhbHVlLmFzRG91YmxlKCkpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBq
c051bGwoKTsKIAogICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YSh0b0lTT1ZhbHVlLCBjYWxsRGF0YSk7CkBAIC0xMTQ0LDEwICsxMTQ0LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcg
aXMgbm90IGEgZnVuY3Rpb24iKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywg
YXNPYmplY3QodG9JU09WYWx1ZSksIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5l
bXB0eUxpc3QoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAocmVz
dWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5nIGRpZCBub3QgcmV0dXJuIGEgcHJpbWl0aXZl
IHZhbHVlIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDE2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01
Miw2ICs1Miw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRUNN
QVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIGlzQ29uc3RydWN0b3IgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS5pc0NvbnN0cnVjdG9yKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oaXNDb25zdHJ1Y3RvcikpOworICAgIHJldHVybiBqc0Jvb2xlYW4oaXNDb25z
dHJ1Y3Rvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJu
YWxGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDYgKzI5LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZXNTcGVjSXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAkocmV2aXNpb24g
MjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04OSwxNCArODksMTMgQEAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RQogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKIGlubGluZSBKU09iamVjdCogdGhyb3dSYW5nZUVycm9yKEV4ZWNT
dGF0ZSogc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkgeyByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KHN0YXRlLCBlcnJvck1lc3NhZ2UpKTsgfQogCi0vLyBDb252ZW5pZW5jZSB3cmFwcGVycywgd3Jh
cCByZXN1bHQgYXMgYW4gRW5jb2RlZEpTVmFsdWUuCiBpbmxpbmUgdm9pZCB0aHJvd1ZNRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24p
IHsgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV4Y2VwdGlvbik7IH0KLWlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29w
ZSwgSlNWYWx1ZSBlcnJvcikgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBlcnJvcikpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGVycm9y
TWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoZXJyb3JNZXNzYWdlKSkpKTsgfQot
aW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBU
aHJvd1Njb3BlJiBzY29wZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlKSk7IH0KLWlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEFTQ0lJTGl0ZXJhbCBlcnJvck1l
c3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgZXJyb3JNZXNzYWdlKSk7IH0KLWlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIGVycm9yTWVzc2FnZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVJh
bmdlRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dSYW5nZUVycm9y
KHN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKSk7IH0KK2lubGluZSBKU1ZhbHVlIHRocm93Vk1F
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBKU1ZhbHVlIGVycm9yKSB7
IHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpOyB9CitpbmxpbmUgSlNW
YWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKSB7IHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKGVycm9yTWVzc2FnZSkpKTsgfQoraW5s
aW5lIEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUm
IHNjb3BlKSB7IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7IH0KK2lubGluZSBK
U1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29w
ZSwgQVNDSUlMaXRlcmFsIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIGVycm9yTWVzc2FnZSk7IH0KK2lubGluZSBKU1ZhbHVlIHRocm93Vk1UeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIHsgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3Nh
Z2UpOyB9CitpbmxpbmUgSlNWYWx1ZSB0aHJvd1ZNUmFuZ2VFcnJvcihFeGVjU3RhdGUqIHN0YXRl
LCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJu
IHRocm93UmFuZ2VFcnJvcihzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7IH0KIAogY2xhc3Mg
U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewog
cHJpdmF0ZToKQEAgLTExOCwxMiArMTE3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uOwogICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YykKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIHN0YXRpY19jYXN0PFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbio+KGV4ZWMt
PmpzQ2FsbGVlKCkpLT5tX21lc3NhZ2UpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAogICAgIHN0YXRp
YyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKQEAgLTEzMiwxMiArMTMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBzdGF0aWNfY2FzdDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24q
PihleGVjLT5qc0NhbGxlZSgpKS0+bV9tZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRh
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtNDgsMTUgKzQ4LDE1IEBAIHZvaWQgRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0KIAogLy8gRUNNQSAxNS45LjMKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRl
cnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNz
YWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLT5lcnJvclN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwg
VHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShl
eGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNl
KTsKIH0KIAogQ29uc3RydWN0VHlwZSBFcnJvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC02NSwxMSArNjUsMTEg
QEAgQ29uc3RydWN0VHlwZSBFcnJvckNvbnN0cnVjdG9yOjpnZXRDb25zdAogICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpz
Q2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0
ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAogQ2FsbFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEVycm9y
UHJvdG90eXBlKTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC02NSw3ICs2
NSw3IEBAIHZvaWQgRXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIC8vIEVDTUEtMjYyIDUuMSwgMTUuMTEuNC40Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtODIsMTEgKzgyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZXJyb3JQcm90b0YKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhl
YywgdGhpc09iaik7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVh
cmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNo
ZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGVhcmx5UmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gZWFybHlSZXR1cm5WYWx1ZTsKIAog
ICAgIC8vIDMuIExldCBuYW1lIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBp
bnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJuYW1lIi4KICAgICBKU1ZhbHVlIG5h
bWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyA0LiBJZiBuYW1lIGlzIHVuZGVm
aW5lZCwgdGhlbiBsZXQgbmFtZSBiZSAiRXJyb3IiOyBlbHNlIGxldCBuYW1lIGJlIFRvU3RyaW5n
KG5hbWUpLgogICAgIFN0cmluZyBuYW1lU3RyaW5nOwpAQCAtOTQsMTIgKzk0LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAgICAgbmFtZVN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9
IG5hbWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIH0KIAogICAgIC8vIDUuIExldCBtc2cgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm1lc3Nh
Z2UiLgogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIC8vIChzaWMpCiAgICAgLy8gNi4gSWYgbXNnIGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbXNn
IGJlIHRoZSBlbXB0eSBTdHJpbmc7IGVsc2UgbGV0IG1zZyBiZSBUb1N0cmluZyhtc2cpLgpAQCAt
MTA5LDIwICsxMDksMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3Rv
RgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKICAgICAvLyA4LiBJZiBuYW1lIGlz
IHRoZSBlbXB0eSBTdHJpbmcsIHJldHVybiBtc2cuCiAgICAgaWYgKCFuYW1lU3RyaW5nLmxlbmd0
aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lc3NhZ2UuaXNTdHJpbmcoKSA/
IG1lc3NhZ2UgOiBqc1N0cmluZyhleGVjLCBtZXNzYWdlU3RyaW5nKSk7CisgICAgICAgIHJldHVy
biBtZXNzYWdlLmlzU3RyaW5nKCkgPyBtZXNzYWdlIDoganNTdHJpbmcoZXhlYywgbWVzc2FnZVN0
cmluZyk7CiAKICAgICAvLyA5LiBJZiBtc2cgaXMgdGhlIGVtcHR5IFN0cmluZywgcmV0dXJuIG5h
bWUuCiAgICAgaWYgKCFtZXNzYWdlU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG5hbWUuaXNTdHJpbmcoKSA/IG5hbWUgOiBqc1N0cmluZyhleGVjLCBuYW1l
U3RyaW5nKSk7CisgICAgICAgIHJldHVybiBuYW1lLmlzU3RyaW5nKCkgPyBuYW1lIDoganNTdHJp
bmcoZXhlYywgbmFtZVN0cmluZyk7CiAKICAgICAvLyAxMC4gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29uY2F0ZW5hdGluZyBuYW1lLCAiOiIsIGEgc2luZ2xlIHNwYWNlIGNoYXJhY3RlciwgYW5kIG1z
Zy4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIG5hbWVTdHJpbmcsICI6ICIsIG1lc3NhZ2VTdHJpbmcp
KTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBuYW1lU3RyaW5nLCAi
OiAiLCBtZXNzYWdlU3RyaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA4LCAyMDEzLCAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtNTAsMTAgKzUwLDEwIEBAIHZvaWQgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6ZmluaXNo
Q3JlYXRpb24KICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RX
aXRoRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anND
YWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6
OkZ1bmN0aW9uLCBleGVjLT5uZXdUYXJnZXQoKSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5j
dGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkZ1bmN0aW9uLCBleGVjLT5u
ZXdUYXJnZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAt
NjIsMTAgKzYyLDEwIEBAIENvbnN0cnVjdFR5cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q28K
ICAgICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9zdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Db25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncykpOworICAgIHJldHVybiBj
b25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUo
KSktPmdsb2JhbE9iamVjdCgpLCBhcmdzKTsKIH0KIAogLy8gRUNNQSAxNS4zLjEgVGhlIEZ1bmN0
aW9uIENvbnN0cnVjdG9yIENhbGxlZCBhcyBhIEZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00MSw3ICs0MSw3IEBA
IFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJ
bmZvIEZ1bmN0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25Qcm90b3R5cGUpIH07CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblBy
b3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogSW50ZXJuYWxGdW5j
dGlvbih2bSwgc3RydWN0dXJlKQpAQCAtNzUsOSArNzUsOSBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90
eXBlOjppbml0UmVzdHJpY3RlZFByCiAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzLCBlcnJvckdldHRlclNldHRlciwgRG9udEVudW0gfCBBY2Nl
c3Nvcik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5j
dGlvblByb3RvdHlwZShFeGVjU3RhdGUqKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAv
LyBFQ01BIDE1LjMuNApAQCAtODcsNyArODcsNyBAQCBDYWxsVHlwZSBGdW5jdGlvblByb3RvdHlw
ZTo6Z2V0Q2FsbERhdGEoCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTcsMTMgKzk3LDEzIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7CiAgICAgICAgIGlmIChm
dW5jdGlvbi0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSh2bSksICIoKSB7
XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKTsKKyAgICAgICAgICAgIHJldHVybiBqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSh2bSksICIoKSB7
XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgICAgICB9CiAKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNDbGFzcygpKSB7CiAgICAgICAgICAgICBTdHJpbmdWaWV3IGNs
YXNzU291cmNlID0gZXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS52aWV3KCk7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGNsYXNzU291cmNlLnRvU3Ry
aW5nV2l0aG91dENvcHlpbmcoKSkpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGNsYXNzU291cmNlLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKEpTQXN5bmNGdW5jdGlvbjo6aW5mbygpKSkgewpA
QCAtMTEyLDcgKzExMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Q
cm8KICAgICAgICAgICAgIFN0cmluZ1ZpZXcgc291cmNlID0gZXhlY3V0YWJsZS0+c291cmNlKCku
cHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1l
dGVyc1N0YXJ0T2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0KCkgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
ZnVuY3Rpb25IZWFkZXIsIGZ1bmN0aW9uLT5uYW1lKHZtKSwgc291cmNlKSk7CisgICAgICAgICAg
ICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBmdW5jdGlvbkhlYWRlciwgZnVu
Y3Rpb24tPm5hbWUodm0pLCBzb3VyY2UpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIGZ1
bmN0aW9uSGVhZGVyID0gZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uKCkgPyAiIiA6ICJmdW5j
dGlvbiAiOwpAQCAtMTIxLDEzICsxMjEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblBybwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zm
c2V0KCksCiAgICAgICAgICAgICBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSAr
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLmxlbmd0aCgpKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
ZXhlYywgZnVuY3Rpb25IZWFkZXIsIGZ1bmN0aW9uLT5uYW1lKHZtKSwgc291cmNlKSk7CisgICAg
ICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZ1bmN0aW9uSGVhZGVyLCBm
dW5jdGlvbi0+bmFtZSh2bSksIHNvdXJjZSk7CiAgICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5p
bmhlcml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkpKSB7CiAgICAgICAgIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKHRoaXNWYWx1ZSk7CiAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSgpLCAiKCkg
e1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSk7CisgICAgICAgIHJldHVybiBqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSgpLCAiKCkge1xuICAg
IFtuYXRpdmUgY29kZV1cbn0iKTsKICAgICB9CiAKICAgICBpZiAodGhpc1ZhbHVlLmlzT2JqZWN0
KCkpIHsKQEAgLTEzNyw3ICsxMzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUHJvCiAgICAgICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIGNsYXNzSW5mbyA9IG9iamVjdC0+Y2xhc3NJbmZvKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgImZ1bmN0aW9u
ICIsIGNsYXNzSW5mby0+Y2xhc3NOYW1lLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICJmdW5jdGlvbiAiLCBjbGFzc0luZm8tPmNsYXNzTmFtZSwgIigpIHtcbiAgICBbbmF0aXZlIGNv
ZGVdXG59Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvbkNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MCwxNiArNTEsMTYgQEAgdm9pZCBHZW5lcmF0b3JGdW5jdGlv
bkNvbnN0cnVjdG9yOjpmaW5pcwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVt
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyYXRv
ckZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpH
ZW5lcmF0b3IpKTsKKyAgICByZXR1cm4gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rp
b25Db25zdHJ1Y3Rpb25Nb2RlOjpHZW5lcmF0b3IpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2Vu
ZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlz
dCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rp
b24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpHZW5lcmF0b3IsIGV4ZWMtPm5l
d1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0
aW9uQ29uc3RydWN0aW9uTW9kZTo6R2VuZXJhdG9yLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAK
IENhbGxUeXBlIEdlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2Vs
bCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExvZyhFeGVj
U3RhdGUqKTsKIAogfQogCkBAIC04MSwxNSArODEsMTUgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3Q6OmRpcwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUg
dGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHZhbHVlID0gdGFyZ2V0LnRv
V1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZGF0
YUxvZyh2YWx1ZSwgIlxuIik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFu
V2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1
IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRsQ29sbGF0b3JDb25zdHJ1
Y3Rvcik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRv
ckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbnRs
Q29sbGF0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYQogICAgIG1fY29sbGF0b3JTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBjb2xsYXRvclN0cnVjdHVyZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxDb2xsYXRvcihFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MSwxNyArOTEsMTcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIC8vIDIuIExldCBjb2xsYXRv
ciBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVDb2xsYXRvclBy
b3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGNvbGxhdG9yKS4KICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKS0+Y29sbGF0b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0gSW50
bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKGNvbGxhdG9yKTsK
IAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29sbGF0b3IoY29sbGF0b3IsIGxvY2FsZXMs
IG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBjb2xsYXRvci0+aW5pdGlhbGl6
ZUNvbGxhdG9yKCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0ZS0+YXJndW1lbnQoMSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29sbGF0b3IpOworICAgIHJldHVybiBjb2xs
YXRvcjsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxD
b2xsYXRvcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgLy8gMTAuMS4yIEludGwu
Q29sbGF0b3IgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAx
LiBJZiBOZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUg
ZnVuY3Rpb24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgpAQCAtMTIw
LDcgKzEyMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAog
ICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29sbGF0b3IoY29sbGF0b3IsIGxvY2FsZXMsIG9w
dGlvbnMpLgogICAgIGNvbGxhdG9yLT5pbml0aWFsaXplQ29sbGF0b3IoKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb2xsYXRvcik7CisgICAgcmV0dXJuIGNvbGxhdG9yOwogfQogCiBDb25zdHJ1Y3RUeXBl
IEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xMzUsNyArMTM1LDcgQEAgQ2FsbFR5cGUgSW50
bENvbGxhdG9yQ29uc3RydWN0b3I6OmdldENhbAogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDUsMTIgKzE0NSwxMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvCiAgICAgVmVjdG9yPFN0cmluZz4g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxl
cykuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDMuIFJldHVybiBT
dXBwb3J0ZWRMb2NhbGVzKCVDb2xsYXRvciUuW1thdmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3Rl
ZExvY2FsZXMsIG9wdGlvbnMpLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
dGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcygqc3RhdGUsIGdsb2Jh
bE9iamVjdC0+aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpLCByZXF1ZXN0ZWRMb2NhbGVz
LCBzdGF0ZS0+YXJndW1lbnQoMSkpKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkTG9jYWxlcygqc3Rh
dGUsIGdsb2JhbE9iamVjdC0+aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpLCByZXF1ZXN0
ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwogfQogCiB2b2lkIEludGxDb2xsYXRvckNv
bnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fn
b25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29t
cGFyZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxDb2xsYXRvclByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvclByb3RvdHlwZUdldHRlckNvbXBh
cmUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRv
clByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIEludGxDb2xsYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkwLDIzICs5MCwyMyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJp
bmcoeCkuCiAgICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3Rh
dGUpOwogICAgIC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICAvLyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5KS4KICAgICBKU1N0cmlu
ZyogeSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSk7CiAgICAgLy8gOC4gUmV0
dXJuSWZBYnJ1cHQoWSkuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8v
IDkuIFJldHVybiBDb21wYXJlU3RyaW5ncyhjb2xsYXRvciwgWCwgWSkuCiAgICAgYXV0byB4Vmll
d1dpdGhTdHJpbmcgPSB4LT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoKnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGF1dG8geVZpZXdXaXRoU3RyaW5nID0geS0+
dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjb2xsYXRvci0+Y29tcGFyZVN0cmluZ3MoKnN0YXRlLCB4Vmlld1dpdGhTdHJpbmcudmlldywg
eVZpZXdXaXRoU3RyaW5nLnZpZXcpKTsKKyAgICByZXR1cm4gY29sbGF0b3ItPmNvbXBhcmVTdHJp
bmdzKCpzdGF0ZSwgeFZpZXdXaXRoU3RyaW5nLnZpZXcsIHlWaWV3V2l0aFN0cmluZy52aWV3KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVH
ZXR0ZXJDb21wYXJlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTExNSw3ICsxMTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxDb2xsYXRvCiAgICAgLy8gMS4gTGV0IGNvbGxhdG9yIGJlIHRoaXMgQ29sbGF0b3Igb2Jq
ZWN0LgogICAgIEludGxDb2xsYXRvciogY29sbGF0b3IgPSBqc0R5bmFtaWNDYXN0PEludGxDb2xs
YXRvcio+KHN0YXRlLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFjb2xsYXRvcikKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xsYXRvciIpKSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50
bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBh
biBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xsYXRvciIpKTsKIAogICAgIEpTQm91bmRGdW5j
dGlvbiogYm91bmRDb21wYXJlID0gY29sbGF0b3ItPmJvdW5kQ29tcGFyZSgpOwogICAgIC8vIDIu
IElmIGNvbGxhdG9yLltbYm91bmRDb21wYXJlXV0gaXMgdW5kZWZpbmVkLApAQCAtMTI3LDE1ICsx
MjcsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0bwogCiAgICAg
ICAgIC8vIGMuIExldCBiYyBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7
KS4KICAgICAgICAgYm91bmRDb21wYXJlID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0
YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgY29sbGF0b3IsIG51bGxwdHIsIDIsIEFT
Q0lJTGl0ZXJhbCgiY29tcGFyZSIpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIC8vIGQuIFNldCBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1dIHRvIGJj
LgogICAgICAgICBjb2xsYXRvci0+c2V0Qm91bmRDb21wYXJlKHZtLCBib3VuZENvbXBhcmUpOwog
ICAgIH0KICAgICAvLyAzLiBSZXR1cm4gY29sbGF0b3IuW1tib3VuZENvbXBhcmVdXS4KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJvdW5kQ29tcGFyZSk7CisgICAgcmV0dXJuIGJvdW5kQ29t
cGFyZTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JQcm90
b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50bENvbGxhdG9yUHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0MywxMCArMTQzLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KICAgICAvLyAxMC4zLjUgSW50bC5Db2xs
YXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICBJbnRs
Q29sbGF0b3IqIGNvbGxhdG9yID0ganNEeW5hbWljQ2FzdDxJbnRsQ29sbGF0b3IqPihzdGF0ZS0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY29sbGF0b3IpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwu
Q29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhhdCdz
IG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xsYXRvciIpKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5Db2xs
YXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90
IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIENvbGxhdG9yIikpOwogCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29sbGF0b3ItPnJlc29sdmVkT3B0
aW9ucygqc3RhdGUpKTsKKyAgICByZXR1cm4gY29sbGF0b3ItPnJlc29sdmVkT3B0aW9ucygqc3Rh
dGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0
aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IpOwogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRl
ZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmZpbmkKICAgICBtX2RhdGVUaW1lRm9ybWF0U3Ry
dWN0dXJlLnNldCh2bSwgdGhpcywgZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUpOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3Jt
YXQoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SW50bERhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtOTEsMTcgKzkxLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29u
c3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUlKS4KICAgICAvLyAz
LiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3Rh
dGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IqPihz
dGF0ZS0+anNDYWxsZWUoKSktPmRhdGVUaW1lRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZv
cm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFT
U0VSVChkYXRlVGltZUZvcm1hdCk7CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVU
aW1lRm9ybWF0KGRhdGVUaW1lRm9ybWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgZGF0ZVRpbWVGb3JtYXQtPmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCgq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGRhdGVUaW1lRm9ybWF0KTsKKyAgICByZXR1cm4gZGF0ZVRpbWVG
b3JtYXQ7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRs
RGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEludGxEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8v
IDEyLjEuMiBJbnRsLkRhdGVUaW1lRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01B
LTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1Rh
cmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJl
IE5ld1RhcmdldC4KQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNv
bXBhdGliaWxpdHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZv
ckxlZ2FjeUludGxDb25zdHJ1Y3RvcjxJbnRsRGF0ZVRpbWVGb3JtYXQ+KCpzdGF0ZSwgc3RhdGUt
PnRoaXNWYWx1ZSgpLCBjYWxsZWUsIFsmXSAoVk0mIHZtKSB7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEludGxJbnN0YW5jZVdpdGhXb3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0cnVjdG9yPEludGxE
YXRlVGltZUZvcm1hdD4oKnN0YXRlLCBzdGF0ZS0+dGhpc1ZhbHVlKCksIGNhbGxlZSwgWyZdIChW
TSYgdm0pIHsKICAgICAgICAgLy8gMi4gTGV0IGRhdGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3Jl
YXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSku
CiAgICAgICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRhdGVUaW1lRm9ybWF0KS4KICAgICAgICAg
SW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6
Y3JlYXRlKHZtLCBjYWxsZWUtPmRhdGVUaW1lRm9ybWF0U3RydWN0dXJlKCkpOwpAQCAtMTIwLDcg
KzEyMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAg
ICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVEYXRlVGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwg
bG9jYWxlcywgb3B0aW9ucykuCiAgICAgICAgIGRhdGVUaW1lRm9ybWF0LT5pbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgx
KSk7CiAgICAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdDsKLSAgICB9KSk7CisgICAgfSk7CiB9
CiAKIENvbnN0cnVjdFR5cGUgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTEzNSw3
ICsxMzUsNyBAQCBDYWxsVHlwZSBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAgICAg
cmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTE0NywxMSArMTQ3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW0KIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyAzLiBSZXR1cm4g
U3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRp
b25zKS4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShz
dXBwb3J0ZWRMb2NhbGVzKCpzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cywgc3RhdGUtPmFyZ3VtZW50KDEpKSk7CisgICAgcmV0dXJuIHN1cHBvcnRlZExvY2FsZXMoKnN0
YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQo
MSkpOwogfQogCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1h
dFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDAsOCArNDAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlR2V0dGVy
Rm9ybWF0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0
ZSopOwogCiB9CiAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90
b3R5cGU6OmZpbmlzaAogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1h
dERhdGVUaW1lKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTk1LDIxICs5NSwyMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gMy4gSWYgZGF0ZSBpcyBub3QgcHJvdmlkZWQgb3Ig
aXMgdW5kZWZpbmVkLCB0aGVuCiAgICAgaWYgKGRhdGUuaXNVbmRlZmluZWQoKSkgewogICAgICAg
ICAvLyBhLiBMZXQgeCBiZSAlRGF0ZV9ub3clKCkuCi0gICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGRhdGVOb3coc3RhdGUpKS50b051bWJlcihzdGF0ZSk7CisgICAgICAgIHZhbHVlID0g
ZGF0ZU5vdyhzdGF0ZSkudG9OdW1iZXIoc3RhdGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IDQuIEVsc2UKICAgICAgICAgLy8gYS4gTGV0IHggYmUgVG9OdW1iZXIoZGF0ZSkuCiAgICAgICAg
IHZhbHVlID0gZGF0ZS50b051bWJlcihzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJy
dXB0KHgpLgotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAK
ICAgICAvLyA1LiBSZXR1cm4gRm9ybWF0RGF0ZVRpbWUoZHRmLCB4KS4KICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXQtPmZvcm1hdCgqc3RhdGUs
IHZhbHVlKSk7CisgICAgcmV0dXJuIGZvcm1hdC0+Zm9ybWF0KCpzdGF0ZSwgdmFsdWUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTEyMiwxMyArMTIyLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50bERhdGVUaW0KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgaWYgKCFkdGYpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0YXRlLT50aGlzVmFsdWUoKS5nZXQoc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGR0ZiA9IGpzRHluYW1pY0Nhc3Q8
SW50bERhdGVUaW1lRm9ybWF0Kj4odmFsdWUpOwogICAgIH0KIAogICAgIC8vIDIuIFJldHVybklm
QWJydXB0KGR0ZikuCiAgICAgaWYgKCFkdGYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuRGF0ZVRp
bWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGltZUZvcm1hdCIpKSk7CisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5EYXRlVGlt
ZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIERhdGVUaW1lRm9ybWF0IikpOwogCiAgICAgSlNCb3VuZEZ1
bmN0aW9uKiBib3VuZEZvcm1hdCA9IGR0Zi0+Ym91bmRGb3JtYXQoKTsKICAgICAvLyAzLiBJZiB0
aGUgW1tib3VuZEZvcm1hdF1dIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1hdCBv
YmplY3QgaXMgdW5kZWZpbmVkLApAQCAtMTM5LDE5ICsxMzksMTkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRPYmpl
Y3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgQVNDSUlMaXRlcmFs
KCJmb3JtYXQiKSwgSW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVUaW1lLCBOb0ludHJp
bnNpYyk7CiAgICAgICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwogICAgICAgICBpZiAo
IWJvdW5kQXJncykKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRP
Zk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihzdGF0ZSwgc2NvcGUpOwogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBC
b3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3Jt
YXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFy
Z2V0T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAvLyBkLiBTZXQg
ZHRmLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgZHRmLT5zZXRCb3VuZEZvcm1hdCh2
bSwgYm91bmRGb3JtYXQpOwogICAgIH0KICAgICAvLyA0LiBSZXR1cm4gZHRmLltbYm91bmRGb3Jt
YXRdXS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJvdW5kRm9ybWF0KTsKKyAgICByZXR1
cm4gYm91bmRGb3JtYXQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNS
ZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjMs
MTUgKzE2MywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAg
IGlmICghZGF0ZVRpbWVGb3JtYXQpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLT50
aGlzVmFsdWUoKS5nZXQoc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlu
dGxTdWJzdGl0dXRlVmFsdWVQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGRhdGVUaW1lRm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJ
bnRsRGF0ZVRpbWVGb3JtYXQqPih2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFkYXRlVGltZUZv
cm1hdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFs
aXplZCBhcyBhIERhdGVUaW1lRm9ybWF0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3Rv
dHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3JtYXQiKSk7CiAKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdC0+cmVzb2x2ZWRP
cHRpb25zKCpzdGF0ZSkpOworICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC0+cmVzb2x2ZWRPcHRp
b25zKCpzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIg
KHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IpOwogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9j
YWxlc09mKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaAogICAgIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJl
LnNldCh2bSwgdGhpcywgbnVtYmVyRm9ybWF0U3RydWN0dXJlKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bE51bWJlckZvcm1hdChFeGVjU3Rh
dGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVt
YmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEsMTcgKzkx
LDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyAy
LiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1Rh
cmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0
KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBq
c0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpLT5u
dW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0Ojpj
cmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKG51bWJlckZvcm1hdCk7CiAKICAgICAv
LyA0LiBSZXR1cm4gSW5pdGlhbGl6ZU51bWJlckZvcm1hdChudW1iZXJGb3JtYXQsIGxvY2FsZXMs
IG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBudW1iZXJGb3JtYXQtPmluaXRp
YWxpemVOdW1iZXJGb3JtYXQoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1
bWVudCgxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1iZXJGb3JtYXQpOworICAg
IHJldHVybiBudW1iZXJGb3JtYXQ7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgLy8gMTEuMS4yIEludGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25z
XV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwg
bGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3
VGFyZ2V0IGJlIE5ld1RhcmdldC4KQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBw
cm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJu
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29y
a2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3RvcjxJbnRsTnVtYmVyRm9ybWF0Pigqc3RhdGUs
IHN0YXRlLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBbJl0gKFZNJiB2bSkgeworICAgIHJldHVybiBj
b25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3Rv
cjxJbnRsTnVtYmVyRm9ybWF0Pigqc3RhdGUsIHN0YXRlLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBb
Jl0gKFZNJiB2bSkgewogICAgICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5
Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUp
LgogICAgICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAgICAgICBJ
bnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUo
dm0sIGNhbGxlZS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwpAQCAtMTIwLDcgKzEyMCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgLy8gNC4g
UmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0LCBsb2NhbGVzLCBvcHRp
b25zKS4KICAgICAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXplTnVtYmVyRm9ybWF0KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwogICAgICAgICByZXR1
cm4gbnVtYmVyRm9ybWF0OwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogQ29uc3RydWN0VHlwZSBJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBDYWxsVHlwZSBJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmdlCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25z
dHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9j
YWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ3LDExICsxNDcs
MTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAgICAgLy8g
Mi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVz
KS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9j
YWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKnN0YXRlLCBh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpKTsK
KyAgICByZXR1cm4gc3VwcG9ydGVkTG9jYWxlcygqc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJl
cXVlc3RlZExvY2FsZXMsIHN0YXRlLT5hcmd1bWVudCgxKSk7CiB9CiAKIHZvaWQgSW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsOCArMzgsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJl
ckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2
ZWRPcHRpb25zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
TnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVk
T3B0aW9ucyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3IKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJG
b3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEsMTQgKzkxLDE0IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAgICAvLyA0LiBMZXQgeCBiZSBUb051bWJlcih2
YWx1ZSkuCiAgICAgZG91YmxlIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b051bWJlcihz
dGF0ZSk7CiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoeCkuCi0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIC8vIDYuIFJldHVybiBGb3JtYXROdW1iZXIobmYsIHgpLgogICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1h
dC0+Zm9ybWF0TnVtYmVyKCpzdGF0ZSwgbnVtYmVyKSk7CisgICAgcmV0dXJuIG51bWJlckZvcm1h
dC0+Zm9ybWF0TnVtYmVyKCpzdGF0ZSwgbnVtYmVyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlw
ZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExMSwx
MiArMTExLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAg
aWYgKCFuZikgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpLmdl
dChzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVW
YWx1ZVByaXZhdGVOYW1lKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgbmYgPSBqc0R5bmFtaWNDYXN0PEludGxOdW1iZXJGb3JtYXQqPih2YWx1ZSk7
CiAgICAgfQogCiAgICAgaWYgKCFuZikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5OdW1iZXJGb3Jt
YXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBOdW1iZXJGb3JtYXQiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuTnVtYmVyRm9ybWF0LnBy
b3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRp
YWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0IikpOwogICAgIAogICAgIEpTQm91bmRGdW5jdGlvbiog
Ym91bmRGb3JtYXQgPSBuZi0+Ym91bmRGb3JtYXQoKTsKICAgICAvLyAyLiBJZiBuZi5bW2JvdW5k
Rm9ybWF0XV0gaXMgdW5kZWZpbmVkLApAQCAtMTI3LDE5ICsxMjcsMTkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRP
YmplY3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgQVNDSUlMaXRl
cmFsKCJmb3JtYXQiKSwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIsIE5vSW50cmlu
c2ljKTsKICAgICAgICAgSlNBcnJheSogYm91bmRBcmdzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7CiAgICAgICAgIGlmICgh
Ym91bmRBcmdzKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9m
TWVtb3J5RXJyb3Ioc3RhdGUsIHNjb3BlKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSk7CiAKICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJv
dW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3VuZEZvcm1h
dCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJn
ZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgLy8gZC4gU2V0IG5m
LltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYtPnNldEJvdW5kRm9ybWF0KHZtLCBi
b3VuZEZvcm1hdCk7CiAgICAgfQogICAgIC8vIDMuIFJldHVybiBuZi5bW2JvdW5kRm9ybWF0XV0u
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShib3VuZEZvcm1hdCk7CisgICAgcmV0dXJuIGJv
dW5kRm9ybWF0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJG
b3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9w
dGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNTEsMTUgKzE1MSwx
NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAgIGlmICghbnVt
YmVyRm9ybWF0KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCku
Z2V0KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0
ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICBudW1iZXJGb3JtYXQgPSBqc0R5bmFtaWNDYXN0PEludGxOdW1iZXJGb3Jt
YXQqPih2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFudW1iZXJGb3JtYXQpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVk
IG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9y
bWF0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNh
bGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIE51bWJl
ckZvcm1hdCIpKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG51bWJlckZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKCpzdGF0ZSkpOworICAgIHJldHVy
biBudW1iZXJGb3JtYXQtPnJlc29sdmVkT3B0aW9ucygqc3RhdGUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5j
b20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vrb2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtA
Z21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKEludGxPYmplY3QpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBpbnRsT2JqZWN0RnVuY0dldENhbm9uaWNhbExvY2FsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyhF
eGVjU3RhdGUqKTsKIAogfQogCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBWZWN0b3I8U3RyaW5nPiBu
dW1iZXJpbmdTeXN0ZW1zRm9yTG9jYWxlCiAgICAgcmV0dXJuIG51bWJlcmluZ1N5c3RlbXM7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW50bE9iamVjdEZ1bmNHZXRDYW5vbmlj
YWxMb2NhbGVzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW50bE9i
amVjdEZ1bmNHZXRDYW5vbmljYWxMb2NhbGVzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTAyNywyMiArMTAyNywyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGludGxPYmplY3RGCiAKICAgICAvLyAxLiBMZXQgbGwgYmUgPyBDYW5vbmljYWxpemVMb2NhbGVM
aXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IGxvY2FsZUxpc3QgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMi4gUmV0dXJuIENyZWF0ZUFycmF5RnJvbUxpc3Qo
bGwpLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+anNDYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNBcnJheSogbG9jYWxlQXJyYXkgPSBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgbG9jYWxl
TGlzdC5zaXplKCkpOwogICAgIGlmICghbG9jYWxlQXJyYXkpIHsKICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGF1dG8gbGVuZ3RoID0gbG9j
YWxlTGlzdC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBsb2NhbGVBcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1N0cmluZyhz
dGF0ZSwgbG9jYWxlTGlzdFtpXSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2NhbGVBcnJheSk7Cisg
ICAgcmV0dXJuIGxvY2FsZUFycmF5OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlckZ1bmNJc1ZpZXcoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyRnVuY0lzVmlldyhF
eGVjU3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
c19pbmZvID0gewogICAgICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsCkBAIC04MCw3ICs4
MCw3IEBAIFN0cnVjdHVyZSogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmUKICAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkpIHsKICAgICAgICAgbGVuZ3RoID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9JbmRleChleGVjLCAibGVuZ3RoIik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0
aW9uIGRvZXNuJ3Qgc2F5IHNvLCBpdCBpcyBpbiBmYWN0IGNvcnJlY3QgdG8gc2F5CiAgICAgICAg
IC8vICJuZXcgQXJyYXlCdWZmZXIoKSIuIFRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYWxsb2Nh
dGluZyBhbiBhcnJheSBidWZmZXIKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgCiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aCwgMSk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7
CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IAogICAgIGlmIChjb25zdHJ1Y3Rvci0+c2hhcmluZ01vZGUoKSA9PSBBcnJheUJ1ZmZlclNoYXJp
bmdNb2RlOjpTaGFyZWQpCiAgICAgICAgIGJ1ZmZlci0+bWFrZVNoYXJlZCgpOwpAQCAtMTA5LDE3
ICsxMDksMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
IEFTU0VSVChjb25zdHJ1Y3Rvci0+c2hhcmluZ01vZGUoKSA9PSBidWZmZXItPnNoYXJpbmdNb2Rl
KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQo
KSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZShjb25z
dHJ1Y3Rvci0+c2hhcmluZ01vZGUoKSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBh
cnJheUJ1ZmZlclN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXIpKTsKICAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEFycmF5QnVmZmVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsICJBcnJheUJ1ZmZlciIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJl
Q2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFycmF5QnVmZmVyIik7CiB9
CiAKIENvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RE
YXRhKApAQCAtMTM4LDkgKzEzOCw5IEBAIENhbGxUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cjo6Z2V0Q2EKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAyNC4xLjMuMQotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlckZ1bmNJc1ZpZXcoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyRnVuY0lzVmlldyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5h
bWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGV4ZWMtPmFyZ3VtZW50KDApKSkpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGV4ZWMtPmFy
Z3VtZW50KDApKSk7CiB9CiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC01MCwyNCArNTAsMjQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJTbGljZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQu
IikpOwogICAgIAogICAgIGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgaW50MzJf
dCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVu
ZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICBlbmQgPSB0
aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKICAgICAKICAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2UoYmVnaW4sIGVuZCk7
CiAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUobmV3QnVm
ZmVyLT5zaGFyaW5nTW9kZSgpKTsKICAgICAKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBK
U0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKICAgICAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNCb3VuZEZ1bmN0aW9uOjpz
X2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNCb3VuZEZ1bmN0aW9uKSB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJv
dW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0
aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKQEAgLTUxLDEwICs1MSwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0YXJnZXRGdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpLCBhcmdzKSk7CisgICAgcmV0dXJuIGNh
bGwoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYm91bmRGdW5jdGlv
bi0+Ym91bmRUaGlzKCksIGFyZ3MpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGJvdW5kRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBib3VuZEZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNCb3VuZEZ1bmN0
aW9uKiBib3VuZEZ1bmN0aW9uID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGV4ZWMtPmpzQ2Fs
bGVlKCkpOwogCkBAIC03MiwxMCArNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBib3VuZEZ1bmN0aQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEodGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbChleGVjLCB0YXJnZXRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmN0
aW9uLT5ib3VuZFRoaXMoKSwgYXJncykpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIHRhcmdldEZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpLCBh
cmdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZFRoaXNOb0FyZ3NG
dW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24q
PihleGVjLT5qc0NhbGxlZSgpKTsKIApAQCAtODcsMTAgKzg3LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm8KICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YSh0
YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUg
IT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25z
dHJ1Y3QoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IGFyZ3MpKTsKKyAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0Nhc3Q8SlNCb3VuZEZ1
bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKQEAgLTEwOCwyMCArMTA4LDIwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGkKICAgICBDb25zdHJ1Y3REYXRhIGNv
bnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3Ry
dWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJUKGNvbnN0
cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ3MpKTsKKyAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldEZ1bmN0
aW9uLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGlzQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKHN0YXRpY19jYXN0PGJvb2w+KGpzRHlu
YW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSkp
OworICAgIHJldHVybiBKU1ZhbHVlKHN0YXRpY19jYXN0PGJvb2w+KGpzRHluYW1pY0Nhc3Q8SlNC
b3VuZEZ1bmN0aW9uKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5zdGFuY2VCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBoYXNJbnN0YW5jZUJvdW5kRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRPYmplY3QgPSBq
c0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJvdW5kT2JqZWN0LT50YXJnZXRGdW5jdGlvbigp
LT5oYXNJbnN0YW5jZShleGVjLCB2YWx1ZSkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGJvdW5k
T2JqZWN0LT50YXJnZXRGdW5jdGlvbigpLT5oYXNJbnN0YW5jZShleGVjLCB2YWx1ZSkpOwogfQog
CiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFy
Z2V0RnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksMTIgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbChFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0
aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBp
c0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5zdGFuY2VCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSopOwog
CiBjbGFzcyBKU0JvdW5kRnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7CiBwdWJsaWM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lv
biAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwgMjAwNy0yMDA5LCAy
MDEyLCAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC01NzYsMTEgKzU3Niw2IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c051bWJlcih1bnNpZ25lZCAKICAgICByZXR1cm4gSlNWYWx1ZShpKTsKIH0KIAotQUxXQVlTX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSlNVbmRlZmluZWQoKQotewotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUoKQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
MTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pIH07CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bkNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24qIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIq
IGN1c3RvbUdldHRlclNldHRlciA9IGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5jdXN0b21H
ZXR0ZXJTZXR0ZXIoKTsKQEAgLTQ0LDEyICs0NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTQ3VzdG9tR2V0CiAgICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0
dGVyIHNldHRlciA9IGN1c3RvbUdldHRlclNldHRlci0+c2V0dGVyKCk7CiAgICAgICAgIEFTU0VS
VChzZXR0ZXIpOwogICAgICAgICBjYWxsQ3VzdG9tU2V0dGVyKGV4ZWMsIHNldHRlciwgdHJ1ZSwg
ZXhlYy0+dGhpc1ZhbHVlKCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21HZXR0ZXIgZ2V0dGVy
ID0gY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIoKTsKICAgICBBU1NFUlQoZ2V0dGVyKTsKLSAg
ICByZXR1cm4gZ2V0dGVyKGV4ZWMsIEpTVmFsdWU6OmVuY29kZShleGVjLT50aGlzVmFsdWUoKSks
IGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CisgICAgcmV0dXJu
IGdldHRlcihleGVjLCBleGVjLT50aGlzVmFsdWUoKSwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24tPnByb3BlcnR5TmFtZSgpKTsKIH0KIAogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBUeXBlIHR5cGUsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAko
cmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcg
QEAgcHJpdmF0ZToKICAgICBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBUeXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEN1c3RvbUdldHRlclNl
dHRlciosIGNvbnN0IFN0cmluZyYpOwogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSopOworICAg
IHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25D
YWxsKEV4ZWNTdGF0ZSopOwogCiAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b21HZXR0ZXJT
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlclNldHRlci5nZXQoKTsgfQogICAgIGJvb2wg
aXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U2V0dGVyOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjEsMjUgKzYxLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogQGVuZAogKi8KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
R2V0SW50MzIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9h
dDMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRVaW50OChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0Rmxv
YXQ2NChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0dldHRlckJ1ZmZlcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVMZW5ndGgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlT2Zmc2V0KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50OChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQxNihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y1NldFVpbnQzMihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCdWZmZXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVMZW5ndGgoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVPZmZzZXQoRXhlY1N0YXRl
Kik7CiAKIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIFN0cnVjdHVyZSogSlNEYXRhVmlld1Byb3Rv
dHlwZTo6Y3JlYXRlU3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLUVuY29kZWRK
U1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzMCwxMyArMTMwLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRo
b2QgbXVzdCBiZSBhIERhdGFWaWV3IikpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQg
PSBleGVjLT5hcmd1bWVudCgwKS50b0luZGV4KGV4ZWMsICJieXRlT2Zmc2V0Iik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZh
bHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5n
dGgoKTsKQEAgLTE1OSwxMSArMTU5LDExIEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICAgICAgdS5yYXdCeXRlc1tpXSA9ICpkYXRhUHRyKys7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFsdWUodS52YWx1
ZSkpOworICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUodS52YWx1ZSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci1FbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0xNzMsNyArMTczLDcgQEAgRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXciKSk7CiAg
ICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW5kZXgo
ZXhlYywgImJ5dGVPZmZzZXQiKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgY29uc3QgdW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSk7CiAgICAgdW5pb24gewpAQCAtMTgyLDEzICsxODIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgc2V0
RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfSB1OwogCiAgICAgdS52YWx1ZSA9IHRvTmF0aXZl
RnJvbVZhbHVlPEFkYXB0b3I+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7
CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MykgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gZGF0YVZpZXctPmxlbmd0aCgp
OwpAQCAtMjA1LDcgKzIwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICAgICAgKmRhdGFQdHIrKyA9IHUucmF3Qnl0ZXNbaV07CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogI2lmIENPTVBJTEVSKENMQU5HKQpAQCAtMjEzLDcgKzIxMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgogI2VuZGlmCiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZlcihFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZl
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvCiAgICAgaWYgKCF2aWV3KQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkRhdGFWaWV3LnBy
b3RvdHlwZS5idWZmZXIgZXhwZWN0cyB8dGhpc3wgdG8gYmUgYSBEYXRhVmlldyBvYmplY3QiKTsK
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmlldy0+cG9zc2libHlTaGFyZWRKU0J1ZmZl
cihleGVjKSk7CisgICAgcmV0dXJuIHZpZXctPnBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoZXhlYyk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5
dGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTIzNCwxMCArMjM0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm8KICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3RzIHx0aGlzfCB0byBiZSBh
IERhdGFWaWV3IG9iamVjdCIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cih2aWV3LT5sZW5ndGgoKSkpOworICAgIHJldHVybiBqc051bWJlcih2aWV3LT5sZW5ndGgoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5
dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9HZXR0ZXJCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTI0Niw4NSArMjQ2LDg1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm8KICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3RzIHx0aGlzfCB0byBiZSBh
IERhdGFWaWV3IG9iamVjdCIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cih2aWV3LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodmlldy0+Ynl0ZU9m
ZnNldCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY0dldEludDgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERh
dGE8SW50OEFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHJldHVybiBnZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVp
bnQ4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gZ2V0RGF0YTxVaW50
OEFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
cmV0dXJuIGdldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0MzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8
RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVj
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1Nl
dEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0RGF0YTxJ
bnQxNkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQx
NihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXREYXRhPFVpbnQx
NkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
cmV0dXJuIHNldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVj
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1Nl
dEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldERh
dGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNDgsNyArNDgsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjU1LDEyICsyNTUsMTIgQEAgc3RhdGljIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHMo
RXhlY1N0YQogICAgIHJldHVybiBmdW5jdG9yLnJlc3VsdCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1l
bnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4odGhpc1ZhbHVlKTsKICAgICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1
bmN0aW9uKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXRyaWV2ZUFyZ3VtZW50
cyhleGVjLCB0aGlzT2JqKSk7CisgICAgcmV0dXJuIHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRo
aXNPYmopOwogfQogCiBjbGFzcyBSZXRyaWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3RvciB7CkBAIC0z
MTAsMTIgKzMxMCwxMiBAQCBzdGF0aWMgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKEV4
CiAgICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTRnVu
Y3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RG
dW5jdGlvbigpKTsKICAgICBKU1ZhbHVlIGNhbGxlciA9IHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24o
ZXhlYywgdGhpc09iaik7CiAKQEAgLTMyMywxMyArMzIzLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpT
RnVuY3Rpb246OmNhbGxlckdldHRlcigKICAgICBpZiAoIWNhbGxlci5pc09iamVjdCgpIHx8ICFh
c09iamVjdChjYWxsZXIpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKSB7CiAgICAgICAg
IC8vIEl0IGlzbid0IGEgSlNGdW5jdGlvbiwgYnV0IGlmIGl0IGlzIGEgSlNDYWxsZWUgZnJvbSBh
IHByb2dyYW0gb3IgY2FsbCBldmFsLCByZXR1cm4gbnVsbC4KICAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNDYWxsZWUqPihjYWxsZXIpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbGVyKTsK
KyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlcjsKICAg
ICB9CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxl
cik7CiAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpIHx8ICFmdW5j
dGlvbi0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGxlcik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0
byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyIikpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlcjsKKyAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rp
b24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlciIpKTsKIH0KIAogYm9vbCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lv
biAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LTIwMDksIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMDksIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndh
cmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFr
cyBPcmxvdmljaAogICoKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgU2lnbmF0dXJlOwogfQogCiAK
LUpTX0VYUE9SVF9QUklWQVRFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRl
Kik7CiAKIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Vk0mLCBKU09iamVjdCopOwogCkBAIC0xOTUsMTAgKzE5NSw4IEBAIHByaXZhdGU6CiAKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY2FsbGVyR2V0dGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSk7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgYXJndW1lbnRz
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpT
VmFsdWUgY2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAK
ICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fZXhlY3V0YWJsZTsKICAgICBXcml0
ZUJhcnJpZXI8RnVuY3Rpb25SYXJlRGF0YT4gbV9yYXJlRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzIsNyAr
MjcyLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBzdHJ1Y3QgVHlwZWRBcnJh
eUNsYXNzSW5mb3M7CiAKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dOZXV0ZXJlZFR5
cGVkQXJyYXlUeXBlRXJyb3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSk7CisgICAgc3RhdGljIEpTVmFsdWUgdGhyb3dOZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3Io
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIxMDE2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTIsMTAgKzIxMiw3IEBA
IGlubGluZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMjIzLDcgKzIyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5j
dGlvbihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBTdHJ1Y3R1cmUqIHBhcmVudFN0cnVjdHVyZSA9
IGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6
OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJn
ZXQoKSwgcGFyZW50U3RydWN0dXJlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgc2l6ZV90IGFyZ0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogCkBAIC0yMzIs
NyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZQogICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIp
KTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKSk7CisgICAgICAgIHJl
dHVybiBWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIDApOwogICAgIH0KIAogICAg
IEpTVmFsdWUgZmlyc3RWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQw
LDcgKzIzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZW5ndGggPSBzdGQ6Om51bGxvcHQ7CiAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4g
MSkgewogICAgICAgICBvZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0luZGV4
KGV4ZWMsICJieXRlT2Zmc2V0Iik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAgICAgICAgIGlmIChWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpIHsKQEAgLTI0OCwx
NyArMjQ1LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGJ5dGVMZW5ndGhWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpOwogICAgICAgICAgICAgICAgIGlmICghYnl0ZUxlbmd0aFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aFZhbHVlLnRv
SW5kZXgoZXhlYywgImJ5dGVMZW5ndGgiKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgyKS50b0luZGV4KGV4ZWMsICJsZW5ndGgiKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxWaWV3
Q2xhc3M+KGV4ZWMsIHN0cnVjdHVyZSwgSlNWYWx1ZTo6ZW5jb2RlKGZpcnN0VmFsdWUpLCBvZmZz
ZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdX
aXRoQXJndW1lbnRzPFZpZXdDbGFzcz4oZXhlYywgc3RydWN0dXJlLCBKU1ZhbHVlOjplbmNvZGUo
Zmlyc3RWYWx1ZSksIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgpAQCAtMjY5LDExICsyNjYsMTEgQEAgQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsR2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4
ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyaWNU
eXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBWaWV3Q2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lKSk7Cisg
ICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3IoZXhlYywgc2NvcGUsIFZpZXdDbGFzczo6aW5mbygpLT5jbGFzc05hbWUpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQwLDExICszNDAsMTEgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotRW5jb2RlZEpTVmFsdWUgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnRocm93TmV1dGVyZWRUeXBlZEFycmF5VHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRlcmVk
VHlwZWRBcnJheVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0LCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgQVNTRVJUX1VOVVNFRChvYmplY3QsIGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KEpTVmFsdWU6OmRlY29kZShvYmplY3QpKS0+aXNO
ZXV0ZXJlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9iamVjdCwganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KS0+aXNOZXV0ZXJlZCgpKTsKICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVy
cm9yTWVzc2FnZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAsNyBAQCBpbmxpbmUgdW5zaWduZWQgYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
U2V0KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTExMyw3ICsx
MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdW5z
aWduZWQgb2Zmc2V0OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAg
ICAgICBkb3VibGUgb2Zmc2V0TnVtYmVyID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9J
bnRlZ2VyKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKG9mZnNldE51bWJlciA8IDApKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1SYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiT2Zmc2V0IHNob3VsZCBub3QgYmUgbmVn
YXRpdmUiKTsKICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bWlu
KG9mZnNldE51bWJlciwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpKSk7CkBAIC0xMzcsMTUgKzEzNywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgfSBlbHNlCiAgICAgICAgIGxlbmd0aCA9IHNv
dXJjZUFycmF5LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihl
eGVjKTsKIAotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgdGhpc09iamVjdC0+c2V0KGV4ZWMsIG9mZnNldCwgc291cmNlQXJyYXksIDAs
IGxlbmd0aCwgQ29weVR5cGU6OlVub2JzZXJ2YWJsZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY0NvcHlXaXRoaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xNTYsMTQgKzE1NiwxNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBsb25nIGxlbmd0aCA9
IHRoaXNPYmplY3QtPmxlbmd0aCgpOwogICAgIGxvbmcgdG8gPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9y
RW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBsb25nIGZpbmFsID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAy
LCBsZW5ndGgsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IGlmIChmaW5hbCA8IGZyb20pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gZXhlYy0+dGhpc1ZhbHVlKCk7CiAKICAgICBs
b25nIGNvdW50ID0gc3RkOjptaW4obGVuZ3RoIC0gc3RkOjptYXgodG8sIGZyb20pLCBmaW5hbCAt
IGZyb20pOwogCkBAIC0xNzMsMTEgKzE3MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdlbmVyaWNUeXBlCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJy
YXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwogICAgIG1lbW1vdmUoYXJyYXkgKyB0bywg
YXJyYXkgKyBmcm9tLCBjb3VudCAqIHRoaXNPYmplY3QtPmVsZW1lbnRTaXplKTsKIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBleGVj
LT50aGlzVmFsdWUoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNs
dWRlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTE4
OCwxMiArMTg4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
OworICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIAogICAgIEpTVmFsdWUgdmFsdWVU
b0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJh
eUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CkBAIC0yMDEsNyArMjAxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIHR5cGVuYW1lIFZp
ZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0gdGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsK
ICAgICBhdXRvIHRhcmdldE9wdGlvbiA9IFZpZXdDbGFzczo6dG9BZGFwdG9yTmF0aXZlRnJvbVZh
bHVlV2l0aG91dENvZXJjaW9uKHZhbHVlVG9GaW5kKTsKICAgICBpZiAoIXRhcmdldE9wdGlvbikK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKQEAg
LTIwOSwyMCArMjA5LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KCp0YXJnZXRPcHRpb24p
KSkgewogICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAg
ICAgIGlmIChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oYXJyYXlbaW5kZXhdKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAg
ICAgICAgIGlmIChhcnJheVtpbmRleF0gPT0gdGFyZ2V0T3B0aW9uKQotICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0yMzgsNyArMjM4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgSlNW
YWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
dHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CkBAIC0yNDYsMjAg
KzI0NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAg
dHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBl
ZFZlY3RvcigpOwogICAgIGF1dG8gdGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JO
YXRpdmVGcm9tVmFsdWVXaXRob3V0Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFy
Z2V0T3B0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7
CisgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAK
ICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKGFycmF5
W2luZGV4XSA9PSB0YXJnZXRPcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgp
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoLTEpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTI2
OCwxOCArMjY4LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlC
dWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgLy8gMjIuMi4zLjE0Ci0g
ICAgYXV0byBqb2luV2l0aFNlcGFyYXRvciA9IFsmXSAoU3RyaW5nVmlldyBzZXBhcmF0b3IpIC0+
IEVuY29kZWRKU1ZhbHVlIHsKKyAgICBhdXRvIGpvaW5XaXRoU2VwYXJhdG9yID0gWyZdIChTdHJp
bmdWaWV3IHNlcGFyYXRvcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgIFZpZXdDbGFzcyogdGhpc09i
amVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwogCiAgICAgICAgIEpTU3RyaW5n
Sm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCB0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaSkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhlYykpOworICAgICAg
ICByZXR1cm4gam9pbmVyLmpvaW4oKmV4ZWMpOwogICAgIH07CiAKICAgICBKU1ZhbHVlIHNlcGFy
YXRvclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0yODksMTcgKzI4OSwxNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgfQogCiAgICAgSlNTdHJp
bmcqIHNlcGFyYXRvclN0cmluZyA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0
ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlw
ZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CiAgICAgYXV0byB2aWV3
V2l0aFN0cmluZyA9IHNlcGFyYXRvclN0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBqb2luV2l0
aFNlcGFyYXRvcih2aWV3V2l0aFN0cmluZy52aWV3KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhP
ZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKQEAgLTMyMiwyMCArMzIyLDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCAwKSB7CiAg
ICAgICAgICAgICBmcm9tRG91YmxlICs9IGxlbmd0aDsKICAgICAgICAgICAgIGlmIChmcm9tRG91
YmxlIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KC0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoZnJvbURvdWJsZSA8IGxlbmd0aCkKICAgICAgICAgICAgIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZl
ckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CiAKICAgICBhdXRvIHRhcmdldE9wdGlvbiA9
IFZpZXdDbGFzczo6dG9BZGFwdG9yTmF0aXZlRnJvbVZhbHVlV2l0aG91dENvZXJjaW9uKHZhbHVl
VG9GaW5kKTsKICAgICBpZiAoIXRhcmdldE9wdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcigtMSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogCiAg
ICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50
eXBlZFZlY3RvcigpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwpAQCAtMzQzLDUw
ICszNDMsNTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAg
ICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKICAgICAgICAgaWYgKGFycmF5W2luZGV4
XSA9PSB0YXJnZXRPcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOwogICAg
IH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIoLTEpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVy
RnVuY0J1ZmZlcihWTSYsIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCdWZmZXIoVk0mLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjMKICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wb3NzaWJseVNoYXJlZEpTQnVmZmVyKGV4ZWMpKTsKKyAg
ICByZXR1cm4gdGhpc09iamVjdC0+cG9zc2libHlTaGFyZWRKU0J1ZmZlcihleGVjKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNMZW5ndGgoVk0mLCBFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9HZXR0ZXJGdW5jTGVuZ3RoKFZNJiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIDIyLjIu
My4xNwogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVj
LT50aGlzVmFsdWUoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxl
bmd0aCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRl
TGVuZ3RoKFZNJiwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgoVk0mLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjIKICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlT2Zmc2V0KFZNJiwgRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVy
RnVuY0J5dGVPZmZzZXQoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjMK
ICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2Jq
ZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZU9mZnNldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvRnVuY1JldmVyc2UoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAvLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTM5OSwxMSArMzk5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBl
KiBhcnJheSA9IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7CiAgICAgc3RkOjpyZXZlcnNlKGFy
cmF5LCBhcnJheSArIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Q7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5j
U29ydChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKIC8vICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDE1LDEx
ICs0MTUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAg
ICAgdGhpc09iamVjdC0+c29ydCgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlz
T2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNTbGljZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKQEAgLTQzMyw5ICs0MzMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlCiAgICAgdW5zaWduZWQgdGhpc0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgp
OwogCiAgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9y
RW5kKGV4ZWMsIDAsIHRoaXNMZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVu
RGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAtNDUzLDcgKzQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6
VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRl
VW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVk
KCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC00NjEsNyArNDYxLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgLy8gV2Ug
cmV0dXJuIGVhcmx5IGhlcmUgc2luY2Ugd2UgZG9uJ3QgYWxsb2NhdGUgYSBiYWNraW5nIHN0b3Jl
IGlmIGxlbmd0aCBpcyAwIGFuZCBtZW1tb3ZlIGRvZXMgbm90IGxpa2UgbnVsbHB0cnMKICAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLy8gVGhlIHNwZWNpZXMgY29uc3RydWN0b3IgbWF5
IHJldHVybiBhbiBhcnJheSB3aXRoIGFueSBhcmJpdHJhcnkgbGVuZ3RoLgogICAgIGxlbmd0aCA9
IHN0ZDo6bWluKGxlbmd0aCwgcmVzdWx0LT5sZW5ndGgoKSk7CkBAIC00NjksNDYgKzQ2OSw0NiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgY2FzZSBUeXBl
SW50ODoKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNJbnQ4QXJy
YXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29w
eVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlwZUludDE2OgogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihyZXN1bHQp
LT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRU
b1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlwZUludDMyOgogICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywg
MCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVj
dCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNh
c2UgVHlwZVVpbnQ4Q2xhbXBlZDoKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBq
c0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2Jq
ZWN0LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
Y2FzZSBUeXBlVWludDE2OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2Fz
dDxKU1VpbnQxNkFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2lu
LCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVV
aW50MzI6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAganNDYXN0PEpTVWludDMy
QXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwg
Q29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4o
cmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBl
OjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KHJlc3VsdCkt
PnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRv
UmlnaHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1
bmNTdWJhcnJheUNyZWF0ZShWTSZ2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0m
dm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKQEAgLTU1MiwxMCArNTUyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUt
Pmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIHJldHVybiBWaWV3
Q2xhc3M6OmNyZWF0ZSgKICAgICAgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIs
CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkgKyBvZmZzZXQgKiBWaWV3Q2xh
c3M6OmVsZW1lbnRTaXplLAotICAgICAgICAgICAgbGVuZ3RoKSk7CisgICAgICAgICAgICBsZW5n
dGgpOwogICAgIH0KIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC01NjQsMTMg
KzU2NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAg
YXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3MsICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVj
dG9yIik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgic3BlY2llcyBjb25zdHJ1Y3RvciBk
aWQgbm90IHJldHVybiBhIFR5cGVkQXJyYXkgVmlldyIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0yMTYsNyArMjE2LDcgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlQXRvbWljc1Byb3BlcnR5KFZN
JgogICAgIHJldHVybiBBdG9taWNzT2JqZWN0OjpjcmVhdGUodm0sIGdsb2JhbCwgQXRvbWljc09i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWwsIGdsb2JhbC0+b2JqZWN0UHJvdG90eXBl
KCkpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUJvdW5k
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YWtlQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwpAQCAtMjI3LDE1ICsyMjcsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZQogICAgIEpTVmFsdWUgbGVuZ3RoID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMyk7CiAgICAgSlNTdHJpbmcqIG5hbWUgPSBhc1N0cmluZyhleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCg0KSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQm91bmRGdW5j
dGlvbjo6Y3JlYXRlKAotICAgICAgICB2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LCB0YXJnZXQsIGJv
dW5kVGhpcywgYm91bmRBcmdzLmlzQ2VsbCgpID8ganNDYXN0PEpTQXJyYXkqPihib3VuZEFyZ3Mp
IDogbnVsbHB0ciwgbGVuZ3RoLmFzSW50MzIoKSwgbmFtZS0+dmFsdWUoZXhlYykpKTsKKyAgICBy
ZXR1cm4gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoCisgICAgICAgIHZtLCBleGVjLCBnbG9iYWxP
YmplY3QsIHRhcmdldCwgYm91bmRUaGlzLCBib3VuZEFyZ3MuaXNDZWxsKCkgPyBqc0Nhc3Q8SlNB
cnJheSo+KGJvdW5kQXJncykgOiBudWxscHRyLCBsZW5ndGguYXNJbnQzMigpLCBuYW1lLT52YWx1
ZShleGVjKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc093
bkxlbmd0aFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgaGFzT3duTGVuZ3RoUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IGFzT2JqZWN0KGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0YXJnZXQtPmhhc093blByb3BlcnR5KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkp
KTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRhcmdldC0+aGFzT3duUHJvcGVydHkoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpAQCAtMjk5
LDE1ICsyOTksMTUgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNHbG9iYWxPYgog
QGVuZAogKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2V0VGVtcGxh
dGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQodGhpc1ZhbHVlLmluaGVyaXRzKEpT
VGVtcGxhdGVSZWdpc3RyeUtleTo6aW5mbygpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1w
bGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVl
KSkpOworICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVn
aXN0cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Kj4odGhpc1ZhbHVlKSk7CiB9CiAKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZW5xdWV1ZUpvYihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGVucXVldWVKb2IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKQEAgLTMxOCw3ICszMTgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBlbnF1CiAKICAgICBnbG9iYWxPYmplY3QtPnF1ZXVlTWljcm90YXNrKGNy
ZWF0ZUpTSm9iKHZtLCBqb2IsIGpzQ2FzdDxKU0FycmF5Kj4oYXJndW1lbnRzKSkpOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAogSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIxMDE2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAwOSwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmlj
aCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBP
cmxvdmljaAogICoKQEAgLTY1MSw0NCArNjUxLDQ0IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9h
dChTdHJpbmdWaWV3IHMpCiAgICAgcmV0dXJuIGpzU3RyRGVjaW1hbExpdGVyYWwoZGF0YSwgZW5k
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB4ID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCF4LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoeCk7CisgICAgICAgIHJldHVybiB4OwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWdsb2JhbE9i
amVjdC0+ZXZhbEVuYWJsZWQoKSkgewogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+ZXZhbERpc2FibGVkRXJyb3JN
ZXNzYWdlKCkpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHMg
PSBhc1N0cmluZyh4KS0+dmFsdWUoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGlmIChzLmlzOEJpdCgpKSB7CiAgICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+
IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCksIE5vblN0cmljdEpT
T04pOwogICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0
ZXJhbFBhcnNlKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBhcnNlZE9i
amVjdCk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnMx
NigpLCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09OKTsKICAgICAgICAgaWYgKEpTVmFsdWUgcGFy
c2VkT2JqZWN0ID0gcHJlcGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShwYXJzZWRPYmplY3QpOyAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgIH0KIAogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmln
aW4gPSBleGVjLT5jYWxsZXJTb3VyY2VPcmlnaW4oKTsKICAgICBKU0dsb2JhbE9iamVjdCogY2Fs
bGVlR2xvYmFsT2JqZWN0ID0gZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAg
RXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZXhl
YywgbWFrZVNvdXJjZShzLCBzb3VyY2VPcmlnaW4pLCBmYWxzZSwgRGVyaXZlZENvbnRleHRUeXBl
OjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBlOjpOb25lKTsKICAgICBpZiAoIWV2YWwpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5p
bnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWwsIGV4ZWMsIGNhbGxlZUdsb2JhbE9iamVjdC0+Z2xv
YmFsVGhpcygpLCBjYWxsZWVHbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCkpKTsKKyAgICByZXR1
cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShldmFsLCBleGVjLCBjYWxsZWVHbG9iYWxP
YmplY3QtPmdsb2JhbFRoaXMoKSwgY2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIEpTVmFsdWUgcmFkaXhWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtNzA3LDM3
ICs3MDcsMzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAg
IGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIGRvdWJsZSBuID0gdmFsdWUuYXNOdW1i
ZXIoKTsKICAgICAgICAgaWYgKCgobiA8IGludE1heFBsdXNPbmUgJiYgbiA+PSB0ZW5Ub1RoZU1p
bnVzNikgfHwgIW4pICYmIHJhZGl4VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bikpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pihu
KSk7CiAgICAgfQogCiAgICAgLy8gSWYgVG9TdHJpbmcgdGhyb3dzLCB3ZSBzaG91bGRuJ3QgY2Fs
bCBUb0ludDMyLgogICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgdmFsdWUsIFsmXSAoU3Ry
aW5nVmlldyB2aWV3KSB7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
cGFyc2VJbnQodmlldywgcmFkaXhWYWx1ZS50b0ludDMyKGV4ZWMpKSkpOworICAgICAgICByZXR1
cm4ganNOdW1iZXIocGFyc2VJbnQodmlldywgcmFkaXhWYWx1ZS50b0ludDMyKGV4ZWMpKSk7CiAg
ICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNl
RmxvYXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQ
YXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmlu
ZygqZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZUZsb2F0
KHZpZXdXaXRoU3RyaW5nLnZpZXcpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHBhcnNlRmxvYXQo
dmlld1dpdGhTdHJpbmcudmlldykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN0YXRpYyBC
aXRtYXA8MjU2PiBkb05vdFVuZXNjYXBlV2hlbkRlY29kaW5nVVJJID0gbWFrZUNoYXJhY3RlckJp
dG1hcCgKICAgICAgICAgIiMkJissLzo7PT9AIgogICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGRlY29kZShleGVjLCBkb05vdFVuZXNjYXBlV2hlbkRlY29kaW5nVVJJLCB0cnVl
KSk7CisgICAgcmV0dXJuIGRlY29kZShleGVjLCBkb05vdFVuZXNjYXBlV2hlbkRlY29kaW5nVVJJ
LCB0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzdGF0
aWMgQml0bWFwPDI1Nj4gZW1wdHlCaXRtYXA7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShk
ZWNvZGUoZXhlYywgZW1wdHlCaXRtYXAsIHRydWUpKTsKKyAgICByZXR1cm4gZGVjb2RlKGV4ZWMs
IGVtcHR5Qml0bWFwLCB0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzdGF0aWMgQml0
bWFwPDI1Nj4gZG9Ob3RFc2NhcGVXaGVuRW5jb2RpbmdVUkkgPSBtYWtlQ2hhcmFjdGVyQml0bWFw
KAogICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC03NDYsMTAgKzc0Niwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICIh
IyQmJygpKissLS4vOjs9P0BffiIKICAgICApOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShlbmNvZGUoZXhlYywgZG9Ob3RFc2NhcGVXaGVuRW5jb2RpbmdVUkkpKTsKKyAgICByZXR1cm4g
ZW5jb2RlKGV4ZWMsIGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9u
ZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzdGF0aWMgQml0bWFwPDI1Nj4gZG9Ob3RFc2Nh
cGVXaGVuRW5jb2RpbmdVUklDb21wb25lbnQgPSBtYWtlQ2hhcmFjdGVyQml0bWFwKAogICAgICAg
ICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC03NTgsMTAgKzc1OCwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICIhJygpKi0uX34i
CiAgICAgKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZW5jb2RlKGV4ZWMsIGRvTm90
RXNjYXBlV2hlbkVuY29kaW5nVVJJQ29tcG9uZW50KSk7CisgICAgcmV0dXJuIGVuY29kZShleGVj
LCBkb05vdEVzY2FwZVdoZW5FbmNvZGluZ1VSSUNvbXBvbmVudCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgc3RhdGljIEJpdG1hcDwyNTY+IGRvTm90RXNjYXBlID0gbWFrZUNoYXJhY3RlckJpdG1hcCgK
ICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtNzcwLDcgKzc3MCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICAgICAgIiorLS4v
QF8iCiAgICAgKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVy
biB0b1N0cmluZ1ZpZXcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIFsmXSAoU3RyaW5nVmlldyB2
aWV3KSB7CiAgICAgICAgIEpTU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBpZiAodmll
dy5pczhCaXQoKSkgewogICAgICAgICAgICAgY29uc3QgTENoYXIqIGMgPSB2aWV3LmNoYXJhY3Rl
cnM4KCk7CkBAIC04MDQsMTIgKzgwNCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNFCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZChl
eGVjKTsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0g
KFN0cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKICAgICAgICAgaW50IGsgPSAwOwogICAgICAgICBpbnQgbGVuID0gdmlldy5s
ZW5ndGgoKTsKQEAgLTg1NiwyNCArODU2LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY1UKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogfQogICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXIoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3Vt
ZW50c0NhbGxlZUFuZENhbGxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICInYXJndW1lbnRzJywgJ2NhbGxl
ZScsIGFuZCAnY2FsbGVyJyBjYW5ub3QgYmUgYWNjZXNzZWQgaW4gdGhpcyBjb250ZXh0LiIpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQcm90b0dldHRlcihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg4NiwxNCArODg2LDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNP
YmplY3QpIHsKICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm90b3R5cGUpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKICAgICB9CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYykpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQcm90b1NldHRlcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkwOCwyMSArOTA4LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKIAogICAgIC8vIFNldHRpbmcgX19wcm90b19f
IG9mIGEgcHJpbWl0aXZlIHNob3VsZCBoYXZlIG5vIGVmZmVjdC4KICAgICBpZiAoIXRoaXNPYmpl
Y3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gU2V0dGluZyBfX3Byb3RvX18gdG8g
YSBub24tb2JqZWN0LCBub24tbnVsbCB2YWx1ZSBpcyBzaWxlbnRseSBpZ25vcmVkIHRvIG1hdGNo
IE1vemlsbGEuCiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpICYmICF2YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0g
dHJ1ZTsKICAgICB0aGlzT2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHZhbHVlLCBzaG91
bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0J1aWx0aW5Mb2coRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNCdWlsdGluTG9nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBkYXRhTG9nKGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpLCAiXG4i
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNi0yMDEwLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNh
KQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMzYsMjAgKzM2
LDIwIEBAIGNsYXNzIEpTT2JqZWN0OwogLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQg
cmVhbGx5IGJlIGluIEpTR2xvYmFsT2JqZWN0LmNwcCwgYnV0IHB1dHRpbmcgdGhlbSB0aGVyZQog
Ly8gaXMgYSAwLjUlIHJlZHVjdGlvbi4KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVS
SUNvbXBvbmVudChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFu
ZENhbGxlcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY1Byb3RvR2V0dGVyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNCdWlsdGluTG9nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRD
YWxsZXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3Rv
R2V0dGVyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQcm90
b1NldHRlcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jQnVp
bHRpbkxvZyhFeGVjU3RhdGUqKTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJm
bG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKIGRvdWJsZSBwYXJzZUludE92ZXJm
bG93KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgcmFkaXgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5h
bFByb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02MiwxMyArNjIsMTMgQEAgSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvcjo6
SlNJbnRlcm5hbAogewogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2Ug
PSBKU0ludGVybmFsUHJvbWlzZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmludGVybmFsUHJv
bWlzZVN0cnVjdHVyZSgpKTsKICAgICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9i
amVjdCwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJv
bWlzZSk7CisgICAgcmV0dXJuIHByb21pc2U7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNJbnRlcm5h
bFByb21pc2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3ltYm9sSXRlcmF0b3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZU5hbWVzcGFjZU9iamVjdFN5bWJvbEl0ZXJhdG9yKEV4ZWNTdGF0ZSop
OwogCiBjb25zdCBDbGFzc0luZm8gSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnNfaW5mbyA9IHsg
Ik1vZHVsZU5hbWVzcGFjZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QpIH07CiAKQEAgLTIwOCw3ICsyMDgs
NyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWZpbmVPd25QCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZU5hbWVzcGFj
ZU9iamVjdFN5bWJvbEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVOYW1lc3BhY2VPYmplY3RTeW1ib2xJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0yMTYsNyArMjE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVOYW1lcwogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBvYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ8dGhpc3wgc2hvdWxkIGJlIGEgbW9kdWxlIG5hbWVz
cGFjZSBvYmplY3QiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9w
ZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZSgpLCBvYmplY3QpKTsKKyAgICByZXR1cm4gSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgb2JqZWN0KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2
ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgSlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNo
Q3JlYXRpb24KICAgICBtX2Z1bmN0aW9uQ2VsbC5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uQ2VsbCk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJ1blN0ZEZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJ1blN0ZEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5jdGlvbio+KHN0YXRlLT5qc0NhbGxlZSgpKTsK
ICAgICBBU1NFUlQoZnVuY3Rpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAkocmV2aXNpb24gMjEwMTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiBjbGFzcyBOYXRpdmVTdGRGdW5jdGlvbkNlbGw7CiAKLXR5cGVkZWYgc3RkOjpmdW5j
dGlvbjxFbmNvZGVkSlNWYWx1ZSAoRXhlY1N0YXRlKik+IE5hdGl2ZVN0ZEZ1bmN0aW9uOwordHlw
ZWRlZiBzdGQ6OmZ1bmN0aW9uPEpTVmFsdWUgKEV4ZWNTdGF0ZSopPiBOYXRpdmVTdGRGdW5jdGlv
bjsKIAogY2xhc3MgSlNOYXRpdmVTdGRGdW5jdGlvbiA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKIHB1
YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw4ICs0Niw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
SlNPTk9iamVjdCk7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVu
Y1BhcnNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJv
dG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Q
cm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJv
dG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTc3Nyw3ICs3NzcsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiB9CiAKIC8vIEVDTUEtMjYy
IHY1IDE1LjEyLjIKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1Bh
cnNlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5j
UGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODA5LDE5ICs4MDksMTkg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAgIH0KICAgICAK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh1bmZpbHRlcmVkKTsKKyAgICAgICAgcmV0dXJuIHVuZmlsdGVyZWQ7CiAgICAg
CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodW5maWx0ZXJlZCk7CisgICAgICAgIHJl
dHVybiB1bmZpbHRlcmVkOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFdhbGtlcihleGVjLCBMb2NhbDxKU09iamVjdD4odm0sIGFzT2JqZWN0KGZ1bmN0
aW9uKSksIGNhbGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKSk7CisgICAgcmV0dXJu
IFdhbGtlcihleGVjLCBMb2NhbDxKU09iamVjdD4odm0sIGFzT2JqZWN0KGZ1bmN0aW9uKSksIGNh
bGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRlcmVkKTsKIH0KIAogLy8gRUNNQS0yNjIgdjUg
MTUuMTIuMwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5n
aWZ5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5j
U3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgzNiw3ICs4MzYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBzdHJpbmdpZmllci5zdHJpbmdpZnkodmFsdWUpLmdldCgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBK
U1ZhbHVlIEpTT05QYXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYganNvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9u
IDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAw
NiwgMjAwOC0yMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LTIwMDksIDIwMTItMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2Vp
ZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwNTksMTIgKzIwNTksMTIg
QEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
aXZhdGVGdW5jSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJpdmF0ZUZ1bmNJbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBw
cm90byA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1
ZSwgcHJvdG8pKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90bykpOwogfQogCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEyLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5
LCAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTExMzAsNyArMTEzMCw3IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotSlNf
RVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcml2YXRl
RnVuY0luc3RhbmNlT2YoRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJpdmF0ZUZ1bmNJbnN0YW5jZU9mKEV4ZWNTdGF0ZSopOwogCiBp
bmxpbmUgSlNPYmplY3QqIEpTT2JqZWN0OjpjcmVhdGVSYXdPYmplY3QoCiAgICAgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTIsNyArOTIsNyBAQCB2b2lkIEpTUHJvbWlzZUNvbnN0cnVjdG9yOjphZGRPd25JbnRlcm5h
CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnJlamVjdFByaXZhdGVOYW1lKCksIHByb21pc2VDb25zdHJ1
Y3RvclJlamVjdENvZGVHZW5lcmF0b3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0UHJv
bWlzZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTAzLDE4ICsx
MDMsMTggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJ1Y3R1cmUq
IHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0
dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNQcm9taXNlKiBw
cm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHBy
b21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UpOworICAgIHJldHVybiBwcm9t
aXNlOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUHJvbWlz
ZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQcm9t
aXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsICJQcm9taXNlIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJvbWlzZSIpOwog
fQogCiBDb25zdHJ1Y3RUeXBlIEpTUHJvbWlzZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQoRXhlY1N0
YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpzX2luZm8g
PSB7ICJQcm9wZXJ0eU5hbWUgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IpIH07CiAKQEAgLTEzOCwxOSArMTM4LDE5
IEBAIGJvb2wgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bmV4dChFeGVjU3QKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TmFtZUl0ZXJhdG9yIEZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJvcGVydHlOYW1lSXRlcmF0b3JGdW5jTmV4dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJvcGVydHlOYW1lSXRlcmF0b3JGdW5jTmV4dChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdGVyYXRv
ciA9IGpzRHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1
ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFBy
b3BlcnR5TmFtZUl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1Qcm9wZXJ0eU5hbWVJdGVyYXRvciBv
YmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgUHJvcGVydHlOYW1lSXRlcmF0b3IubmV4dCgpIG9uIGEg
bm9uLVByb3BlcnR5TmFtZUl0ZXJhdG9yIG9iamVjdCIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0
OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChleGVjLCByZXN1bHQpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGV4ZWMsIHJlc3VsdCwg
ZmFsc2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0
T2JqZWN0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGV4ZWMsIHJlc3VsdCwgZmFsc2UpOworICAgIHJldHVybiBj
cmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChleGVjLCBqc1VuZGVmaW5lZCgpLCB0cnVlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBA
IFN0cnVjdHVyZSogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOjoKIAogCiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFR5cGVkQXJyYXlWaWV3KEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0VHlwZWRB
cnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjUsMTMgKzY1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoZmFsc2UpCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY0lzVHlwZWRBcnJheVZpZXcoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1
bmNJc1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odmFsdWUuaXNDZWxsKCkgJiYgaXNUeXBlZFZpZXcodmFsdWUuYXNDZWxsKCkt
PmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSk7CisgICAgcmV0dXJuIGpzQm9v
bGVhbih2YWx1ZS5pc0NlbGwoKSAmJiBpc1R5cGVkVmlldyh2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJ
bmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODQsMTggKzg0LDE4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVYKICAgICBpZiAodGhpc09iamVjdC0+
aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJVbmRlcmx5aW5nIEFycmF5QnVmZmVyIGhhcyBiZWVuIGRldGFjaGVk
IGZyb20gdGhlIHZpZXciKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3Qt
Pmxlbmd0aCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5
Vmlld1ByaXZhdGVGdW5jR2V0T3JpZ2luYWxDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY0dldE9yaWdpbmFs
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldE9iamVjdCgpLT5jbGFzc0lu
Zm8oKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlOwogICAgIEFTU0VSVChpc1R5cGVkVmlldyh0eXBl
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlD
b25zdHJ1Y3Rvcih0eXBlKSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheUNv
bnN0cnVjdG9yKHR5cGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVk
QXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xMDQsNyArMTA0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB0eXBlZEFycmF5VgogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9G
VU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1NvcnQpOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1Nl
dChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJy
YXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEx
NSw3ICsxMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAg
ICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvRnVuY1NldCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbihFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
Q29weVdpdGhpbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjYsNyArMTI2
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExf
R0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNDb3B5V2l0aGluKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyhFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5j
bHVkZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTM3LDcgKzEzNyw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxMX0dFTkVS
SUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jSW5jbHVkZXMpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5k
ZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJ
Q19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNMYXN0SW5kZXhPZik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBF
REFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJ
bmRleE9mKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBF
X0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4pOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVy
RnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZV
TkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcik7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9H
ZXR0ZXJGdW5jTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZ
UEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKTsK
IH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQ
cm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVE
QVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVy
RnVuY0J5dGVMZW5ndGgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVy
RnVuY0J5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjE0LDcg
KzIxNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBD
QUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9mZnNldCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMjUsNyAr
MjI1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENB
TExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNSZXZlcnNlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJh
eUNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMzYsNyArMjM2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5VgogICAgIENBTExfR0VO
RVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQ
cml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xp
Y2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjQ3LDM1ICsyNDcsMzUgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJ
Q19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTbGljZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5
cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jVG9TdHJpbmdUYWcoRXhlY1N0YXRlKiBleGVjKQor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVu
Y1RvU3RyaW5nVGFnKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBzd2l0Y2gg
KHRoaXNWYWx1ZS5nZXRPYmplY3QoKS0+Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkgewogICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50OENsYW1wZWRBcnJheSIpKTsKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKCZ2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5Iik7CiAgICAgY2FzZSBUeXBlSW50
MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiSW50MzJB
cnJheSIpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkludDMyQXJyYXkiKTsKICAg
ICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoJnZtLCAiVWludDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJV
aW50MzJBcnJheSIpOwogICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxvYXQ2NEFycmF5IikpOworICAgICAgICByZXR1
cm4ganNTdHJpbmcoJnZtLCAiRmxvYXQ2NEFycmF5Iik7CiAgICAgY2FzZSBUeXBlRmxvYXQzMjoK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJGbG9hdDMyQXJy
YXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJGbG9hdDMyQXJyYXkiKTsKICAg
ICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KCZ2bSwgIkludDhBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkludDhB
cnJheSIpOwogICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKCZ2bSwgIlVpbnQ4QXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmlu
Zygmdm0sICJVaW50OEFycmF5Iik7CiAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiSW50MTZBcnJheSIpKTsKKyAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkludDE2QXJyYXkiKTsKICAgICBjYXNlIFR5cGVVaW50MTY6
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDE2QXJy
YXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJVaW50MTZBcnJheSIpOwogICAg
IGNhc2UgTm90VHlwZWRBcnJheToKICAgICBjYXNlIFR5cGVEYXRhVmlldzoKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ1LDEwICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiB9Owog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNJ
c1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY0xlbmd0aChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY0dldE9yaWdpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5j
SXNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBl
ZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jTGVuZ3RoKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNHZXRPcmlnaW5hbENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3
UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShFeGVjU3RhdGUqKTsKICAgICAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
LDM0ICs0NywzNCBAQCB2b2lkIE1hcENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAg
ICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3BlY2ll
c1N5bWJvbCwgc3BlY2llc1N5bWJvbCwgQWNjZXNzb3IgfCBSZWFkT25seSB8IERvbnRFbnVtKTsK
IH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE1hcChFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxNYXAoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dD
b25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwg
Ik1hcCIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5j
dGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIk1hcCIpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RNYXAoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RNYXAoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0
dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU01hcCogbWFwID0gSlNN
YXA6OmNyZWF0ZShleGVjLCB2bSwgbWFwU3RydWN0dXJlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShtYXApOworICAgICAgICByZXR1cm4gbWFwOwogCiAgICAgSlNWYWx1ZSBhZGRl
ckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zZXQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBDYWxsRGF0YSBh
ZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhKTsKICAg
ICBpZiAoYWRkZXJGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRlcmFibGUsIFsmXShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewpAQCAtOTcsNyArOTcsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIGNhbGwoZXhl
YywgYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2Fs
bERhdGEsIG1hcCwgYXJndW1lbnRzKTsKICAgICB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobWFwKTsKKyAgICByZXR1cm4gbWFwOwogfQogCiBDb25zdHJ1Y3RUeXBlIE1hcENvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVj
dERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYt
MjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gTWFwSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk1hcCBJdGVyYXRvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoTWFwSXRlcmF0b3JQcm90b3R5
cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9y
UHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgTWFw
SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKQEAgLTQ2LDIyICs0NiwyMiBAQCB2b2lkIE1hcEl0ZXJhdG9yUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXAg
SXRlcmF0b3IiKSwgRG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU01hcEl0
ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJDYW5ub3QgY2FsbCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24tTWFwSXRlcmF0b3Igb2Jq
ZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1h
cEl0ZXJhdG9yIG9iamVjdCIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVy
YXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOworICAgICAgICByZXR1cm4gY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKTsKICAgICB9CiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CisgICAgcmV0
dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwg
dHJ1ZSk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
LDE2ICs0NywxNiBAQCBjb25zdCBDbGFzc0luZm8gTWFwUHJvdG90eXBlOjpzX2luZm8gPSB7CiBA
ZW5kCiAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNDbGVhcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hcFByb3RvRnVuY0RlbGV0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dldChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0tleXMo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90
b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bmNFbnRyaWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNLZXlzKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0VudHJpZXMoRXhl
Y1N0YXRlKik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY1NpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFBy
b3RvRnVuY1NpemUoRXhlY1N0YXRlKik7CiAgICAgCiB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewpAQCAtOTks
OTggKzk5LDk4IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2FsbEYKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU01hcCog
bWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNNYXAqIG1h
cCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICgh
bWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVtb3ZlKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihtYXAtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90
b0Z1bmNHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTTWFwKiBtYXAgPSBn
ZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gbWFwLT5n
ZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAt
PmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc0Jvb2xlYW4obWFwLT5oYXMoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jU2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNNYXAqIG1h
cCA9IGdldE1hcChjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIG1hcC0+c2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aGlzVmFsdWUpOworICAgIHJldHVybiB0aGlzVmFsdWU7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1hcC0+
c2l6ZShjYWxsRnJhbWUpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJl
dHVybiBqc051bWJlcihtYXAtPnNpemUoY2FsbEZyYW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jVmFsdWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNNYXAqIHRoaXNPYmogPSBqc0R5bmFt
aWNDYXN0PEpTTWFwKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCF0aGlzT2Jq
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIE1hcCB2YWx1ZSBpdGVyYXRv
ciBmb3IgYSBub24tTWFwIG9iamVjdC4iKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlVmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIE1hcCB2YWx1ZSBpdGVyYXRvciBmb3IgYSBub24tTWFwIG9i
amVjdC4iKSk7CisgICAgcmV0dXJuIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1l
LT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhp
c09iaiwgSXRlcmF0ZVZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNFbnRyaWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hcFByb3RvRnVuY0VudHJpZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
Vk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTTWFwKiB0aGlzT2JqID0ganNEeW5hbWljQ2FzdDxKU01hcCo+
KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAgZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLU1h
cCBvYmplY3QuIikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6
OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRl
cmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleVZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5v
dCBjcmVhdGUgYSBNYXAgZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLU1hcCBvYmplY3QuIikpOwor
ICAgIHJldHVybiBKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJh
dGVLZXlWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jS2V5cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bmNLZXlzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxG
cmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU01hcCogdGhpc09iaiA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKICAgICBpZiAoIXRoaXNPYmopCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgY3JlYXRlIGEgTWFwIGtleSBpdGVyYXRvciBmb3IgYSBub24tTWFwIG9iamVjdC4iKSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxs
RnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgp
LCB0aGlzT2JqLCBJdGVyYXRlS2V5KSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAga2V5IGl0
ZXJhdG9yIGZvciBhIG5vbi1NYXAgb2JqZWN0LiIpKTsKKyAgICByZXR1cm4gSlNNYXBJdGVyYXRv
cjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJ
dGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKSk7CiAgICAgSlNNYXAqIG1hcCA9IGpzQ2FzdDxKU01hcCo+KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFw
SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbWFwLCBJdGVyYXRlS2V5VmFsdWUpKTsKKyAg
ICByZXR1cm4gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmpzQ2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtYXAsIEl0ZXJhdGVL
ZXlWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNN
YXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBy
aXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTIwMCwxMiArMjAwLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0
ZUZ1bmMKICAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShleGVjLCBrZXksIHZhbHVlKSkg
ewogICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgMCwga2V5KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIDEsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAg
fQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKHRydWUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcg
KzU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNN
YXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJp
dmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0zMywzOCArMzMsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShNYXRoT2JqZWN0KTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3NoKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW5oKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW5oKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRh
bjIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNDYnJ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jQ2VpbChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQ29zaChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cG0xKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRnJvdW5kKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxcChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzEwKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9n
MihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y01heChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY01pbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2lnbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbmgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuaChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3NoKEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luaChFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbmgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDYnJ0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNDbHozMihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNDb3NoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNFeHAoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0V4cG0xKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNGcm91bmQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0h5cG90KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNM
b2coRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzFw
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxMChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2lnbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW5oKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY1RhbmgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBNYXRoT2JqZWN0
OjpzX2luZm8gPSB7ICJNYXRoIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShNYXRoT2JqZWN0KSB9OwogCkBAIC0xMjcsNjMgKzEyNyw2MyBAQCB2b2lkIE1hdGhPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGZhYnMoZXhlYy0+YXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGZhYnMoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoYWNvcyhleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYWNvcyhleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihhc2luKGV4ZWMtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGF0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9O
dW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGF0YW4oZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgZG91Ymxl
IGFyZzAgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKICAgICBkb3VibGUgYXJn
MSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNEb3VibGVOdW1iZXIoYXRhbjIoYXJnMCwgYXJnMSkpKTsKKyAgICByZXR1cm4g
anNEb3VibGVOdW1iZXIoYXRhbjIoYXJnMCwgYXJnMSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjZWlsKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc051bWJlcihjZWlsKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jQ2x6MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IHVpbnQzMl90IHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGNsejMyKHZhbHVlKSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWUoY2x6MzIodmFsdWUpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVy
KGNvcyhleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNE
b3VibGVOdW1iZXIoY29zKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihleHAo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91Ymxl
TnVtYmVyKGV4cChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGZsb29yKGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc051bWJlcihmbG9v
cihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNIeXBvdChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0h5cG90KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTE5Myw5ICsxOTMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1CiAgICAgYXJncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3NDb3Vu
dCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3NDb3VudDsgKytpKSB7CiAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVt
YmVyKGV4ZWMpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
ICAgIGlmIChzdGQ6OmlzaW5mKGFyZ3NbaV0pKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0RvdWJsZU51bWJlcigrc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZp
bml0eSgpKSk7CisgICAgICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7CiAgICAgICAgIG1heCA9IHN0ZDo6bWF4KGZh
YnMoYXJnc1tpXSksIG1heCk7CiAgICAgfQogICAgIGlmICghbWF4KQpAQCAtMjEwLDE1ICsyMTAs
MTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogICAgICAgICBj
b21wZW5zYXRpb24gPSAocHJlbGltaW5hcnkgLSBzdW0pIC0gc3VtbWFuZDsKICAgICAgICAgc3Vt
ID0gcHJlbGltaW5hcnk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIoc3FydChzdW0pICogbWF4KSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHNx
cnQoc3VtKSAqIG1heCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0RvdWJsZU51bWJlcihsb2coZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7
CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxvZyhleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNNYXgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNNYXgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gLXN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTIyOSwxMCArMjI5LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKICAgICAgICAgfSBlbHNlIGlmICh2YWwgPiBy
ZXN1bHQgfHwgKCF2YWwgJiYgIXJlc3VsdCAmJiAhc3RkOjpzaWduYml0KHZhbCkpKQogICAgICAg
ICAgICAgcmVzdWx0ID0gdmFsOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKHJlc3VsdCkpOworICAgIHJldHVybiBqc051bWJlcihyZXN1bHQpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAg
ICBkb3VibGUgcmVzdWx0ID0gK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHko
KTsKQEAgLTI0MywxMzEgKzI0MywxMzEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXRoUHJvdG9GdQogICAgICAgICB9IGVsc2UgaWYgKHZhbCA8IHJlc3VsdCB8fCAoIXZhbCAmJiAh
cmVzdWx0ICYmIHN0ZDo6c2lnbmJpdCh2YWwpKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBFQ01BIDE1
LjguMi4xLjEzCiAKICAgICBkb3VibGUgYXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYyk7CiAgICAgZG91YmxlIGFyZzIgPSBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVj
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvcGVyYXRpb25NYXRoUG93
KGFyZywgYXJnMikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShvcGVyYXRpb25NYXRoUG93KGFyZywg
YXJnMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNS
YW5kb20oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNEb3VibGVOdW1iZXIoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53ZWFrUmFuZG9tTnVt
YmVyKCkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT53ZWFrUmFuZG9tTnVtYmVyKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGpzUm91bmQoZXhlYy0+YXJndW1lbnQoMCkudG9O
dW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGpzUm91bmQoZXhlYy0+YXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jU2lnbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIGRvdWJsZSBhcmcg
PSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKICAgICBpZiAoc3RkOjppc25hbihh
cmcpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICBy
ZXR1cm4ganNOYU4oKTsKICAgICBpZiAoIWFyZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShzdGQ6OnNpZ25iaXQoYXJnKSA/IGpzTnVtYmVyKC0wLjApIDoganNOdW1iZXIoMCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RkOjpzaWduYml0KGFyZykgPyAt
MSA6IDEpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c2lnbmJpdChhcmcpID8ganNOdW1iZXIoLTAu
MCkgOiBqc051bWJlcigwKTsKKyAgICByZXR1cm4ganNOdW1iZXIoc3RkOjpzaWduYml0KGFyZykg
PyAtMSA6IDEpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNTaW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNTaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNE
b3VibGVOdW1iZXIoc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAg
IHJldHVybiBqc0RvdWJsZU51bWJlcihzaW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhl
YykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3Fy
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1Nx
cnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIoc3FydChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICBy
ZXR1cm4ganNEb3VibGVOdW1iZXIoc3FydChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4o
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVO
dW1iZXIodGFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVy
biBqc0RvdWJsZU51bWJlcih0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSU11bChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3QgbGVmdCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgaW50MzJfdCByaWdodCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihs
ZWZ0ICogcmlnaHQpKTsKKyAgICByZXR1cm4ganNOdW1iZXIobGVmdCAqIHJpZ2h0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvc2goRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zaChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihh
Y29zaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNE
b3VibGVOdW1iZXIoYWNvc2goZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbmgoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luaChFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJl
cihhc2luaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4g
anNEb3VibGVOdW1iZXIoYXNpbmgoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbmgoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuaChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcihhdGFuaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1
cm4ganNEb3VibGVOdW1iZXIoYXRhbmgoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2JydChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NicnQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVO
dW1iZXIoY2JydChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1
cm4ganNEb3VibGVOdW1iZXIoY2JydChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3NoKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zaChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcihjb3NoKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVy
biBqc0RvdWJsZU51bWJlcihjb3NoKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cG0xKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRXhwbTEo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVO
dW1iZXIoZXhwbTEoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0
dXJuIGpzRG91YmxlTnVtYmVyKGV4cG0xKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zyb3Vu
ZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zy
b3VuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Rv
dWJsZU51bWJlcihzdGF0aWNfY2FzdDxmbG9hdD4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHN0YXRpY19jYXN0PGZsb2F0Pihl
eGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxcChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzFwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBkb3VibGUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKICAgICBp
ZiAodmFsdWUgPT0gMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51
bWJlcih2YWx1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
bG9nMXAodmFsdWUpKSk7CisgICAgICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih2YWx1ZSk7Cisg
ICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxvZzFwKHZhbHVlKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzEwKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMTAoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIobG9nMTAoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVy
KGxvZzEwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzIoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGxvZzIoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVy
KGxvZzIoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luaChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbmgoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoc2luaChleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIo
c2luaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW5oKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuaChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcih0YW5oKGV4ZWMtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih0
YW5oKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RydW5jKEV4ZWNTdGF0ZSpleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUcnVuYyhFeGVjU3RhdGUqZXhlYykKIHsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5o
CShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RydW5jKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUcnVuYyhFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NSwxMyArNDUsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNl
TW9kdWxlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUV2YWx1
YXRlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJv
dG90eXBlUmVzb2x2ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUZldGNoKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlh
dGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRl
clByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFs
dWF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9h
ZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZl
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVGZXRjaChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlhdGUoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAt
MTAwLDE2ICsxMDAsMTYgQEAgTW9kdWxlTG9hZGVyUHJvdG90eXBlOjpNb2R1bGVMb2FkZXJQcm90
bwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHNvdXJjZSwgU291cmNlT3JpZ2lu
IHsgbW9kdWxlS2V5LmltcGwoKSB9LCBtb2R1bGVLZXkuaW1wbCgpLCBUZXh0UG9zaXRpb24oKSwg
U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpOwogCkBAIC0xMjIsNTcgKzEyMiw1NyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAKICAgICBpZiAoZXJy
b3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgZXJyb3Iu
dG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZUNvZGUpKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEFTU0VSVChtb2R1bGVQcm9ncmFtTm9k
ZSk7CiAKICAgICBNb2R1bGVBbmFseXplciBtb2R1bGVBbmFseXplcihleGVjLCBtb2R1bGVLZXks
IHNvdXJjZUNvZGUsIG1vZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxl
UHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJsZXMoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gbW9kdWxlQW5hbHl6
ZXIuYW5hbHl6ZSgqbW9kdWxlUHJvZ3JhbU5vZGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShtb2R1bGVSZWNvcmQpOworICAgIHJldHVybiBtb2R1bGVSZWNvcmQ7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9k
dWxlcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVy
UHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1
bGVSZWNvcmQqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFtb2R1bGVSZWNvcmQpIHsK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cikpOworICAgICAgICByZXR1cm4gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICB9CiAKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIG1vZHVsZVJlY29yZC0+
cmVxdWVzdGVkTW9kdWxlcygpLnNpemUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQt
PnJlcXVlc3RlZE1vZHVsZXMoKSkgewogICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGkrKywganNTdHJpbmcoZXhlYywga2V5LmdldCgpKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3Rv
dHlwZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nh
c3Q8SlNNb2R1bGVSZWNvcmQqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFtb2R1bGVS
ZWNvcmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1
bGVMb2FkaW5nU3RhdGUoKSkKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1
bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29yZC0+bGluayhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvb2sgRnVuY3Rpb25zIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5yZXNvbHZlLgogICAgIC8vIGh0dHBzOi8vd2hh
dHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItcmVzb2x2ZQpAQCAtMTgwLDExICsxODAsMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIC8vIEZvciBl
eGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJuIHRoZSBVUkwgZm9yIHRoZSByZXNv
dXJjZS4KICAgICBKU01vZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVs
ZUxvYWRlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWxvYWRlcikKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+
YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHJldHVybiBsb2FkZXItPnJlc29sdmUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUZldGNo
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBIb29rIHBvaW50LCBMb2FkZXIuZmV0Y2gKICAg
ICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLWZldGNoCkBAIC0x
OTMsMTEgKzE5MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRl
CiAgICAgLy8gZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCiAgICAgSlNNb2R1bGVMb2FkZXIq
IGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmZldGNoKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gbG9hZGVyLT5mZXRjaChleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUluc3RhbnRpYXRlKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmluc3RhbnRp
YXRlCiAgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0
YW50aWF0ZQpAQCAtMjA3LDIxICsyMDcsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtb2R1bGVMb2FkZQogICAgIC8vIHRoZSBvcmRpbmFyeSBvbmUuCiAgICAgSlNNb2R1bGVMb2Fk
ZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFs
dWUoKSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmluc3Rh
bnRpYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+
YXJndW1lbnQoMikpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IGxvYWRlci0+aW5zdGFudGlhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3Vt
ZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0g
QWRkaXRpb25hbCBIb29rIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJv
dG90eXBlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIFRvIGluc3RydW1lbnQg
YW5kIHJldHJpZXZlIHRoZSBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24s
CiAgICAgLy8gd2UgaW5zZXJ0ZWQgdGhlIGhvb2sgcG9pbnQgaGVyZS4KIAogICAgIEpTTW9kdWxl
TG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5l
dmFsdWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMt
PmFyZ3VtZW50KDIpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVy
biBsb2FkZXItPmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVu
dCgxKSwgZXhlYy0+YXJndW1lbnQoMikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTYxLDE2ICs2MSwxNiBAQCB2b2lkIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6
OnZpc2l0Q2hpbGRyCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9lcnJvclN0cnVj
dHVyZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNv
bnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVz
c2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5u
ZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5qc0NhbGxl
ZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBBU1NFUlQoZXJyb3JTdHJ1Y3R1cmUpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0
cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0
dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwg
bnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAogQ29uc3RydWN0VHlwZSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEm
IGNvbnN0cnVjdERhdGEpCkBAIC03OSwxMSArNzksMTEgQEAgQ29uc3RydWN0VHlwZSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpnZQogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogfQog
ICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y2FsbE5hdGl2
ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0
dXJlKiBlcnJvclN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
PihleGVjLT5qc0NhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVz
c2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAogQ2FsbFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbEdldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdWxsR2V0dGVyRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdWxsR2V0
dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gTnVsbEdldHRlckZ1bmN0aW9uOjpzX2luZm8gPSB7ICJG
dW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoTnVsbEdldHRl
ckZ1bmN0aW9uKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
UmV0dXJuVW5kZWZpbmVkKEV4ZWNTdGF0ZSopCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxSZXR1cm5VbmRlZmluZWQoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBD
YWxsVHlwZSBOdWxsR2V0dGVyRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bGxTZXR0
ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVsbFNldHRlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbFNldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTcwLDE0ICs3MCwxNCBAQCBzdGF0aWMgYm9vbCBjYWxsZXJJc1N0cmljdChFeGVjU3Rh
dGUqIGV4CiAgICAgcmV0dXJuIGl0ZXIuY2FsbGVySXNTdHJpY3QoKTsKIH0KIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJldHVyblVuZGVmaW5lZChFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZXR1cm5VbmRlZmluZWQo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGNhbGxlcklzU3RyaWN0
KGV4ZWMpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNldHRpbmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5
IGEgZ2V0dGVyIikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiU2V0dGluZyBhIHByb3BlcnR5IHRoYXQgaGFzIG9ubHkgYSBnZXR0ZXIiKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIENhbGxUeXBlIE51bGxTZXR0ZXJGdW5jdGlvbjo6Z2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCwyMDAzIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDExLCAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNJbnRlZ2VyKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3Ry
dWN0b3JGdW5jSXNTYWZlSW50ZWdlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNJbnRlZ2VyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJc1NhZmVJbnRl
Z2VyKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApAQCAtODMsMTggKzgzLDE4
IEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFYKIH0KIAogLy8gRUNN
QSAxNS43LjEKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdp
dGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgZG91YmxlIG4gPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcihleGVjKSA6IDA7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIE51bWJlck9iamVjdCog
b2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgb2JqZWN0
LT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBqc051bWJlcihuKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvYmplY3QpOworICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIENvbnN0cnVjdFR5cGUg
TnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKQEAgLTEwNCw5ICsxMDQsOSBAQCBDb25zdHJ1Y3RUeXBlIE51bWJl
ckNvbnN0cnVjdG9yOjpnZXRDb25zCiB9CiAKIC8vIEVDTUEgMTUuNy4yCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IDAgOiBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcighZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID8gMCA6IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKIH0K
IAogQ2FsbFR5cGUgTnVtYmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJiBjYWxsRGF0YSkKQEAgLTExNiw3ICsxMTYsNyBAQCBDYWxsVHlwZSBOdW1iZXJDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoCiB9CiAKIC8vIEVDTUEtMjYyIDIwLjEuMi4zCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJc0ludGVnZXIo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJDb25z
dHJ1Y3RvckZ1bmNJc0ludGVnZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgYXJn
dW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzSW50ZWdlcjsKQEAgLTEyOCwx
MSArMTI4LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWIKICAg
ICAgICAgZG91YmxlIG51bWJlciA9IGFyZ3VtZW50LmFzRG91YmxlKCk7CiAgICAgICAgIGlzSW50
ZWdlciA9IHN0ZDo6aXNmaW5pdGUobnVtYmVyKSAmJiB0cnVuYyhudW1iZXIpID09IG51bWJlcjsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNJbnRlZ2VyKSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihpc0ludGVnZXIpOwogfQogCiAvLyBFQ01BLTI2MiAyMC4x
LjIuNQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0
b3JGdW5jSXNTYWZlSW50ZWdlcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlckNvbnN0cnVjdG9yRnVuY0lzU2FmZUludGVnZXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBi
b29sIGlzSW50ZWdlcjsKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iCiAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBhcmd1bWVudC5hc0Rv
dWJsZSgpOwogICAgICAgICBpc0ludGVnZXIgPSB0cnVuYyhudW1iZXIpID09IG51bWJlciAmJiBz
dGQ6OmFicyhudW1iZXIpIDw9IDkwMDcxOTkyNTQ3NDA5OTEuMDsKICAgICB9Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNJbnRlZ2VyKSk7CisgICAgcmV0dXJuIGpzQm9v
bGVhbihpc0ludGVnZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTEsIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsMTEgKzQyLDEx
IEBAIHR5cGVkZWYgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnUKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9G
dW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSopOwog
CiB9CiAKQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nV2l0aFJhZGl4
KGludDMyX3QgCiAvLyBUaGlzIG1ldGhvZCB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudCBzcGVj
aWZ5aW5nIGEgbnVtYmVyIG9mICpkZWNpbWFsIHBsYWNlcyoKIC8vIHRvIHJvdW5kIHRoZSBzaWdu
aWZpY2FuZCB0byAob3IsIHB1dCBhbm90aGVyIHdheSwgdGhpcyBtZXRob2Qgb3B0aW9uYWxseSBy
b3VuZHMKIC8vIHRvIGFyZ3VtZW50LXBsdXMtb25lIHNpZ25pZmljYW50IGZpZ3VyZXMpLgotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4
cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM3OSw3ICszNzks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAKICAgICAvLyBI
YW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmlu
Zzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpOwog
CiAgICAgLy8gUm91bmQgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCB1bmRlZmluZWQsIGFsd2F5cyBm
b3JtYXQgYXMgZXhwb25lbnRpYWwuCiAgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aF07CkBAIC0zODksMTQgKzM4OSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgaXNVbmRlZmluZWQKICAgICAgICAgPyBjb252ZXJ0
ZXIuVG9FeHBvbmVudGlhbCh4LCAtMSwgJmJ1aWxkZXIpCiAgICAgICAgIDogY29udmVydGVyLlRv
RXhwb25lbnRpYWwoeCwgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQsICZidWlsZGVyKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhidWlsZGVyLkZpbmFs
aXplKCkpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhidWlsZGVyLkZpbmFs
aXplKCkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywg
YWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgogLy8gVGhpcyBtZXRo
b2QgdGFrZXMgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhIG51bWJlciBvZiBkZWNpbWFsIHBsYWNl
cyB0byByb3VuZCB0aGUKIC8vIHNpZ25pZmljYW5kIHRvLiBIb3dldmVyIHdoZW4gY29udmVydGlu
ZyBsYXJnZSB2YWx1ZXMgKDFlKzIxIGFuZCBhYm92ZSkgdGhpcwogLy8gbWV0aG9kIHdpbGwgaW5z
dGVhZCBmYWxsYmFjayB0byBjYWxsaW5nIFRvU3RyaW5nLiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC00MTUsMTQgKzQxNSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG51bWJlclByb3RvCiAgICAgLy8gVGhpcyBhbHNvIGNvdmVycyBJbmluaXR5LCBhbmQg
c3RydWN0dXJlIHRoZSBjaGVjayBzbyB0aGF0IE5hTgogICAgIC8vIHZhbHVlcyBhcmUgYWxzbyBo
YW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nCiAgICAgaWYgKCEoZmFicyh4KSA8IDFlKzIxKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJl
clRvU3RyaW5nRUNNQVNjcmlwdCh4KSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpOwogCiAgICAgLy8gVGhlIGNoZWNr
IGFib3ZlIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBOYU4gb3IgSW5maW5pdHksIHRoZXNlIHdpbGwg
YmUKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChzdGQ6Omlz
ZmluaXRlKHgpKTsKIAogICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhudW1iZXJUb0ZpeGVkV2lk
dGhTdHJpbmcoeCwgZGVjaW1hbFBsYWNlcywgYnVmZmVyKSkpKTsKKyAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgU3RyaW5nKG51bWJlclRvRml4ZWRXaWR0aFN0cmluZyh4LCBkZWNpbWFsUGxhY2Vz
LCBidWZmZXIpKSk7CiB9CiAKIC8vIHRvUHJlY2lzaW9uIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEg
c3RyaW5nLCB0YWtlaW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYQpAQCAtNDMyLDcgKzQzMiw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIC8vIGRlY2ltYWws
IHdoaWxzdCAxMDAwIGlzIGNvbnZlcnRlZCB0byB0aGUgZXhwb25lbnRpYWwgcmVwcmVzZW50YXRp
b24gMS4wMGUrMy4KIC8vIEZvciBuZWdhdGl2ZSBleHBvbmVudHMgdmFsdWVzID49IDFlLTYgYXJl
IGZvcm1hdGVkIGFzIGRlY2ltYWwgZnJhY3Rpb25zLAogLy8gd2l0aCBzbWFsbGVyIHZhbHVlcyBj
b252ZXJ0ZWQgdG8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NDksMTQgKzQ0OSwxNCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAKICAgICAvLyBUbyBwcmVjaXNpb24gY2Fs
bGVkIHdpdGggbm8gYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBUb1N0cmluZy4KICAgICBpZiAoaXNV
bmRlZmluZWQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpKTsKKyAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgpKTsKIAogICAg
IC8vIEhhbmRsZSBOYU4gYW5kIEluZmluaXR5LgogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4KSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpKTsKKyAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh4
KSk7CiAKICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmcobnVtYmVyVG9GaXhlZFByZWNpc2lvblN0
cmluZyh4LCBzaWduaWZpY2FudEZpZ3VyZXMsIGJ1ZmZlcikpKSk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIFN0cmluZyhudW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nKHgsIHNpZ25pZmlj
YW50RmlndXJlcywgYnVmZmVyKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludDMyX3QgZXh0cmFj
dFJhZGl4RnJvbUFyZ3MoRXhlY1N0YXRlKiBleGVjKQpAQCAtNDczLDI2ICs0NzMsMjYgQEAgc3Rh
dGljIGlubGluZSBpbnQzMl90IGV4dHJhY3RSYWRpeEZyb21BcgogICAgIHJldHVybiByYWRpeDsK
IH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBpbnRlZ2VyVmFsdWVUb1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgcmFkaXgsIGludDMyX3QgdmFsdWUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgaW50ZWdlclZhbHVlVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90
IHJhZGl4LCBpbnQzMl90IHZhbHVlKQogewogICAgIC8vIEEgbmVnYXRpdmUgdmFsdWUgY2FzdGVk
IHRvIHVuc2lnbmVkIHdvdWxkIGJlIGJpZ2dlciB0aGFuIDM2ICh0aGUgbWF4IHJhZGl4KS4KICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihyYWRpeCkpIHsKICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDM2KTsKICAgICAgICAgQVNTRVJU
KHZhbHVlID49IDApOwogICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmlu
ZyhyYWRpeERpZ2l0c1t2YWx1ZV0pKTsKKyAgICAgICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHJhZGl4RGlnaXRzW3ZhbHVlXSk7CiAgICAgfQogCiAgICAg
aWYgKHJhZGl4ID09IDEwKSB7CiAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlKSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcodm0sIHZtLT5udW1lcmljU3Ry
aW5ncy5hZGQodmFsdWUpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKGV4ZWMsIHRvU3RyaW5nV2l0aFJhZGl4KHZhbHVlLCByYWRpeCkpKTsKKyAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdG9TdHJpbmdXaXRoUmFkaXgodmFsdWUsIHJhZGl4KSk7CiAKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTEwLDE2ICs1MTAsMTYg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgICAgICByZXR1
cm4gaW50ZWdlclZhbHVlVG9TdHJpbmcoZXhlYywgcmFkaXgsIGludGVnZXJWYWx1ZSk7CiAKICAg
ICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoZG91YmxlVmFsdWUpKSk7CisgICAgICAgIHJl
dHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdzLmFkZChkb3VibGVWYWx1ZSkpOwog
CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGRvdWJsZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQoZG91YmxlVmFsdWUpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoZG91YmxlVmFs
dWUpKTsKIAogICAgIFJhZGl4QnVmZmVyIHM7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyhleGVjLCB0b1N0cmluZ1dpdGhSYWRpeChzLCBkb3VibGVWYWx1ZSwgcmFkaXgpKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nV2l0aFJhZGl4KHMsIGRvdWJsZVZh
bHVlLCByYWRpeCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC01MjgsMTAgKzUyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG51bWJlclByb3RvCiAgICAgaWYgKCF0b1RoaXNOdW1iZXIoZXhlYy0+dGhpc1ZhbHVlKCks
IHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC01NDAsNyArNTQwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0b1RoaXNOdW1iZXIodGhpc1ZhbHVlLCB4KSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFdURjo6bWFrZVN0cmluZygidGhp
c051bWJlclZhbHVlIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiwgYXNTdHJpbmcoanNUeXBlU3Ry
aW5nRm9yVmFsdWUoZXhlYywgdGhpc1ZhbHVlKSktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcih4KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC01MCw2ICs1MCw2IEBAIHByaXZhdGU6CiAgICAgTnVtYmVyUHJvdG90eXBlKFZNJiwgU3Ry
dWN0dXJlKik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJv
dG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zOSwxOSArMzksMTkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eU5hbWVzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRl
KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvclNlYWwoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKEV4ZWNT
dGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rvcklz
RnJvemVuKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2V0UHJvdG90eXBlT2YoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eU5hbWVzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2VhbChFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRFeHRlbnNpb25zKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFs
ZWQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJ
c0Zyb3plbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvcklzKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTEzNyw5ICsxMzcsOSBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgcmV0dXJuIGFyZy50
b09iamVjdChleGVjLCBnbG9iYWxPYmplY3QpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoT2JqZWN0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y29uc3RydWN0T2JqZWN0KGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdE9iamVjdChleGVjLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5
cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTE0OCw5ICsxNDgsOSBAQCBDb25zdHJ1Y3RUeXBlIE9i
amVjdENvbnN0cnVjdG9yOjpnZXRDb25zCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmplY3RDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3RPYmplY3QoZXhlYywgSlNWYWx1ZSgpKSk7CisgICAgcmV0dXJu
IGNvbnN0cnVjdE9iamVjdChleGVjLCBKU1ZhbHVlKCkpOwogfQogCiBDYWxsVHlwZSBPYmplY3RD
b25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAt
MTU5LDE3ICsxNTksMTcgQEAgQ2FsbFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENhbGxEYXRh
KAogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShv
YmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYykpOworICAgIHJldHVybiBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xODMsMTIgKzE4MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3RvdHlwZSB2YWx1ZSBjYW4gb25seSBiZSBh
biBvYmplY3Qgb3IgbnVsbCIpKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBvYmplY3RWYWx1
ZS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
Ym9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5
cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhy
b3dJZkNhbnRTZXQpOwogICAgIEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5l
eGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0VmFsdWUpOworICAgIHJldHVybiBvYmplY3RWYWx1ZTsKIH0KIAogSlNWYWx1ZSBv
YmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTI0
MSw2OSArMjQxLDY5IEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQK
ICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSkpOworICAgIHJldHVybiBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jz
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVj
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsKKyAgICByZXR1cm4gb2JqZWN0Q29uc3RydWN0
b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGV4ZWMsIG9iamVjdCk7CiB9CiAKIC8vIEZJWE1F
OiBVc2UgdGhlIGVudW1lcmF0aW9uIGNhY2hlLgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1l
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIHJldHVybiBvd25Qcm9w
ZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKIH0KIAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVy
YXRpb24gY2FjaGUuCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5U3ltYm9scyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVy
dHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhl
Yywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKTsKIH0KIAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUu
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5cyhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JLZXlz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgcmV0dXJuIG93blByb3Bl
cnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50
b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhl
eGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhl
eGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIH0KIAogLy8gRVM2IDYuMi40LjUgVG9Qcm9wZXJ0
eURlc2NyaXB0b3IKQEAgLTQwMyw3ICs0MDMsNyBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00MTIsMTcgKzQxMiwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3BlcnRpZXMgY2Fu
IG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIpKTsKICAgICBKU09iamVjdCogb2JqID0gYXNP
YmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGF1dG8gc3Vj
Y2VzcyA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNj
cmlwdG9yKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwogICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmli
dXRlcygpICYgQWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgb2JqLT5tZXRob2RUYWJs
ZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCB0cnVlKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShvYmopOworICAgIHJldHVybiBvYmo7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVBy
b3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJv
cGVydGllcykKQEAgLTQ2NSw3ICs0NjUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0
aWVzKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVy
dGllcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NzYsMTIgKzQ3NiwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3Qq
IHByb3BzID0gZXhlYy0+YXJndW1lbnQoMSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEh
c2NvcGUuZXhjZXB0aW9uKCkgPT0gIXByb3BzKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3BzKSkK
LSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmaW5lUHJv
cGVydGllcyhleGVjLCB0YXJnZXRPYmosIHByb3BzKSk7CisgICAgcmV0dXJuIGRlZmluZVByb3Bl
cnRpZXMoZXhlYywgdGFyZ2V0T2JqLCBwcm9wcyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTQ5MywxMSArNDkzLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgPyBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCBhc09iamVjdChwcm90bykpCiAgICAgICAgIDogY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJl
KCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ld09iamVjdCk7CisgICAgICAgIHJldHVybiBuZXdPYmpl
Y3Q7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm9wZXJ0eSBk
ZXNjcmlwdG9yIGxpc3QgbXVzdCBiZSBhbiBPYmplY3QuIikpOwogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmluZVByb3BlcnRpZXMoZXhlYywgbmV3
T2JqZWN0LCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSkpKTsKKyAgICByZXR1cm4gZGVmaW5l
UHJvcGVydGllcyhleGVjLCBuZXdPYmplY3QsIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSk7
CiB9CiAKIGVudW0gY2xhc3MgSW50ZWdyaXR5TGV2ZWwgewpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJv
b2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JT
ZWFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvclNlYWwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTU1LDIyICs1NTUs
MjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDEu
IElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CisgICAgICAgIHJldHVybiBvYmo7CiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9i
amVjdCkpIHsKICAgICAgICAgb2JqZWN0LT5zZWFsKHZtKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOworICAgICAgICByZXR1cm4gb2JqOwogICAgIH0KIAogICAgIGJvb2wg
c3VjY2VzcyA9IHNldEludGVncml0eUxldmVsPEludGVncml0eUxldmVsOjpTZWFsZWQ+KGV4ZWMs
IHZtLCBvYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKFVO
TElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gcHJldmVudCBleHRlbnNpb24gaW4gT2JqZWN0LnNlYWwi
KSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKKyAgICByZXR1cm4g
b2JqOwogfQogCiBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0KQpAQCAtNTkwLDMxICs1OTAsMzEgQEAgSlNPYmplY3QqIG9i
amVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXpl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlz
IG5vdCBPYmplY3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShvYmopOworICAgICAgICByZXR1cm4gb2JqOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBhc09iamVjdChvYmopKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lvbnMoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcmd1bWVudCk7CisgICAgICAgIHJldHVy
biBhcmd1bWVudDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYXJndW1lbnQpOwog
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4
ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKKyAgICByZXR1cm4gb2Jq
ZWN0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9y
SXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjIy
LDE2ICs2MjIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAog
ICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAgICAgSlNW
YWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAg
IHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFsZWQodm0pKSk7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZCh2bSkpOwogCiAgICAgLy8gMi4g
Rm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJv
bHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkluY2x1ZGUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFBy
b3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwog
ICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0
aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAgLTY0MywxNyArNjQzLDE3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAvLyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFs
c2UuCiAgICAgICAgIGlmIChkZXNjLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oZmFsc2UpOwogICAgIH0KIAogICAgIC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIGlzIGZhbHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAg
IC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0g
b2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oIWlzRXh0ZW5zaWJsZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbighaXNFeHRlbnNpYmxlKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY2MSwxNiArNjYxLDE2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlz
IG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUp
OwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNG
aW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzRnJvemVuKHZtKSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKG9i
amVjdC0+aXNGcm96ZW4odm0pKTsKIAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9w
ZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMs
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFy
cmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBA
IC02ODMsMzIgKzY4MywzMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0CiAgICAgICAgIC8vIGIuIElmIElzRGF0YURlc2NyaXB0b3IoZGVzYykgaXMgdHJ1ZSB0aGVu
CiAgICAgICAgIC8vIGkuIElmIGRlc2MuW1tXcml0YWJsZV1dIGlzIHRydWUsIHJldHVybiBmYWxz
ZS4gYy4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0dXJuIGZhbHNl
LgogICAgICAgICBpZiAoKGRlc2MuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2Mud3JpdGFibGUo
KSkgfHwgZGVzYy5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKGZh
bHNlKTsKICAgICB9CiAKICAgICAvLyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwg
cHJvcGVydHkgb2YgTyBpcyBmYWxzZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhl
cndpc2UsIHJldHVybiBmYWxzZS4KICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNF
eHRlbnNpYmxlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVu
c2libGUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVy
biBqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0V4dGVuc2libGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2Up
OwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogICAgIGJvb2wgaXNFeHRl
bnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICByZXR1cm4ganNCb29sZWFuKGlzRXh0ZW5zaWJsZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc2FtZVZhbHVl
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSkpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKHNhbWVWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJn
dW1lbnQoMSkpKTsKIH0KIAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMSArMjYsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9ycyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb3duRW51bWVyYWJsZVByb3BlcnR5S2V5cyhFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JLZXlz
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0
eUtleXMoRXhlY1N0YXRlKik7CiAKIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMTUgKzMzLDE1
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVy
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVy
dHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJv
cGVydHkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBH
ZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSopOwogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
T2JqZWN0UHJvdG90eXBlKTsKIApAQCAtNzksNDUgKzc5LDQ1IEBAIE9iamVjdFByb3RvdHlwZSog
T2JqZWN0UHJvdG90eXBlOjpjcmVhdGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIEpTT2JqZWN0KiB2YWx1ZU9iaiA9IHRoaXNW
YWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlT2JqKSkKLSAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
YWx1ZU9iaik7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHZhbHVlT2JqOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVy
dHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFz
Y29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSh2bSk7CiAgICAgSGFzT3duUHJvcGVydHlDYWNoZSogaGFzT3duUHJvcGVydHlDYWNoZSA9IHZt
LmVuc3VyZUhhc093blByb3BlcnR5Q2FjaGUoKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDxib29s
PiByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eUNhY2hlLT5nZXQoc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUpKSB7CiAgICAgICAgIEFTU0VSVCgqcmVzdWx0ID09IHRoaXNPYmplY3QtPmhhc093blByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oKnJlc3VsdCkp
OworICAgICAgICByZXR1cm4ganNCb29sZWFuKCpyZXN1bHQpOwogICAgIH0KIAogICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Q
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBoYXNPd25Qcm9wZXJ0eUNhY2hlLT50cnlBZGQodm0sIHNsb3QsIHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5
cGVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjYs
MzEgKzEyNiwzMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgQVNT
RVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSgh
dGhpc09iaikpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICByZXR1
cm4ganNCb29sZWFuKGZhbHNlKTsKIAogICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4ZWMtPmFy
Z3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKCF2LmlzT2JqZWN0
KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
OworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAgIGlmICh2ID09
IHRoaXNPYmopCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CisgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAgICAgICB2ID0g
YXNPYmplY3QodiktPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihn
ZXQpOwpAQCAtMTY5LDE2ICsxNjksMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90bwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09i
amVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1
ZSBzZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE4
Niw3ICsxODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
ImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVj
LT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNj
cmlwdG9yLnNldFNldHRlcihzZXQpOwpAQCAtMTk3LDE5ICsxOTcsMTkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNM
b29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGJvb2wgaGFzUHJvcGVydHkgPSB0aGlzT2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKQEAgLTIxNywyOSArMjE3
LDI5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAo
aGFzUHJvcGVydHkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNBY2Nlc3NvcigpKSB7CiAgICAgICAg
ICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHNsb3QuZ2V0dGVyU2V0dGVyKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2V0dGVyU2V0dGVyLT5pc0dldHRlck51bGwoKSA/IEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSA6IEpTVmFsdWU6OmVuY29kZShnZXR0ZXJTZXR0ZXItPmdl
dHRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXItPmlzR2V0dGVyTnVsbCgp
ID8ganNVbmRlZmluZWQoKSA6IGdldHRlclNldHRlci0+Z2V0dGVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgQ3VzdG9tQWNjZXNzb3IpIHsKICAgICAgICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICAgICAgQVNTRVJUKHNs
b3Quc2xvdEJhc2UoKSk7CiAgICAgICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpLT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgPyBKU1ZhbHVlOjpl
bmNvZGUoZGVzY3JpcHRvci5nZXR0ZXIoKSkgOiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpID8g
ZGVzY3JpcHRvci5nZXR0ZXIoKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRoaXNP
YmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwpAQCAtMjQ3
LDc5ICsyNDcsNzkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwog
ICAgIGlmIChoYXNQcm9wZXJ0eSkgewogICAgICAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpIHsK
ICAgICAgICAgICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gc2xvdC5nZXR0ZXJTZXR0
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXItPmlzU2V0dGVyTnVsbCgpID8g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIDogSlNWYWx1ZTo6ZW5jb2RlKGdldHRlclNl
dHRlci0+c2V0dGVyKCkpOworICAgICAgICAgICAgcmV0dXJuIGdldHRlclNldHRlci0+aXNTZXR0
ZXJOdWxsKCkgPyBqc1VuZGVmaW5lZCgpIDogZ2V0dGVyU2V0dGVyLT5zZXR0ZXIoKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBDdXN0b21BY2Nlc3Nvcikgewog
ICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgICAgICBB
U1NFUlQoc2xvdC5zbG90QmFzZSgpKTsKICAgICAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
KQotICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSA/IEpT
VmFsdWU6OmVuY29kZShkZXNjcmlwdG9yLnNldHRlcigpKSA6IEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkgPyBkZXNjcmlwdG9yLnNldHRlcigpIDoganNVbmRlZmluZWQoKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
ICAgICBib29sIGVudW1lcmFibGUgPSB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihlbnVtZXJhYmxlKSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihlbnVtZXJhYmxlKTsKIH0KIAogLy8gMTUuMi40LjMgT2Jq
ZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxLiBMZXQgTyBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgVG9PYmplY3QgcGFzc2luZyB0aGUgdGhpcyB2YWx1ZSBhcyB0aGUgYXJndW1lbnQu
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgLy8gMi4gTGV0IHRvU3RyaW5nIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyBwYXNzaW5nICJ0b1N0cmluZyIgYXMgdGhlIGFy
Z3VtZW50LgogICAgIEpTVmFsdWUgdG9TdHJpbmcgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50b1N0cmluZyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIC8vIDMuIElmIElzQ2FsbGFibGUodG9TdHJpbmcpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVF
cnJvciBleGNlcHRpb24uCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YSh0b1N0cmluZywgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyA0LiBS
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgdG9TdHJpbmcgcGFzc2luZyBPIGFzIHRoZSB0aGlzIHZhbHVlIGFuZCBubyBhcmd1bWVudHMu
CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChl
eGVjLCB0b1N0cmluZywgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4ZWMtPmVtcHR5TGlz
dCgpKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgdG9TdHJpbmcsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUuaXNV
bmRlZmluZWQoKSA/IHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRPYmplY3RTdHJpbmcoKSA6IHZt
LnNtYWxsU3RyaW5ncy5udWxsT2JqZWN0U3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdGhpc1Zh
bHVlLmlzVW5kZWZpbmVkKCkgPyB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkT2JqZWN0U3RyaW5n
KCkgOiB2bS5zbWFsbFN0cmluZ3MubnVsbE9iamVjdFN0cmluZygpOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICF0aGlzT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pLT5vYmplY3RUb1N0cmluZ1ZhbHVlKCk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
CiAgICAgUHJvcGVydHlOYW1lIHRvU3RyaW5nVGFnU3ltYm9sID0gdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2w7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHRvU3RyaW5nVGFn
U3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAt
PiBKU1ZhbHVlIHsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJp
bmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVjLCB0b1N0
cmluZ1RhZ1N5bWJvbCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KICAgICAgICAgYXV0byByZXN1bHQgPSBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBu
ZXdTdHJpbmcpOwogICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCByZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfSkpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3Rv
dHlwZS5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00NSw2ICs0NSw2IEBAIHBy
aXZhdGU6CiAgICAgT2JqZWN0UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CiB9OwogCi1KU19F
WFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xv
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM4LDE0ICszOCwxNCBA
QCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyKEV4ZWNTCiAgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzIGRpZmZlcmVuY2VzIGluIGN1c3RvbSB2YWx1ZXMgYW5kIGN1c3RvbSBhY2Nl
c3NvcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODAxNAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gbV9hdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNz
b3IgPyBtX3RoaXNWYWx1ZSA6IEpTVmFsdWUoc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmRlY29kZShtX2RhdGEuY3VzdG9tLmdldFZhbHVlKGV4ZWMsIEpTVmFsdWU6OmVuY29kZSh0
aGlzVmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRW
YWx1ZShleGVjLCB0aGlzVmFsdWUsIHByb3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUgUHJvcGVy
dHlTbG90OjpjdXN0b21BY2Nlc3NvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RhdGEuY3VzdG9tQWNjZXNzb3Iu
Z2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tQWNjZXNzb3IuZ2V0dGVyU2V0
dGVyLT5nZXR0ZXIoKShleGVjLCBKU1ZhbHVlOjplbmNvZGUobV90aGlzVmFsdWUpLCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlci0+
Z2V0dGVyKCkoZXhlYywgbV90aGlzVmFsdWUsIHByb3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUg
UHJvcGVydHlTbG90OjpnZXRQdXJlUmVzdWx0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNy0yMDA4LCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgc2xvdEJhc2UgLyByZWNlaXZlciBiZWhhdmlv
ciBkaWZmZXJlbmNlIGluIGN1c3RvbSB2YWx1ZXMgYW5kIGN1c3RvbSBhY2Nlc3NvcnMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODAxNAotICAgIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgKCpH
ZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
OwogCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0
OwogICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1
Myw3IEBAIFByb3h5Q29uc3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIHsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4
ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJs
ZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY0LDE5ICs2NCwxOSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlCiAgICAgSlNWYWx1ZSB0
YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAg
ICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFuZGxlcik7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVy
ZSgpLCBwcm94eSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBtYWtlSWRlbnRpZmll
cih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
bWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tlLCBOb25lKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9y
VGhyb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByb3h5UmV2b2NhYmxlQ29uc3RydWN0b3JUaHJvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eS5y
ZXZvY2FibGUgY2Fubm90IGJlIGNvbnN0cnVjdGVkLiBJdCBjYW4gb25seSBiZSBjYWxsZWQiKSk7
CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUHJveHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0KICAgICBwdXREaXJlY3Qodm0sIG1ha2VJZGVudGlmaWVyKHZtLCAicmV2b2NhYmxlIiksIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAyLCBBU0NJSUxpdGVyYWwoInJldm9j
YWJsZSIpLCBtYWtlUmV2b2NhYmxlUHJveHksIE5vSW50cmluc2ljLCBwcm94eVJldm9jYWJsZUNv
bnN0cnVjdG9yVGhyb3dFcnJvcikpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RQcm94eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFByb3h5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAg
ICBpZiAoZXhlYy0+bmV3VGFyZ2V0KCkuaXNVbmRlZmluZWQoKSkKQEAgLTEwMCw3ICsxMDAsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgSlNWYWx1ZSB0
YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUHJveHlPYmpl
Y3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFu
ZGxlcikpOworICAgIHJldHVybiBQcm94eU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgdGFyZ2V0LCBoYW5kbGVyKTsKIH0KIAogQ29uc3RydWN0VHlwZSBQ
cm94eUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEm
IGNvbnN0cnVjdERhdGEpCkBAIC0xMDksMTAgKzEwOSwxMCBAQCBDb25zdHJ1Y3RUeXBlIFByb3h5
Q29uc3RydWN0b3I6OmdldENvbnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiB9
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQcm94eShFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQcm94eShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+
dm0oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJveHkiKSk7CisgICAg
cmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsICJQcm94eSIpOwogfQogCiBDYWxsVHlwZSBQcm94eUNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAy
MTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDksOCArNDksNiBAQCBwcml2YXRlOgogICAgIFByb3h5Q29uc3Ry
dWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKLQotICAgIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBnZXRHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDkxLDEzICs0OTEsMTMgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRCeUluZGV4Q29tbW9uKGV4ZWMsIHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5Q2FsbChFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmZvcm1Qcm94eUNhbGwoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZl
VG9SZWN1cnNlU29mdCgpKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVj
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KICAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5
LT5oYW5kbGVyKCk7CkBAIC01MDgsMjQgKzUwOCwyNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChl
eGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiYXBwbHkiKSwgQVND
SUlMaXRlcmFsKCInYXBwbHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBi
ZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTT2Jq
ZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGFwcGx5TWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKHRhcmdldCwg
Y2FsbERhdGEpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT50aGlz
VmFsdWUoKSwgQXJnTGlzdChleGVjKSkpOworICAgICAgICByZXR1cm4gY2FsbChleGVjLCB0YXJn
ZXQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+dGhpc1ZhbHVlKCksIEFyZ0xpc3QoZXhlYykp
OwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywg
c3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4
ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJn
dW1lbnRzLmFwcGVuZChleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChh
cmdBcnJheSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbChleGVjLCBhcHBseU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBhcHBseU1ldGhvZCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogfQogCiBDYWxsVHlwZSBQcm94eU9iamVj
dDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsLCBDYWxsRGF0YSYgY2FsbERhdGEpCkBAIC01NDEs
MTMgKzU0MSwxMyBAQCBDYWxsVHlwZSBQcm94eU9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsCiAg
ICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwZXJmb3JtUHJveHlDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmb3JtUHJveHlDb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNl
U29mdCgpKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KICAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVj
LT5qc0NhbGxlZSgpKTsKICAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5LT5oYW5kbGVy
KCk7CkBAIC01NTgsMjcgKzU1OCwyNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywg
Y2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBBU0NJ
SUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3Vs
ZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJnZXQoKTsKICAgICBpZiAoY29uc3RydWN0
TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSB0YXJnZXQtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0Q29uc3RydWN0RGF0YSh0YXJnZXQsIGNvbnN0cnVjdERhdGEpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmUp
OwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwg
QXJnTGlzdChleGVjKSwgZXhlYy0+bmV3VGFyZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIEFyZ0xpc3Qo
ZXhlYyksIGV4ZWMtPm5ld1RhcmdldCgpKTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJh
eSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJnQXJyYXkpOwogICAgIGFy
Z3VtZW50cy5hcHBlbmQoZXhlYy0+bmV3VGFyZ2V0KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBjb25zdHJ1Y3RNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICghcmVz
dWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIlJlc3VsdCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0
JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9iamVjdCIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ29uc3RydWN0VHlwZSBQcm94
eU9iamVjdDo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJl
dm9rZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlSZXZva2UuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMTggKzU1LDE4IEBAIHZv
aWQgUHJveHlSZXZva2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcGVyZm9ybVByb3h5UmV2b2tlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcGVyZm9ybVByb3h5UmV2b2tlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBQ
cm94eVJldm9rZSogcHJveHlSZXZva2UgPSBqc0Nhc3Q8UHJveHlSZXZva2UqPihleGVjLT5qc0Nh
bGxlZSgpKTsKICAgICBKU1ZhbHVlIHByb3h5VmFsdWUgPSBwcm94eVJldm9rZS0+cHJveHkoKTsK
ICAgICBpZiAocHJveHlWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihwcm94eVZhbHVlKTsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHByb3h5LT5yZXZva2Uodm0pOwogICAgIHBy
b3h5UmV2b2tlLT5zZXRQcm94eVRvTnVsbCh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogQ2FsbFR5
cGUgUHJveHlSZXZva2U6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xv
dC5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
dXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAg
Y2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBVbmNhY2hh
YmxlLCBFeGlzdGluZ1Byb3BlcnR5LCBOZXdQcm9wZXJ0eSwgU2V0dGVyUHJvcGVydHksIEN1c3Rv
bVZhbHVlLCBDdXN0b21BY2Nlc3NvciB9OwogICAgIGVudW0gQ29udGV4dCB7IFVua25vd25Db250
ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCB9OwotICAgIHR5cGVkZWYgYm9vbCAoKlB1dFZhbHVl
RnVuYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdmFsdWUpOworICAgIHR5cGVkZWYgYm9vbCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwg
SlNWYWx1ZSB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKTsKIAogICAgIFB1dFByb3BlcnR5U2xv
dChKU1ZhbHVlIHRoaXNWYWx1ZSwgYm9vbCBpc1N0cmljdE1vZGUgPSBmYWxzZSwgQ29udGV4dCBj
b250ZXh0ID0gVW5rbm93bkNvbnRleHQsIGJvb2wgaXNJbml0aWFsaXphdGlvbiA9IGZhbHNlKQog
ICAgICAgICA6IG1fdHlwZShVbmNhY2hhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0Q29uc3RydWN0KEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERl
ZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamVjdEVudW1lcmF0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXQoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZShFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3RPd25LZXlzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdFNldChFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXRQcm90
b3R5cGVPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVj
dE9iamVjdENvbnN0cnVjdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RW51bWVyYXRlKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZWN0R2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZmxlY3RPYmplY3RJc0V4dGVuc2libGUoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RPd25LZXlzKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0UHJldmVudEV4dGVuc2lv
bnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3RTZXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC05Myw1OSArOTMsNTkg
QEAgdm9pZCBSZWZsZWN0T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0
LmNvbnN0cnVjdAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0Q29u
c3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2Jq
ZWN0Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKTsKIAogICAgIENvbnN0cnVj
dERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGU7CiAg
ICAgaWYgKCF0YXJnZXQuaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKTsKIAogICAgIEpTVmFsdWUg
bmV3VGFyZ2V0ID0gdGFyZ2V0OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykg
ewogICAgICAgICBuZXdUYXJnZXQgPSBleGVjLT5hcmd1bWVudCgyKTsKICAgICAgICAgaWYgKCFu
ZXdUYXJnZXQuaXNDb25zdHJ1Y3RvcigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNv
bnN0cnVjdCByZXF1aXJlcyB0aGUgdGhpcmQgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBw
cmVzZW50IikpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgdGhpcmQgYXJn
dW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBwcmVzZW50IikpOwogICAgIH0KIAogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBKU09iamVjdCogYXJndW1lbnRzT2JqZWN0
ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAo
IWFyZ3VtZW50c09iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1
aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0
cnVjdCByZXF1aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKIAogICAg
IGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFyZ3VtZW50c09iamVjdCwgUnVudGltZVR5
cGVNYXNrQWxsVHlwZXMsIEFTQ0lJTGl0ZXJhbCgiVGhpcyBlcnJvciBtdXN0IG5vdCBiZSByYWlz
ZWQiKSwgWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50aW1lVHlwZSkgLT4gYm9vbCB7CiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0
cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7CisgICAgcmV0
dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IGFyZ3VtZW50cywgbmV3VGFyZ2V0KTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtcmVmbGVjdC5kZWZpbmVwcm9wZXJ0eQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2Jq
ZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlJlZmxlY3QuZGVmaW5lUHJvcGVydHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGJvb2wgc3VjY2Vz
cyA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlw
dG9yKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwogICAgIGlm
IChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIEFTU0VSVCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkg
JiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKICAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIApAQCAtMTUzLDM1ICsxNTMsMzUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIGJvb2wgc2hvdWxkVGhy
b3cgPSBmYWxzZTsKICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0
KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRh
cmdldE9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykp
KTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRhcmdldE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5k
ZWZpbmVPd25Qcm9wZXJ0eSh0YXJnZXRPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpKTsKIH0KIAogLy8gRklYTUU6IFJlZmxlY3QuZW51bWVyYXRlIGlz
IHJlbW92ZWQgaW4gRUNNQSAyMDE2IGRyYWZ0LgogLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0
aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXJlZmxlY3QuZW51bWVyYXRlCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RFbnVtZXJhdGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RFbnVtZXJhdGUoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJl
ZmxlY3QuZW51bWVyYXRlIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3Qi
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiUmVmbGVjdC5lbnVtZXJhdGUgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFu
IG9iamVjdCIpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5wcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZSgpLCBhc09iamVjdCh0
YXJnZXQpKSk7CisgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0
dXJlKCksIGFzT2JqZWN0KHRhcmdldCkpOwogfQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1yZWZsZWN0LmdldAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJn
dW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZ2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSB0YXJnZXQ7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzKQpAQCAtMTg5LDk1ICsxODksOTUgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogCiAgICAgUHJvcGVydHlT
bG90IHNsb3QocmVjZWl2ZXIsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQp
OwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRhcmdl
dC5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSk7CisgICAgcmV0dXJuIHRhcmdldC5nZXQo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZs
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQg
YmUgYW4gb2JqZWN0IikpOwogCiAgICAgYXV0byBrZXkgPSBleGVjLT5hcmd1bWVudCgxKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1
Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBhc09iamVjdCh0YXJnZXQpLCBrZXkp
KTsKKyAgICByZXR1cm4gb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
ZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRwcm90b3R5cGVvZgotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXRQcm90b3R5cGVPZihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUg
YW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0
IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0YXJnZXQpLT5nZXRQcm90b3R5cGUodm0sIGV4
ZWMpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodGFyZ2V0KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVj
KTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5p
c2V4dGVuc2libGUKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdElz
RXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVj
dE9iamVjdElzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0Lmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5pc0V4dGVuc2libGUgcmVxdWlyZXMg
dGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmlzRXh0ZW5zaWJs
ZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogCiAgICAgYm9v
bCBpc0V4dGVuc2libGUgPSBhc09iamVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxlKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4ganNCb29sZWFuKGlzRXh0ZW5z
aWJsZSk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxl
Y3Qub3dua2V5cwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0T3du
S2V5cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVj
dE93bktleXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0
YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Qub3duS2V5cyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Qub3duS2V5cyByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBqc0Nhc3Q8SlNPYmplY3Qq
Pih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhl
YywganNDYXN0PEpTT2JqZWN0Kj4odGFyZ2V0KSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0Fu
ZFN5bWJvbHMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogfQogCiAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LnByZXZlbnRleHRlbnNpb25z
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RQcmV2ZW50RXh0ZW5z
aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVj
dFByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zIHJlcXVp
cmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50
RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh0YXJnZXQpOwogICAgIGJvb2wgcmVzdWx0
ID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7
CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3Quc2V0
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJl
ZmxlY3Quc2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UmVmbGVjdC5zZXQgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsK
ICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9
IHRhcmdldDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDQpCkBAIC0yODcsMjgg
KzI4NywyOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
Ym9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZhbHNlOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRhcmdldE9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMt
PmFyZ3VtZW50KDIpLCBzbG90KSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0YXJnZXRPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZXhlYy0+YXJndW1lbnQoMiksIHNsb3QpKTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtcmVmbGVjdC5zZXRwcm90b3R5cGVvZgotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UmVmbGVjdC5zZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlJlZmxlY3Quc2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBKU1ZhbHVlIHByb3RvID0gZXhlYy0+YXJndW1l
bnQoMSk7CiAgICAgaWYgKCFwcm90by5pc09iamVjdCgpICYmICFwcm90by5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJSZWZsZWN0LnNldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBzZWNvbmQg
YXJndW1lbnQgYmUgZWl0aGVyIGFuIG9iamVjdCBvciBudWxsIikpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Quc2V0UHJv
dG90eXBlT2YgcmVxdWlyZXMgdGhlIHNlY29uZCBhcmd1bWVudCBiZSBlaXRoZXIgYW4gb2JqZWN0
IG9yIG51bGwiKSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsK
IAogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxzZTsKICAgICBib29sIGRpZFNl
dFByb3RvdHlwZSA9IG9iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBleGVjLCBwcm90bywgc2hvdWxk
VGhyb3dJZkNhbnRTZXQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFBy
b3RvdHlwZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0
dXJuIGpzQm9vbGVhbihkaWRTZXRQcm90b3R5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIw
MDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMCwxNyAr
MzAsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdF
eHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVj
dG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgcmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvcklucHV0
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdF
eHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Oworc3RhdGljIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKK3N0YXRpYyBKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9y
TGFzdFBhcmVuKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNW
YWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4
dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogdGVtcGxhdGU8aW50IE4+Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCi1zdGF0
aWMgYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci1zdGF0aWMgYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11
bHRpbGluZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOworc3Rh
dGljIGJvb2wgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBK
U1ZhbHVlKTsKK3N0YXRpYyBib29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApAQCAtMTQ2
LDU0ICsxNDYsNTQgQEAgSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZQog
fQogCiB0ZW1wbGF0ZTxpbnQgTj4KLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9s
bGFyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5nZXRC
YWNrcmVmKGV4ZWMsIE4pKTsKKyAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3Rvcih0aGlzVmFs
dWUpLT5nZXRCYWNrcmVmKGV4ZWMsIE4pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25z
dHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKS0+aW5wdXQo
KSk7CisgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3IodGhpc1ZhbHVlKS0+aW5wdXQoKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4
cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdF
eHBDb25zdHJ1Y3RvcihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPm11bHRpbGluZSgpKSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPm11
bHRpbGluZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0
Y2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPmdl
dEJhY2tyZWYoZXhlYywgMCkpOworICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNW
YWx1ZSktPmdldEJhY2tyZWYoZXhlYywgMCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENv
bnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpLT5nZXRMYXN0UGFyZW4oZXhlYykpOworICAgIHJldHVybiBhc1JlZ0V4cENv
bnN0cnVjdG9yKHRoaXNWYWx1ZSktPmdldExhc3RQYXJlbihleGVjKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1
Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0
b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5nZXRMZWZ0Q29udGV4dChleGVjKSk7Cisg
ICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3IodGhpc1ZhbHVlKS0+Z2V0TGVmdENvbnRleHQo
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5n
ZXRSaWdodENvbnRleHQoZXhlYykpOworICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRo
aXNWYWx1ZSktPmdldFJpZ2h0Q29udGV4dChleGVjKTsKIH0KIAotYm9vbCBzZXRSZWdFeHBDb25z
dHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGlm
IChhdXRvIGNvbnN0cnVjdG9yID0ganNEeW5hbWljQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkgewotICAgICAgICBjb25zdHJ1Y3Rvci0+c2V0SW5w
dXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGF1dG8gY29uc3RydWN0b3IgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4odGhp
c1ZhbHVlKSkgeworICAgICAgICBjb25zdHJ1Y3Rvci0+c2V0SW5wdXQoZXhlYywgdmFsdWUudG9T
dHJpbmcoZXhlYykpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK2Jv
b2wgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9
IGpzRHluYW1pY0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSkpIHsKLSAgICAgICAgY29uc3RydWN0b3ItPnNldE11bHRpbGluZShKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBq
c0R5bmFtaWNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKSkgeworICAgICAgICBj
b25zdHJ1Y3Rvci0+c2V0TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTgsMTggKzI5OCwx
OCBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJu
IHJlZ0V4cENyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCwgcGF0dGVybkFyZywg
ZmxhZ3NBcmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVzU3BlY1JlZ0V4
cENyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjUmVn
RXhwQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEpTVmFsdWUgcGF0dGVy
bkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgZmxhZ3NBcmcgPSBleGVjLT5h
cmd1bWVudCgxKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cENyZWF0ZShleGVj
LCBnbG9iYWxPYmplY3QsIGpzVW5kZWZpbmVkKCksIHBhdHRlcm5BcmcsIGZsYWdzQXJnKSk7Cisg
ICAgcmV0dXJuIHJlZ0V4cENyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGpzVW5kZWZpbmVkKCks
IHBhdHRlcm5BcmcsIGZsYWdzQXJnKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RSZWdFeHAoZXhlYywgYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgZXhlYy0+anNDYWxs
ZWUoKSwgZXhlYy0+bmV3VGFyZ2V0KCkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0UmVnRXhwKGV4
ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCks
IGFyZ3MsIGV4ZWMtPmpzQ2FsbGVlKCksIGV4ZWMtPm5ld1RhcmdldCgpKTsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMzE4LDEwICszMTgsMTAgQEAgQ29uc3RydWN0
VHlwZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBl
OjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmVn
RXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xp
c3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdFJlZ0V4
cChleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpLCBhcmdzLCBleGVjLT5qc0NhbGxlZSgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFJlZ0V4
cChleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpLCBhcmdzLCBleGVjLT5qc0NhbGxlZSgpKTsKIH0KIAogQ2FsbFR5cGUgUmVnRXhwQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0x
NDUsNiArMTQ1LDYgQEAgQUxXQVlTX0lOTElORSBib29sIGlzUmVnRXhwKFZNJiB2bSwgRXhlYwog
ICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlc1NwZWNSZWdFeHBDcmVhdGUoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjUmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSop
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAx
MiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LTIwMDgsIDIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xMzIsMTQgKzEzMiwxNCBAQCBib29s
IFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAgICAgcmV0dXJuIEJhc2U6OmRl
ZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBz
aG91bGRUaHJvdyk7CiB9CiAKLXN0YXRpYyBib29sIHJlZ0V4cE9iamVjdFNldExhc3RJbmRleFN0
cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpCitzdGF0aWMgYm9vbCByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gYXNSZWdFeHBPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRM
YXN0SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgdHJ1ZSk7CisgICAgcmV0dXJu
IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldExhc3RJbmRleChleGVjLCB2YWx1ZSwgdHJ1
ZSk7CiB9CiAKLXN0YXRpYyBib29sIHJlZ0V4cE9iamVjdFNldExhc3RJbmRleE5vblN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCitzdGF0aWMgYm9vbCByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gYXNSZWdFeHBPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRMYXN0
SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgZmFsc2UpOworICAgIHJldHVybiBh
c1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRMYXN0SW5kZXgoZXhlYywgdmFsdWUsIGZhbHNl
KTsKIH0KIAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDE2
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDctMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDE2ICs0NCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhl
YyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9H
ZXR0ZXJJZ25vcmVDYXNlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxpbmUoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclN0aWNreShFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
R2V0dGVyVW5pY29kZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJGbGFncyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29t
cGlsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlcklnbm9yZUNhc2UoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyTXVsdGlsaW5lKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclN0
aWNreShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG9HZXR0ZXJVbmljb2RlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJGbGFncyhFeGVjU3RhdGUqKTsKIAogY29uc3Qg
Q2xhc3NJbmZvIFJlZ0V4cFByb3RvdHlwZTo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSZWdFeHBQcm90b3R5cGUpIH07CiAKQEAgLTk2
LDcgKzk2LDcgQEAgdm9pZCBSZWdFeHBQcm90b3R5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY1Rlc3RGYXN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0Z1bmNUZXN0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
MDcsMTIgKzEwNywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nT3JOdWxs
KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFzdHJpbmcpOwogICAg
IGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT50
ZXN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKSkpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVzdChleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmluZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtMTIzLDEyICsxMjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90bwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZ09yTnVsbChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9
PSAhc3RyaW5nKTsKICAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFs
dWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKSk7Cisg
ICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPmV4ZWMoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jTWF0Y2hGYXN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTEzOSwxNiArMTM5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmdPck51bGwoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkgPT0gIXN0cmluZyk7CiAgICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiBlbmNvZGVk
SlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCktPmdsb2JhbCgpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFs
dWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKSk7Cisg
ICAgICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVl
KS0+bWF0Y2hHbG9iYWwoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcp
KTsKKyAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+bWF0Y2hHbG9iYWwoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY3LDEyICsxNjcsMTIgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9i
amVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHBhdHRl
cm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogYXJnMC50b1dURlN0cmlu
ZyhleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAg
ICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvV1RGU3Ry
aW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1
Y3Rvci4iKSkpOwogICAgICAgICB9CkBAIC0xODUsNyArMTg1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSkt
PnNldFJlZ0V4cCh2bSwgcmVnRXhwKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgYXNSZWdF
eHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gdGhpc1ZhbHVlOwogfQogCiB0
eXBlZGVmIHN0ZDo6YXJyYXk8Y2hhciwgNSArIDE+IEZsYWdzU3RyaW5nOyAvLyA1IGRpZmZlcmVu
dCBmbGFncyBhbmQgYSBudWxsIGNoYXJhY3RlciB0ZXJtaW5hdG9yLgpAQCAtMjI1LDcgKzIyNSw3
IEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NTdHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICByZXR1cm4g
c3RyaW5nOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMzks
MjMgKzIzOSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkp
OwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJu
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJuVmFsdWU7CiAKICAgICBKU1ZhbHVlIHNvdXJj
ZVZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBTdHJpbmcgc291cmNlID0gc291
cmNlVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5mbGFncyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBTdHJpbmcgZmxhZ3MgPSBmbGFnc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICcvJywgc291cmNl
LCAnLycsIGZsYWdzKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Jy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckdsb2JhbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0yNjMsMTQgKzI2MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6Omlu
Zm8oKSkpKSB7CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBl
OjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgUmVnRXhwLnBy
b3RvdHlwZS5nbG9iYWwgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmpl
Y3QiKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNS
ZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPmdsb2JhbCgpKSk7CisgICAgcmV0dXJu
IGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdFeHAoKS0+Z2xvYmFsKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVySWdu
b3JlQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG9HZXR0ZXJJZ25vcmVDYXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI3
OCwxNCArMjc4LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmIChVTkxJ
S0VMWSghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkpIHsKICAgICAg
ICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90b3R5cGU6OmluZm8oKSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLmlnbm9yZUNh
c2UgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCktPmlnbm9yZUNhc2UoKSkpOworICAgIHJldHVybiBqc0Jvb2xl
YW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPmlnbm9yZUNhc2UoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxp
bmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0
dGVyTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI5MywxNCAr
MjkzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmIChVTkxJS0VMWSgh
dGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkpIHsKICAgICAgICAgaWYg
KHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90b3R5cGU6OmluZm8oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLm11bHRpbGluZSBnZXR0
ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCIpKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFs
dWUpLT5yZWdFeHAoKS0+bXVsdGlsaW5lKCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGFzUmVn
RXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5tdWx0aWxpbmUoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTdGlja3koRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU3RpY2t5KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMwOCwxNCArMzA4LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmluaGVy
aXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhl
cml0cyhSZWdFeHBQcm90b3R5cGU6OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLnN0aWNreSBnZXR0ZXIgY2FuIG9ubHkgYmUgY2Fs
bGVkIG9uIGEgUmVnRXhwIG9iamVjdCIpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCkt
PnN0aWNreSgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFs
dWUpLT5yZWdFeHAoKS0+c3RpY2t5KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvR2V0dGVyVW5pY29kZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJVbmljb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTMyMywxNCArMzIzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6
aW5mbygpKSkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90b3R5
cGU6OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAu
cHJvdG90eXBlLnVuaWNvZGUgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBv
YmplY3QiKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT51bmljb2RlKCkpKTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT51
bmljb2RlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
R2V0dGVyRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvR2V0dGVyRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzQw
LDkgKzM0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
VGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBh
biBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgZmxhZ3MuZGF0YSgpKSk7CisgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtNDUxLDcgKzQ1MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0
LnRvU3RyaW5nKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvR2V0dGVyU291cmNlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC00NTksMTcgKzQ1OSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAo
VU5MSUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7CiAg
ICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBBU0NJSUxp
dGVyYWwoIig/OikiKSkpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiKD86KSIpKTsKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuc291cmNlIGdldHRlciBj
YW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0IikpOwogICAgIH0KIAogICAgIFN0
cmluZyBwYXR0ZXJuID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPnBhdHRl
cm4oKTsKICAgICBpZiAocGF0dGVybi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZWdFeHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKGV4ZWMsIHBhdHRlcm4sIHBh
dHRlcm4uY2hhcmFjdGVyczgoKSwgcGF0dGVybi5sZW5ndGgoKSkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2VJbnRlcm5hbChleGVjLCBwYXR0ZXJu
LCBwYXR0ZXJuLmNoYXJhY3RlcnMxNigpLCBwYXR0ZXJuLmxlbmd0aCgpKSk7CisgICAgICAgIHJl
dHVybiByZWdFeHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKGV4ZWMsIHBhdHRlcm4sIHBhdHRl
cm4uY2hhcmFjdGVyczgoKSwgcGF0dGVybi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlZ0V4cFBy
b3RvR2V0dGVyU291cmNlSW50ZXJuYWwoZXhlYywgcGF0dGVybiwgcGF0dGVybi5jaGFyYWN0ZXJz
MTYoKSwgcGF0dGVybi5sZW5ndGgoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC00NzgsMTEgKzQ3OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvCiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZh
bHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBSZWdFeHBD
b25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhw
Q29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhwLCBzdHJpbmcsIHMsIDApOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0ID8ganNOdW1iZXIocmVzdWx0LnN0YXJ0KSA6
IGpzTnVtYmVyKC0xKSk7CisgICAgcmV0dXJuIHJlc3VsdCA/IGpzTnVtYmVyKHJlc3VsdC5zdGFy
dCkgOiBqc051bWJlcigtMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZVN0
cmluZ0luZGV4KFN0cmluZyBzdHIsIHVuc2lnbmVkIHN0clNpemUsIHVuc2lnbmVkIGluZGV4LCBi
b29sIGlzVW5pY29kZSkKQEAgLTU3Myw3ICs1NzMsNyBAQCB2b2lkIGdlbmVyaWNTcGxpdCgKIH0K
IAogLy8gRVMgMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1p
dCkKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNT
cGxpdEZhc3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTg2LDcgKzU4Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBb
aGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAg
SlNTdHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
CiAgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAg
ICAvLyA0LiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgQyBiZSA/IFNwZWNpZXNDb25zdHJ1
Y3RvcihyeCwgJVJlZ0V4cCUpLgpAQCAtNjAwLDcgKzYwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAxMS4gTGV0IEEgYmUgQXJyYXlDcmVhdGUo
MCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJlIDAuCiAgICAgSlNBcnJheSogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CiAKICAgICAvLyAxMy4gSWYgbGlt
aXQgaXMgdW5kZWZpbmVkLCBsZXQgbGltIGJlIDJeMzItMTsgZWxzZSBsZXQgbGltIGJlID8gVG9V
aW50MzIobGltaXQpLgpAQCAtNjE1LDcgKzYxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG8KIAogICAgIC8vIDE2LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCiAg
ICAgaWYgKCFsaW1pdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLy8gMTcuIElmIHNpemUgPT0gMCwgdGhlbgog
ICAgIGlmIChpbnB1dC5pc0VtcHR5KCkpIHsKQEAgLTYyNSw5ICs2MjUsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIC8vIGQuIFJldHVybiBBLgog
ICAgICAgICBpZiAoIXJlZ2V4cC0+bWF0Y2godm0sIGlucHV0LCAwKSkgewogICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBpbnB1dFN0cmluZyk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIC8vIDE4LiBMZXQgcSA9IHAuCkBAIC02NTIsMTAgKzY1MiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEFib3J0U3BsaXQ7CiAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTcGxpdDsKICAgICAg
ICAgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChyZXN1bHRM
ZW5ndGggPj0gbGltaXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZiAocmVzdWx0TGVuZ3RoIDwgbWF4U2l6ZUZv
ckRpcmVjdFBhdGgpIHsKICAgICAgICAgLy8gMjAuIExldCBUIGJlIGEgU3RyaW5nIHZhbHVlIGVx
dWFsIHRvIHRoZSBzdWJzdHJpbmcgb2YgUyBjb25zaXN0aW5nIG9mIHRoZSBlbGVtZW50cyBhdCBp
bmRpY2VzIHAgKGluY2x1c2l2ZSkgdGhyb3VnaCBzaXplIChleGNsdXNpdmUpLgogICAgICAgICAv
LyAyMS4gUGVyZm9ybSAhIENyZWF0ZURhdGFQcm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEp
LCBUKS4KQEAgLTY2Myw3ICs2NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVu
Z3RoLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3Ry
aW5nLCBwb3NpdGlvbiwgaW5wdXRTaXplIC0gcG9zaXRpb24pKTsKICAgICAgICAgCiAgICAgICAg
IC8vIDIyLiBSZXR1cm4gQS4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICAvLyBOb3cgZG8gYSBk
cnkgcnVuIHRvIHNlZSBob3cgYmlnIHRoaW5ncyBnZXQuIEdpdmUgdXAgaWYgdGhleSBnZXQgYWJz
dXJkLgpAQCAtNjg2LDcgKzY4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICAKICAgICBpZiAocmVzdWx0TGVuZ3RoICsgZHJ5UnVuQ291bnQgPj0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgLy8gT0ssIHdlIGtub3cgdGhhdCBpZiB3ZSBm
aW5pc2ggdGhlIHNwbGl0LCB3ZSB3b24ndCBoYXZlIHRvIE9PTS4KQEAgLTcwNSwxNyArNzA1LDE3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgICAg
ICAgICByZXR1cm4gQWJvcnRTcGxpdDsKICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNwbGl0
OwogICAgICAgICB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYg
KHJlc3VsdExlbmd0aCA+PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIC8vIDIwLiBMZXQgVCBi
ZSBhIFN0cmluZyB2YWx1ZSBlcXVhbCB0byB0aGUgc3Vic3RyaW5nIG9mIFMgY29uc2lzdGluZyBv
ZiB0aGUgZWxlbWVudHMgYXQgaW5kaWNlcyBwIChpbmNsdXNpdmUpIHRocm91Z2ggc2l6ZSAoZXhj
bHVzaXZlKS4KICAgICAvLyAyMS4gUGVyZm9ybSAhIENyZWF0ZURhdGFQcm9wZXJ0eShBLCAhIFRv
U3RyaW5nKGxlbmd0aEEpLCBUKS4KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcmVzdWx0LT5w
dXREaXJlY3RJbmRleChleGVjLCByZXN1bHRMZW5ndGgsIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vi
c3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJpbmcsIHBvc2l0aW9uLCBpbnB1dFNpemUgLSBw
b3NpdGlvbikpOwogICAgIC8vIDIyLiBSZXR1cm4gQS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtNTcsOSArNTcsOSBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxSZWdFeHA+IG1fZW1w
dHlSZWdFeHA7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY01hdGNoRmFzdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0RmFzdChFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTcGxpdEZh
c3QoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVGVz
dEZhc3QoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDM0ICs0NywzNCBAQCB2b2lkIFNldENv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nl
c3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3BlY2llc1N5bWJvbCwgc3BlY2llc1N5bWJvbCwg
QWNjZXNzb3IgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFNldChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxTZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVk
QXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIlNldCIpKTsKKyAgICByZXR1cm4gdGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29w
ZSwgIlNldCIpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RTZXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RTZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJn
ZXQoKSwgZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCB2bSwgc2V0
U3RydWN0dXJlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTVmFsdWUg
aXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQpOworICAgICAg
ICByZXR1cm4gc2V0OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+YWRkKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFk
ZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVu
Y3Rpb25DYWxsRGF0YSk7CiAgICAgaWYgKFVOTElLRUxZKGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9
PSBDYWxsVHlwZTo6Tm9uZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBmb3JFYWNoSW5JdGVyYWJs
ZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5leHRW
YWx1ZSkgewpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgICAgIGNhbGwoZXhlYywgYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlv
bkNhbGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEsIHNldCwgYXJndW1lbnRzKTsKICAgICB9
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0KTsKKyAgICByZXR1cm4gc2V0Owog
fQogCiBDb25zdHJ1Y3RUeXBlIFNldENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRv
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gU2V0SXRlcmF0b3JQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlNldCBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoU2V0SXRlcmF0b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05l
eHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKQEAgLTQ2LDcgKzQ2
LDcgQEAgdm9pZCBTZXRJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5
bWJvbCwganNTdHJpbmcoJnZtLCAiU2V0IEl0ZXJhdG9yIiksIERvbnRFbnVtIHwgUmVhZE9ubHkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBl
RnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0
SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBW
TSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtNTQsMTQgKzU0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgU2V0SXRlcmF0b3IKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBKU1NldEl0ZXJhdG9yKiBp
dGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOwogICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3Qg
Y2FsbCBTZXRJdGVyYXRvci5uZXh0KCkgb24gYSBub24tU2V0SXRlcmF0b3Igb2JqZWN0IikpKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiQ2Fubm90IGNhbGwgU2V0SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLVNldEl0ZXJhdG9y
IG9iamVjdCIpKTsKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkp
IHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkp
OworICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBy
ZXN1bHQsIGZhbHNlKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1Vu
ZGVmaW5lZCgpLCB0cnVlKSk7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywxNSArNDcsMTUgQEAgY29uc3QgQ2xhc3NJbmZv
IFNldFByb3RvdHlwZTo6c19pbmZvID0gewogQGVuZAogKi8KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRkKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNIYXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzZXRQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0hhcyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jVmFsdWVzKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVz
KEV4ZWNTdGF0ZSopOwogCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNl
dFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7CiAKIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CkBAIC05
Myw3OSArOTMsNzkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChDYWxsRgog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNl
dFByb3RvRnVuY0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTU2V0KiBzZXQgPSBnZXRT
ZXQoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAgIGlmICghc2V0KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBzZXQtPmFkZChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gdGhpc1Zh
bHVlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFy
KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVu
Y0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXNldCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgc2V0LT5jbGVhcihjYWxsRnJhbWUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENh
bGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0Rl
bGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzZXQpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oc2V0LT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4g
anNCb29sZWFuKHNldC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc2V0KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHNldC0+aGFzKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzQm9vbGVh
bihzZXQtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1NpemUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoc2V0LT5zaXplKGNhbGxGcmFtZSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHNldC0+c2l6ZShjYWxsRnJhbWUpKTsKIH0KICAgICAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jVmFsdWVzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTZXQqIHRo
aXNPYmogPSBqc0R5bmFtaWNDYXN0PEpTU2V0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIFNl
dCB2YWx1ZSBpdGVyYXRvciBmb3IgYSBub24tU2V0IG9iamVjdC4iKSkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJ
dGVyYXRlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIFNldCB2YWx1ZSBpdGVyYXRvciBm
b3IgYSBub24tU2V0IG9iamVjdC4iKSk7CisgICAgcmV0dXJuIEpTU2V0SXRlcmF0b3I6OmNyZWF0
ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JT
dHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZVZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0VudHJpZXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU2V0KiB0aGlzT2JqID0ganNEeW5h
bWljQ2FzdDxKU1NldCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghdGhpc09i
aikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBTZXQgZW50cnkgaXRlcmF0
b3IgZm9yIGEgbm9uLVNldCBvYmplY3QuIikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleVZhbHVl
KSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBTZXQgZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLVNl
dCBvYmplY3QuIikpOworICAgIHJldHVybiBKU1NldEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxG
cmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCks
IHRoaXNPYmosIEl0ZXJhdGVLZXlWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSkpOwogICAgIEpTU2V0KiBzZXQgPSBqc0Nhc3Q8SlNTZXQqPihleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1NldEl0ZXJhdG9yOjpjcmVh
dGUoZXhlYy0+dm0oKSwgZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJh
dG9yU3RydWN0dXJlKCksIHNldCwgSXRlcmF0ZUtleSkpOworICAgIHJldHVybiBKU1NldEl0ZXJh
dG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCkt
PnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHNldCwgSXRlcmF0ZUtleSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldEl0ZXJh
dG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9
IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwpAQCAtMTczLDkgKzE3
Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBpZiAo
aXRlcmF0b3ItPm5leHQoZXhlYywgcmVzdWx0KSkgewogICAgICAgICBKU0FycmF5KiByZXN1bHRB
cnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
ICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVzdWx0KTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuaAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4
dChFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsOCArMzEsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ29kZVBvaW50KEV4ZWNTdGF0ZSopOwogCiB9
CiAKQEAgLTc2LDExICs3NiwxMSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUgc3RyaW5n
RnJvbUNoCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhl
Y1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hh
ckNvZGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChMSUtFTFkoZXhlYy0+YXJndW1lbnRD
b3VudCgpID09IDEpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4
ZWMpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdGcm9tQ2hhckNvZGVTbG93
Q2FzZShleGVjKSk7CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVj
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMihleGVjKSk7CisgICAgcmV0dXJu
IHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKGV4ZWMpOwogfQogCiBKU0NlbGwqIEpTQ19IT1NU
X0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmcpCkBA
IC04OCw3ICs4OCw3IEBAIEpTQ2VsbCogSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUK
ICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgYXJnKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21Db2Rl
UG9pbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTksNyArOTksNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgZG91YmxlIGNvZGVQb2ludEFz
RG91YmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIHVpbnQzMl90IGNv
ZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CiAKQEAg
LTExNSwyMyArMTE1LDIzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmkKICAgICB9CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFN0cmlu
Z0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxP
YmplY3QoKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5u
ZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOwogICAgIEpTU3RyaW5nKiBzdHIgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHN0cikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUs
IHN0cik7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTE0NywxMSAr
MTQ3LDExIEBAIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGUKICAgICBy
ZXR1cm4gYXJndW1lbnQudG9TdHJpbmcoZXhlYyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKSkpOworICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKKyAgICByZXR1
cm4gc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwog
fQogCiBDYWxsVHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2Fs
bERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwOCwgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDE1IEpvcmRhbiBIYXJiYW5kIChsamhhcmJAZ21haWwuY29tKQogICoKQEAgLTU4LDQ0
ICs1OCw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKFN0cmluZ1Byb3RvdHlwZSk7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29kZVBv
aW50QXQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Rv
TG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3Mo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1N0cmlrZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJp
bShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jVHJpbUxlZnQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RhcnRzV2l0aChFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNO
b3JtYWxpemUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvZGVQb2ludEF0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNl
VXNpbmdTdHJpbmdTZWFyY2goRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxl
VXBwZXJDYXNlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0JpZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNTbWFsbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNCbGluayhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNCb2xkKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0ZpeGVkKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0l0YWxpY3MoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jU3RyaWtlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1YihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNTdXAoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
Rm9udGNvbG9yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW0oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTm9ybWFsaXplKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSopOwogCiB9CiAK
QEAgLTQ0MSwxMCArNDQxLDEwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxp
Y2VTdWIKICNkZWZpbmUgT1VUX09GX01FTU9SWShleGVjX18sIHNjb3BlX18pIFwKICAgICBkbyB7
IFwKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWNfXywgc2NvcGVfXyk7IFwKLSAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7IFwKKyAgICAgICAgcmV0dXJuIHsgfTsgXAog
ICAgIH0gd2hpbGUgKGZhbHNlKQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2UsIFJlZ0V4cCogcmVnRXhwKQorc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2UsIFJl
Z0V4cCogcmVnRXhwKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CkBAIC00
NzcsMTcgKzQ3NywxNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZW1v
CiAgICAgfQogCiAgICAgaWYgKCFsYXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obGFzdEluZGV4KSA8IHNvdXJjZUxlbikgewogICAgICAgICBpZiAoVU5M
SUtFTFkoIXNvdXJjZVJhbmdlcy50cnlDb25zdHJ1Y3RBbmRBcHBlbmQobGFzdEluZGV4LCBzb3Vy
Y2VMZW4gLSBsYXN0SW5kZXgpKSkKICAgICAgICAgICAgIE9VVF9PRl9NRU1PUlkoZXhlYywgc2Nv
cGUpOwogICAgIH0KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1NwbGljZVN1YnN0cmluZ3MoZXhlYywgc3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdl
cy5kYXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCkpKTsKKyAgICByZXR1cm4ganNTcGxpY2VTdWJz
dHJpbmdzKGV4ZWMsIHN0cmluZywgc291cmNlLCBzb3VyY2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VS
YW5nZXMuc2l6ZSgpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBy
ZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCiAgICAgVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBzdHJpbmcsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIENhbGxEYXRhJiBjYWxsRGF0YSwK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSwgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgSlNWYWx1
ZSByZXBsYWNlVmFsdWUpCiB7CkBAIC00OTUsNyArNDk1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogCiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UgPSBzdHJp
bmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgo
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFJlZ0V4cE9iamVjdCogcmVn
RXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVn
RXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKICAgICBib29sIGdsb2JhbCA9IHJlZ0V4cC0+
Z2xvYmFsKCk7CkBAIC01MDMsNyArNTAzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVwbAogICAgIGlmIChnbG9iYWwpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40
LjEwIHN0ZXAgOC5hLgogICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVjLCAw
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lICYmICFyZXBsYWNlbWVudFN0cmluZy5sZW5ndGgo
KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwpAQCAtNTI3LDcgKzUyNyw3IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgaW50IGFyZ0Nv
dW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSArIDI7CiAgICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHJlcGxhY2VWYWx1ZSk7CiAgICAgICAgIENh
Y2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7
CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGludCogb3ZlY3Rv
cjsKQEAgLTU1NSw3ICs1NTUsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZXBsCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsK
ICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvV1RGU3RyaW5n
KGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAg
ICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNTk0LDcgKzU5NCw3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9XVEZTdHJpbmcoZXhlYykpOwotICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgICAg
ICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwogICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsYXN0SW5kZXg7CkBAIC02MzQsMTEgKzYzNCwxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyaW5n
KTsKIAogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICAgICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50LnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXBsYWNl
bWVudFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IHJl
cGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAo
bGFzdEluZGV4IDwgcmVzdWx0LnN0YXJ0IHx8IHJlcGxMZW4pIHsKQEAgLTY2NSwxNCArNjY1LDE0
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICB9CiAKICAg
ICBpZiAoIWxhc3RJbmRleCAmJiByZXBsYWNlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZyk7CisgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pIHsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5nZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxh
c3RJbmRleCwgc291cmNlTGVuIC0gbGFzdEluZGV4KSkpCiAgICAgICAgICAgICBPVVRfT0ZfTUVN
T1JZKGV4ZWMsIHNjb3BlKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoZXhlYywg
c3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5kYXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCks
IHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2VtZW50cy5zaXplKCkpKTsKKyAgICByZXR1cm4g
anNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoZXhlYywgc3RyaW5nLCBzb3VyY2UsIHNv
dXJjZVJhbmdlcy5kYXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRh
KCksIHJlcGxhY2VtZW50cy5zaXplKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBFbXB0eVN0cigKQEAgLTY4
OCwxNCArNjg4LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3QK
ICAgICAgICAgc2VhcmNoVmFsdWUtPnNldExhc3RJbmRleChleGVjLCAwKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZtLCBl
eGVjLCB0aGlzVmFsdWUsIHRoaXNWYWx1ZS0+dmFsdWUoZXhlYyksIHJlZ0V4cCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2godm0sIGV4ZWMs
IHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVjKSwgcmVnRXhwKSk7CiAgICAgfQogCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nID0gZW1w
dHlTdHJpbmcoKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlcGxhY2VVc2lu
Z1JlZ0V4cFNlYXJjaCgKLSAgICAgICAgdm0sIGV4ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUs
IGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVwbGFjZW1lbnRTdHJpbmcsIEpTVmFsdWUoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCisg
ICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUsIHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5
cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVlKCkpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhw
U3RyaW5nKApAQCAtNzA2LDExICs3MDYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TdAogICAgIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIFN0cmluZyBy
ZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIHJldHVy
biByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCi0gICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUs
IHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5n
LCByZXBsYWNlU3RyaW5nKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlcGxhY2VVc2lu
Z1JlZ0V4cFNlYXJjaCgKKyAgICAgICAgdm0sIGV4ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUs
IGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VTdHJp
bmcpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVVz
aW5nUmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5n
LCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNW
YWx1ZSByZXBsCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFs
dWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7
Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAogICAgIHNj
b3BlLnJlbGVhc2UoKTsKQEAgLTcyNywxOCArNzI3LDE4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFs
dWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1ZSk7
CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0
cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyoganNTdHJpbmcsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUg
cmVwbGFjZVZhbHVlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nID0ganNTdHJpbmctPnZhbHVlKGV4ZWMpOwog
ICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQg
PSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwogCiAgICAgaWYgKG1hdGNoU3RhcnQgPT0gbm90
Rm91bmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcpOworICAgICAg
ICByZXR1cm4ganNTdHJpbmc7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlcGxhY2VWYWx1ZSwgY2FsbERhdGEpOwpAQCAtNzQ4
LDExICs3NDgsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAog
ICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChleGVjLCByZXBs
YWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAogICAgIFN0cmluZyBy
ZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3Ry
aW5nLmltcGwoKTsKICAgICBTdHJpbmcgbGVmdFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3Ry
aW5nU2hhcmluZ0ltcGwoKnN0cmluZ0ltcGwsIDAsIG1hdGNoU3RhcnQpKTsKQEAgLTc2NCw3ICs3
NjQsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgc2l6
ZV90IGxlZnRMZW5ndGggPSBzdHJpbmdJbXBsLT5sZW5ndGgoKSAtIG1hdGNoRW5kOwogICAgIFN0
cmluZyByaWdodFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnN0
cmluZ0ltcGwsIG1hdGNoRW5kLCBsZWZ0TGVuZ3RoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1N0cmluZyhleGVjLCBsZWZ0UGFydCwg
bWlkZGxlUGFydCwgcmlnaHRQYXJ0KSk7CisgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoZXhlYywg
bGVmdFBhcnQsIG1pZGRsZVBhcnQsIHJpZ2h0UGFydCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBjaGVja09iamVjdENvZXJjaWJsZShKU1ZhbHVlIHRoaXNWYWx1ZSkKQEAgLTgwMCw3ICs4MDAs
NyBAQCBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiByZXBlYXRDaGFyYWN0ZXIoCiAgICAgcmV0dXJu
IGpzU3RyaW5nKCZleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBlYXRDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGVhdENoYXJhY3RlcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGludDMyX3QgcmVwZWF0Q291
bnQ7CiAgICAgZG91YmxlIHZhbHVlID0gcmVwZWF0Q291bnRWYWx1ZS5hc051bWJlcigpOwogICAg
IGlmICh2YWx1ZSA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIHJlcGVhdENvdW50
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpOwogICAgIEFTU0VSVChyZXBlYXRDb3VudCA+
PSAwKTsKICAgICBBU1NFUlQoIXJlcGVhdENvdW50VmFsdWUuaXNEb3VibGUoKSB8fCByZXBlYXRD
b3VudFZhbHVlLmFzRG91YmxlKCkgPT0gcmVwZWF0Q291bnQpOwpAQCAtODI5LDExICs4MjksMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIFVDaGFyIGNo
YXJhY3RlciA9IHZpZXdbMF07CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGlmICghKGNoYXJh
Y3RlciAmIH4weGZmKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXBlYXRDaGFy
YWN0ZXIoKmV4ZWMsIHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXIpLCByZXBlYXRDb3VudCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVwZWF0Q2hhcmFjdGVyKCpleGVjLCBjaGFy
YWN0ZXIsIHJlcGVhdENvdW50KSk7CisgICAgICAgIHJldHVybiByZXBlYXRDaGFyYWN0ZXIoKmV4
ZWMsIHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0ZXIpLCByZXBlYXRDb3VudCk7CisgICAgcmV0
dXJuIHJlcGVhdENoYXJhY3RlcigqZXhlYywgY2hhcmFjdGVyLCByZXBlYXRDb3VudCk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZSgKK0FMV0FZU19JTkxJTkUgSlNW
YWx1ZSByZXBsYWNlKAogICAgIFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3Ry
aW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBp
ZiAoc2VhcmNoVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkpKQpAQCAtODQxLDcg
Kzg0MSw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZSgKICAgICByZXR1
cm4gcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVl
LCByZXBsYWNlVmFsdWUpOwogfQogCi1BTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxh
Y2UoCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgcmVwbGFjZSgKICAgICBWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUg
cmVwbGFjZVZhbHVlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTg0OSwzNCArODQ5LDM0IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVw
bGFjZSgKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBKU1N0cmluZyogc3Ry
aW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiByZXBsYWNlKHZtLCBleGVj
LCBzdHJpbmcsIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVz
aW5nUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmICghc2VhcmNoVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0Ojpp
bmZvKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKHZtLCBleGVjLCBzdHJpbmcsIHNlYXJj
aFZhbHVlLCBleGVjLT5hcmd1bWVudCgxKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdT
dHJpbmdTZWFyY2goRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJp
bmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJu
IHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCh2bSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVu
dCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAtODg5LDEyICs4ODksMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAotICAg
IHJldHVybiByZXBsYWNlKAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVwbGFjZSgKICAg
ICAgICAgdm0sIGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLCBKU1ZhbHVlOjpkZWNv
ZGUoc2VhcmNoVmFsdWUpLAotICAgICAgICBKU1ZhbHVlOjpkZWNvZGUocmVwbGFjZVZhbHVlKSk7
CisgICAgICAgIEpTVmFsdWU6OmRlY29kZShyZXBsYWNlVmFsdWUpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkwMywxNSArOTAzLDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyBBbHNvIHVzZWQgZm9yIHZh
bHVlT2YuCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKIAog
ICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoU3RyaW5nT2JqZWN0OjppbmZvKCkpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5nT2JqZWN0KHRoaXNWYWx1ZSktPmludGVy
bmFsVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBhc1N0cmluZ09iamVjdCh0aGlzVmFsdWUpLT5p
bnRlcm5hbFZhbHVlKCk7CiAKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hh
ckF0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNDaGFyQXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTIwLDIzICs5MjAs
MjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBTdHJpbmdWaWV3IHZpZXcgPSB2aWV3V2l0
aFN0cmluZy52aWV3OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNWYWx1
ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigpKSB7CiAgICAg
ICAgIHVpbnQzMl90IGkgPSBhMC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoaSA8IHZpZXcubGVu
Z3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZyhleGVjLCB2aWV3W2ldKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYyk7CiAgICAgfQogICAgIGRvdWJsZSBkcG9zID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAg
IGlmIChkcG9zID49IDAgJiYgZHBvcyA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZHBvcyldKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Vt
cHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGV4ZWMsIHZpZXdbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRwb3MpXSk7CisgICAgcmV0dXJuIGpz
RW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC05NDUsMTkgKzk0NSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgYXV0byB2
aWV3V2l0aFN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5
aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFN0
cmluZ1ZpZXcgdmlldyA9IHZpZXdXaXRoU3RyaW5nLnZpZXc7CiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5pc1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQz
Ml90IGkgPSBhMC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoaSA8IHZpZXcubGVuZ3RoKCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZpZXdbaV0pKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICAgICAgICAgIHJldHVy
biBqc051bWJlcih2aWV3W2ldKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CiAgICAgfQogICAg
IGRvdWJsZSBkcG9zID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmIChkcG9zID49IDAgJiYg
ZHBvcyA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIodmlld1tzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpXSkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOYU4oKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcih2aWV3W3N0YXRpY19j
YXN0PGludD4oZHBvcyldKTsKKyAgICByZXR1cm4ganNOYU4oKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBVQ2hhcjMyIGNvZGVQb2ludEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBwb3Np
dGlvbiwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyBpbmxpbmUg
VUNoYXIzMiBjb2RlUG9pbnRBdChjb25zdCAKICAgICByZXR1cm4gY2hhcmFjdGVyOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvZGVQb2ludEF0KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb2Rl
UG9pbnRBdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05ODAsMjcgKzk4MCwy
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmcg
PSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKICAgICBKU1Zh
bHVlIGFyZ3VtZW50MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhcmd1bWVudDAuaXNV
SW50MzIoKSkgewogICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IGFyZ3VtZW50MC5hc1VJbnQz
MigpOwogICAgICAgICBpZiAocG9zaXRpb24gPCBsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGNvZGVQb2ludEF0KHN0cmluZywgcG9zaXRpb24sIGxl
bmd0aCkpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihjb2RlUG9pbnRBdChzdHJpbmcsIHBvc2l0aW9u
LCBsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGRvdWJsZSBkb3VibGVQb3NpdGlvbiA9
IGFyZ3VtZW50MC50b0ludGVnZXIoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBpZiAoZG91YmxlUG9zaXRpb24gPj0gMCAmJiBkb3VibGVQb3NpdGlvbiA8IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjb2RlUG9pbnRBdChz
dHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkb3VibGVQb3NpdGlvbiksIGxlbmd0aCkpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1
cm4ganNOdW1iZXIoY29kZVBvaW50QXQoc3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91
YmxlUG9zaXRpb24pLCBsZW5ndGgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDA4LDE4ICsxMDA4LDE4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAm
JiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICBKU1N0cmluZyogc3RyID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1Zh
bHVlKSwgc3RyKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlz
VmFsdWUpLCBzdHIpOwogICAgIH0KIAogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
RnJvbUFyZ3VtZW50cyhleGVjLCB0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNTdHJpbmdGcm9t
QXJndW1lbnRzKGV4ZWMsIHRoaXNWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xMDMyLDkgKzEwMzIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAg
ICAgSlNTdHJpbmcqIHRoaXNKU1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTU3RyaW5nKiBvdGhlckpTU3RyaW5n
ID0gYTAudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIHVuc2lnbmVkIHBvcyA9IDA7CiAgICAgaWYgKCFhMS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0x
MDUzLDE5ICsxMDUzLDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICB9CiAKICAgICBpZiAodGhpc0pTU3RyaW5nLT5sZW5ndGgoKSA8IG90aGVySlNTdHJp
bmctPmxlbmd0aCgpICsgcG9zKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CiAKICAgICBhdXRvIHRoaXNW
aWV3V2l0aFN0cmluZyA9IHRoaXNKU1N0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGF1dG8gb3RoZXJWaWV3
V2l0aFN0cmluZyA9IG90aGVySlNTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzaXplX3QgcmVzdWx0ID0g
dGhpc1ZpZXdXaXRoU3RyaW5nLnZpZXcuZmluZChvdGhlclZpZXdXaXRoU3RyaW5nLnZpZXcsIHBv
cyk7CiAgICAgaWYgKHJlc3VsdCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcigtMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTEwNzgsMTAgKzEwNzgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAg
IEpTU3RyaW5nKiB0aGlzSlNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB1bnNpZ25lZCBsZW4gPSB0aGlzSlNTdHJp
bmctPmxlbmd0aCgpOwogICAgIEpTU3RyaW5nKiBvdGhlckpTU3RyaW5nID0gYTAudG9TdHJpbmco
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGRvdWJsZSBkcG9z
ID0gYTEudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CiAgICAgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbjsKQEAgLTEwOTMsNyArMTA5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihkcG9zKTsKIAogICAgIGlmIChsZW4gPCBvdGhlckpTU3RyaW5nLT5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOworICAgICAgICByZXR1cm4g
anNOdW1iZXIoLTEpOwogCiAgICAgU3RyaW5nIHRoaXNTdHJpbmcgPSB0aGlzSlNTdHJpbmctPnZh
bHVlKGV4ZWMpOwogICAgIFN0cmluZyBvdGhlclN0cmluZyA9IG90aGVySlNTdHJpbmctPnZhbHVl
KGV4ZWMpOwpAQCAtMTEwMywxMSArMTEwMywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSB0aGlzU3RyaW5nLnJl
dmVyc2VGaW5kKG90aGVyU3RyaW5nLCBzdGFydFBvc2l0aW9uKTsKICAgICBpZiAocmVzdWx0ID09
IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKC0xKTsKKyAgICByZXR1cm4ganNOdW1iZXIocmVzdWx0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTExNiw3ICsxMTE2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpbnQgbGVuID0gcy5sZW5ndGgo
KTsKICAgICBSRUxFQVNFX0FTU0VSVChsZW4gPj0gMCk7CkBAIC0xMTM0LDEwICsxMTM0LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICAgIGZy
b20gPSAwOwogICAgICAgICBpZiAodG8gPiBsZW4pCiAgICAgICAgICAgICB0byA9IGxlbjsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZnJvbSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgLSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZnJvbSkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMs
IHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
KSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4ganNFbXB0eVN0
cmluZyhleGVjKTsKIH0KIAogLy8gUmV0dXJuIHRydWUgaW4gY2FzZSBvZiBlYXJseSByZXR1cm4g
KHJlc3VsdExlbmd0aCBnb3QgdG8gbGltaXRMZW5ndGgpLgpAQCAtMTE3NCw3ICsxMTc0LDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBzcGxpdFN0cmluZ0J5TwogfQogCiAvLyBFUyAyMS4x
LjMuMTcgU3RyaW5nLnByb3RvdHlwZS5zcGxpdChzZXBhcmF0b3IsIGxpbWl0KQotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMTg0LDEzICsxMTg0LDEzIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAzLiBMZXQgUyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBh
cyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051
bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5
IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhl
IHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDUuIExldCBsZW5ndGhBIGJlIDAuCiAgICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKQEAgLTEyMDYsMTEgKzEyMDYsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIC8vICAgIG90aGVyd2lzZSBsZXQg
UiA9IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNWYWx1ZSBzZXBhcmF0b3JWYWx1ZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIFN0cmluZyBzZXBhcmF0b3IgPSBzZXBhcmF0
b3JWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgLy8gMTAuIElmIGxpbSA9PSAwLCByZXR1cm4gQS4KICAgICBpZiAoIWxpbWl0KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKICAgICAvLyAxMS4gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgdGhlbgogICAg
IGlmIChzZXBhcmF0b3JWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMjE4LDcgKzEyMTgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBqc1N0
cmluZ1dpdGhSZXVzZShleGVjLCB0aGlzVmFsdWUsIGlucHV0KSk7CiAgICAgICAgIC8vIGIuIFJl
dHVybiBBLgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLy8gMTIuIElmIHMgPT0gMCwgdGhlbgpAQCAt
MTIzMSw3ICsxMjMxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3RJbmRleChleGVjLCAwLCBqc1N0cmluZ1dpdGhSZXVzZShleGVjLCB0aGlzVmFsdWUsIGlu
cHV0KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIE9wdGltaXplZCBjYXNl
IGZvciBzcGxpdHRpbmcgb24gdGhlIGVtcHR5IHN0cmluZy4KQEAgLTEyNDIsMTAgKzEyNDIsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcG9zaXRpb24sIGpz
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGlucHV0W3Bvc2l0aW9uXSkpOwotICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9IHdoaWxlICgr
K3Bvc2l0aW9uIDwgbGltaXQpOwogCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvLyAzIGNhc2VzOgpA
QCAtMTI2NiwxNSArMTI2NiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgICAgIGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkgewogICAgICAgICAgICAg
aWYgKHNwbGl0U3RyaW5nQnlPbmVDaGFyYWN0ZXJJbXBsPExDaGFyPihleGVjLCByZXN1bHQsIHRo
aXNWYWx1ZSwgaW5wdXQsIHN0cmluZ0ltcGwsIHNlcGFyYXRvckNoYXJhY3RlciwgcG9zaXRpb24s
IHJlc3VsdExlbmd0aCwgbGltaXQpKSB7CiAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKHNwbGl0U3RyaW5nQnlPbmVDaGFyYWN0ZXJJbXBsPFVDaGFyPihl
eGVjLCByZXN1bHQsIHRoaXNWYWx1ZSwgaW5wdXQsIHN0cmluZ0ltcGwsIHNlcGFyYXRvckNoYXJh
Y3RlciwgcG9zaXRpb24sIHJlc3VsdExlbmd0aCwgbGltaXQpKSB7CiAgICAgICAgICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIDEzLiBMZXQgcSA9IHAuCiAgICAgICAgIHNpemVfdCBtYXRjaFBv
c2l0aW9uOwpAQCAtMTI4NywxMSArMTI4NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAgICAvLyAgICB0aHJvdWdoIHEgKGV4Y2x1c2l2ZSku
CiAgICAgICAgICAgICAvLyAyLiBDYWxsIENyZWF0ZURhdGFQcm9wZXJ0eShBLCBUb1N0cmluZyhs
ZW5ndGhBKSwgVCkuCiAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJl
c3VsdExlbmd0aCwganNTdWJzdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24s
IG1hdGNoUG9zaXRpb24gLSBwb3NpdGlvbikpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgLy8gMy4gSW5jcmVtZW50IGxlbmd0aEEg
YnkgMS4KICAgICAgICAgICAgIC8vIDQuIElmIGxlbmd0aEEgPT0gbGltLCByZXR1cm4gQS4KICAg
ICAgICAgICAgIGlmICgrK3Jlc3VsdExlbmd0aCA9PSBsaW1pdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAogICAgICAgICAgICAgLy8gNS4gTGV0IHAgPSBlLgogICAgICAgICAgICAgLy8gNi4g
TGV0IHEgPSBwLgpAQCAtMTMwNiwxMCArMTMwNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1
bHRMZW5ndGgrKywganNTdWJzdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24s
IGlucHV0Lmxlbmd0aCgpIC0gcG9zaXRpb24pKTsKIAogICAgIC8vIDE3LiBSZXR1cm4gQS4KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpz
U3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1Zh
bHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKICAgICB9CiAKQEAgLTEzMzUs
NyArMTMzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICBkb3VibGUgc3RhcnQgPSBhMC50b0ludGVnZXIoZXhlYyk7CiAgICAgZG91YmxlIGxlbmd0aCA9
IGExLmlzVW5kZWZpbmVkKCkgPyBsZW4gOiBhMS50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKHN0
YXJ0ID49IGxlbiB8fCBsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhl
Yyk7CiAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICBzdGFydCArPSBsZW47CiAgICAgICAg
IGlmIChzdGFydCA8IDApCkBAIC0xMzQ2LDExICsxMzQ2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICB1bnNpZ25lZCBzdWJzdHJpbmdTdGFydCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCk7CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nTGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCk7CiAgICAgaWYgKGpzU3RyaW5nKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5nLCBz
dWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N1YnN0cmluZyhleGVjLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5n
TGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBqc1N0cmluZywgc3Vi
c3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCk7CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4
ZWMsIHVTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ1N1YnN0cklu
dGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBAc3Vic3RySW50ZXJuYWwgc2hvdWxk
IG5vdCBoYXZlIGFueSBvYnNlcnZhYmxlIHNpZGUgZWZmZWN0cyAoZS5nLiBpdCBzaG91bGQgbm90
IGNhbGwKICAgICAvLyBHZXRNZXRob2QoLi4uLCBAQHRvUHJpbWl0aXZlKSBvbiB0aGUgdGhpc1Zh
bHVlKS4KQEAgLTEzNjQsNyArMTM2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YnVpbHRpblN0cmkKICAgICByZXR1cm4gc3RyaW5nUHJvdG9GdW5jU3Vic3RyKGV4ZWMpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzNzQsNyArMTM3NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgSlNTdHJpbmcqIGpzU3Ry
aW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1
ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTM4Miw3ICsxMzgyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIFJFTEVBU0VfQVNTRVJUKGxlbiA+
PSAwKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZG91YmxlIGVuZDsKICAgICBpZiAoIShzdGFydCA+
PSAwKSkgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvciBOYU4KICAgICAgICAgc3RhcnQg
PSAwOwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICBlbmQgPSBsZW47CiAgICAgZWxzZSB7IAogICAgICAgICBlbmQg
PSBhMS50b051bWJlcihleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgICAgIGlmICghKGVuZCA+PSAwKSkgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIHZhbHVl
cyBvciBOYU4KICAgICAgICAgICAgIGVuZCA9IDA7CiAgICAgICAgIGVsc2UgaWYgKGVuZCA+IGxl
bikKQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIH0KICAgICB1bnNpZ25lZCBzdWJzdHJpbmdTdGFydCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydCk7CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nTGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgLSBzdWJzdHJpbmdTdGFydDsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwg
c3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5n
LCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQxNywxNiArMTQxNywxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBz
VmFsLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcgbG93ZXJjYXNlZFN0cmluZyA9IHMuY29udmVy
dFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOwogICAgIGlmIChsb3dlcmNhc2VkU3RyaW5nLmlt
cGwoKSA9PSBzLmltcGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsK
KyAgICAgICAgcmV0dXJuIHNWYWw7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpOworICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBsb3dlcmNhc2VkU3RyaW5nKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQzNSwxNiArMTQzNSwxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBjb25zdCBTdHJpbmcmIHMg
PSBzVmFsLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcgdXBwZXJjYXNlZFN0cmluZyA9IHMuY29u
dmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpOwogICAgIGlmICh1cHBlcmNhc2VkU3RyaW5n
LmltcGwoKSA9PSBzLmltcGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFs
KTsKKyAgICAgICAgcmV0dXJuIHNWYWw7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgdXBwZXJjYXNlZFN0cmluZykpOworICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCB1cHBlcmNhc2VkU3RyaW5nKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21w
YXJlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0NTMsMTYgKzE0NTMsMTYg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5n
KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEw
ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHN0ciA9IGEwLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRlKHMs
IHN0cikpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVy
biBqc051bWJlcihDb2xsYXRvcigpLmNvbGxhdGUocywgc3RyKSk7CiB9CiAKICNpZiBFTkFCTEUo
SU5UTCkKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1N0YXRlKiBzdGF0
ZSwgaW50MzJfdCAoKmNvbnZlcnRDYXNlKShVQ2hhciosIGludDMyX3QsIGNvbnN0IFVDaGFyKiwg
aW50MzJfdCwgY29uc3QgY2hhciosIFVFcnJvckNvZGUqKSkKK3N0YXRpYyBKU1ZhbHVlIHRvTG9j
YWxlQ2FzZShFeGVjU3RhdGUqIHN0YXRlLCBpbnQzMl90ICgqY29udmVydENhc2UpKFVDaGFyKiwg
aW50MzJfdCwgY29uc3QgVUNoYXIqLCBpbnQzMl90LCBjb25zdCBjaGFyKiwgVUVycm9yQ29kZSop
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0NzQsMjEgKzE0NzQsMjEgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjUwogCiAgICAgLy8gMi4gTGV0IFMgYmUgVG9TdHJpbmco
TykuCiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgY29uc3QgU3RyaW5nJiBzID0gc1ZhbC0+
dmFsdWUoc3RhdGUpOwogCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoUykuCi0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIE9wdGltaXphdGlvbiBmb3IgZW1wdHkgc3Ry
aW5ncy4KICAgICBpZiAocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc1ZhbCk7CisgICAgICAgIHJldHVybiBzVmFsOwogCiAgICAgLy8gNC4gTGV0IHJlcXVlc3Rl
ZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8
U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0
ZWRMb2NhbGVzKS4KLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gNi4g
TGV0IGxlbiBiZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCiAg
ICAgc2l6ZV90IGxlbiA9IHJlcXVlc3RlZExvY2FsZXMuc2l6ZSgpOwpAQCAtMTU0NCwxNyArMTU0
NCwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAKICAgICAv
LyAxOC4gUmV0dXJuIEwuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoc3RhdGUsIGxvd2VyKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0
YXRlLCBsb3dlcik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZUxvd2VyQ2FzZShFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIC8vIDEzLjEuMiBTdHJpbmcucHJvdG90eXBlLnRvTG9jYWxlTG93ZXJDYXNlIChb
bG9jYWxlc10pCiAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRp
b25zL3N0YW5kYXJkcy9FY21hLTQwMi5odG0KICAgICByZXR1cm4gdG9Mb2NhbGVDYXNlKHN0YXRl
LCB1X3N0clRvTG93ZXIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBlckNhc2UoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICAvLyAxMy4xLjMgU3RyaW5nLnByb3RvdHlwZS50b0xvY2FsZVVwcGVyQ2Fz
ZSAoW2xvY2FsZXNdKQogICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL3B1Ymxp
Y2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDIuaHRtCkBAIC0xNTYzLDcgKzE1NjMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOVEwpCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmln
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNC
aWcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTU3MiwxMiArMTU3MiwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVj
a09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8YmlnPiIsIHMsICI8L2JpZz4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxiaWc+IiwgcywgIjwvYmlnPiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xNTg2LDEyICsxNTg2LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9z
bWFsbD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFs
bD4iLCBzLCAiPC9zbWFsbD4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMTYwMCwxMiArMTYwMCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxpbms+IikpOworICAg
IHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxp
bms+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
Qm9sZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjE0LDEyICsxNjE0
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAo
IWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0
cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxiPiIsIHMsICI8L2I+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFs
U3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNjI4LDEyICsxNjI4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7
CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90
dD4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2NDIsMTIg
KzE2NDIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
IGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
V1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPGk+IiwgcywgIjwvaT4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTY1NiwxMiArMTY1NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIsIHMs
ICI8L3N0cmlrZT4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE2NzAsMTIgKzE2NzAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOworICAg
IHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4i
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdXAo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1
cChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjg0LDEyICsxNjg0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhl
YywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY5OCwxNyArMTY5OCwxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJs
ZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBTdHJpbmcgY29sb3IgPSBhMC50b1dURlN0cmluZyhleGVjKTsKICAgICBjb2xv
ci5yZXBsYWNlV2l0aExpdGVyYWwoJyInLCAiJnF1b3Q7Iik7CiAKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8Zm9udCBjb2xvcj1cIiIsIGNvbG9yLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CisgICAg
cmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IGNvbG9yPVwiIiwgY29s
b3IsICJcIj4iLCBzLCAiPC9mb250PiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNzE3LDcgKzE3MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3Ry
aW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIApAQCAt
MTcyOSw3ICsxNzI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CiAgICAgICAgIGlm
ICghaW1wbCkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYnVmZmVyWzBd
ID0gJzwnOwogICAgICAgICBidWZmZXJbMV0gPSAnZic7CiAgICAgICAgIGJ1ZmZlclsyXSA9ICdv
JzsKQEAgLTE3NTMsMTcgKzE3NTMsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICBidWZmZXJbMTkgKyBzdHJpbmdTaXplXSA9ICduJzsKICAgICAg
ICAgYnVmZmVyWzIwICsgc3RyaW5nU2l6ZV0gPSAndCc7CiAgICAgICAgIGJ1ZmZlclsyMSArIHN0
cmluZ1NpemVdID0gJz4nOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZv
bnRTaXplID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CiAgICAgZm9udFNpemUucmVwbGFjZVdpdGhM
aXRlcmFsKCciJywgIiZxdW90OyIpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6
ZT1cIiIsIGZvbnRTaXplLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CisgICAgcmV0dXJuIGpzTWFr
ZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIiLCBmb250U2l6ZSwgIlwiPiIs
IHMsICI8L2ZvbnQ+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTc3MiwxNyArMTc3MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgYW5jaG9y
ID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CiAgICAgYW5jaG9yLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
IicsICImcXVvdDsiKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhbmNo
b3IsICJcIj4iLCBzLCAiPC9hPiIpKTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiPGEgbmFtZT1cIiIsIGFuY2hvciwgIlwiPiIsIHMsICI8L2E+Iik7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNzkxLDcgKzE3OTEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBTdHJpbmcgbGlua1RleHQgPSBhMC50b1dURlN0cmluZyhleGVjKTsKQEAg
LTE4MDQsNyArMTgwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBVQ2hhciogYnVmZmVyOwogICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGJ1ZmZlclswXSA9ICc8JzsKICAgICBidWZmZXJbMV0g
PSAnYSc7CiAgICAgYnVmZmVyWzJdID0gJyAnOwpAQCAtMTgyMiw3ICsxODIyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGJ1ZmZlclsxMiArIGxpbmtU
ZXh0U2l6ZSArIHN0cmluZ1NpemVdID0gJy8nOwogICAgIGJ1ZmZlclsxMyArIGxpbmtUZXh0U2l6
ZSArIHN0cmluZ1NpemVdID0gJ2EnOwogICAgIGJ1ZmZlclsxNCArIGxpbmtUZXh0U2l6ZSArIHN0
cmluZ1NpemVdID0gJz4nOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCiBlbnVtIHsKQEAgLTE4NTksMjIgKzE4NTks
MjIgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJpbmcoRXhlY1N0YQogICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBzdHIuc3Vic3RyaW5nU2hhcmluZ0ltcGwobGVmdCwgcmlnaHQgLSBs
ZWZ0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VHJpbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRyaW1TdHJpbmcoZXhl
YywgdGhpc1ZhbHVlLCBUcmltTGVmdCB8IFRyaW1SaWdodCkpOworICAgIHJldHVybiB0cmltU3Ry
aW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQgfCBUcmltUmlnaHQpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVl
LCBUcmltTGVmdCkpOworICAgIHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJp
bUxlZnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodHJp
bVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1SaWdodCkpOworICAgIHJldHVybiB0cmltU3Ry
aW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNp
Z25lZCBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChkb3VibGUgdmFsdWUsIHVuc2lnbmVkIG1p
biwgdW5zaWduZWQgbWF4KQpAQCAtMTg4Niw3ICsxODg2LDcgQEAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBjbGFtcEFuZFRydW5jYXRlVAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1N0YXJ0c1dpdGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTg5NiwxNiArMTg5NiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAg
IFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0s
IGV4ZWMsIGEwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChpc1Jl
Z3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCBjYW5ub3QgYmUg
YSBSZWdFeHAiKTsKIAogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBwb3Np
dGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKQEAg
LTE5MTQsMTMgKzE5MTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJj
aEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVk
KHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNo
U3RyaW5nLCBzdGFydCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4u
aGFzSW5maXhTdGFydGluZ0F0KHNlYXJjaFN0cmluZywgc3RhcnQpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNFbmRzV2l0aChFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTkzMCwxNiArMTkzMCwxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0g
dGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1Jl
Z3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5w
cm90b3R5cGUuZW5kc1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2Vh
cmNoU3RyaW5nID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3Ro
KCk7CiAKQEAgLTE5NDksMTMgKzE5NDksMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgICAgICBlbmQgPSBzdGQ6Om1heCgwLCBlbmRQb3NpdGlvbkFyZy5h
c0ludDMyKCkpOwogICAgIGVsc2UgaWYgKCFlbmRQb3NpdGlvbkFyZy5pc1VuZGVmaW5lZCgpKSB7
CiAgICAgICAgIGVuZCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKGVuZFBvc2l0aW9uQXJn
LnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywgc3RkOjpt
aW4oZW5kLCBsZW5ndGgpKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywgc3RkOjptaW4oZW5kLCBsZW5ndGgpKSk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVz
SW1wbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0
cmluZyBzZWFyY2hTdHJpbmcsIEpTVmFsdWUgcG9zaXRpb25BcmcpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVzSW1wbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0cmluZyBzZWFyY2hTdHJpbmcsIEpTVmFsdWUgcG9z
aXRpb25BcmcpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKQEAgLTE5NjQsMTMgKzE5NjQsMTMgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogICAgIGVsc2UgewogICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9
IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwg
MCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5jb250YWlucyhzZWFyY2hTdHJpbmcsIHRydWUsIHN0YXJ0KSkpOworICAgIHJldHVybiBqc0Jv
b2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5jb250YWlucyhzZWFyY2hTdHJpbmcsIHRydWUsIHN0YXJ0
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5j
bHVkZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5ODAsMTYg
KzE5ODAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcg
c3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBh
MCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoaXNSZWd1bGFyRXhw
cmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJB
cmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIp
OwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0g
ZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICByZXR1cm4gc3RyaW5nSW5jbHVkZXNJbXBs
KHZtLCBleGVjLCBzdHJpbmdUb1NlYXJjaEluLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uQXJnKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3RyaW5nSW5jbHVkZXNJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0
cmluZ0luY2x1ZGVzSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MjAwNiwxMSArMjAwNiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5T
dHJpCiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9XVEZT
dHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFs
dWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKIApAQCAtMjAxOCw3ICsyMDE4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3RyaQogICAgIHJldHVybiBz
dHJpbmdJbmNsdWRlc0ltcGwodm0sIGV4ZWMsIHN0cmluZ1RvU2VhcmNoSW4sIHNlYXJjaFN0cmlu
ZywgcG9zaXRpb25BcmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0yMDI3LDggKzIwMjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
U3RyaW5nSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+c3RyaW5nSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgc3RyaW5nKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNTdHJpbmdJdGVyYXRvcjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zdHJpbmdJdGVyYXRv
clN0cnVjdHVyZSgpLCBzdHJpbmcpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub3JtYWxpemUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBV
Tm9ybWFsaXphdGlvbk1vZGUgZm9ybSkKQEAgLTIwNTksNyArMjA1OSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
V1RGTW92ZShpbXBsKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jTm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjA2OCwxNCArMjA2OCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgYXV0byB2aWV3
V2l0aFN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5n
U3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmlu
Z1ZpZXcgdmlldyA9IHZpZXdXaXRoU3RyaW5nLnZpZXc7CiAKICAgICBVTm9ybWFsaXphdGlvbk1v
ZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMg
cHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQog
ICAgICAgICAgICAgZm9ybSA9IFVOT1JNX05GQzsKQEAgLTIwOTAsNyArMjA5MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICB9CiAKICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShub3JtYWxpemUoZXhlYywgdmll
dy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgdmlldy5sZW5ndGgoKSwgZm9ybSkpOworICAgIHJl
dHVybiBub3JtYWxpemUoZXhlYywgdmlldy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgdmlldy5s
ZW5ndGgoKSwgZm9ybSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDIx
MDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNy0yMDA4LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYxLDEwICs2MSwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIFN0cmluZyBzdWJz
dGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgU3RyaW5nVmll
dyBzb3VyY2UsIGNvbnN0IGludCogb3ZlY3RvciwgUmVnRXhwKiByZWcpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGVhdENoYXJhY3RlcihFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3BsaXRG
YXN0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Jl
cGVhdENoYXJhY3RlcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYnVpbHRpblN0cmluZ1N1YnN0ckludGVybmFsKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbChFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3RyaW5nU3Vic3RySW50ZXJuYWwo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ0luY2x1ZGVz
SW50ZXJuYWwoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENv
bnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlGb3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdHJ1Y3RvcktleUZvcihFeGVjU3RhdGUq
KTsKIAogfQogCkBAIC03NSwxMiArNzUsMTIgQEAgdm9pZCBTeW1ib2xDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oVgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsU3ltYm9sKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbFN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1
ZSBkZXNjcmlwdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChkZXNjcmlwdGlvbi5p
c1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3Jl
YXRlKGV4ZWMtPnZtKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3Jl
YXRlKGV4ZWMsIGRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBT
eW1ib2w6OmNyZWF0ZShleGVjLT52bSgpKTsKKyAgICByZXR1cm4gU3ltYm9sOjpjcmVhdGUoZXhl
YywgZGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN5bWJv
bENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKQpA
QCAtOTQsMzYgKzk0LDM2IEBAIENhbGxUeXBlIFN5bWJvbENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0
YSgKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JGb3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmlu
ZyBzdHJpbmcgPSBzdHJpbmdLZXktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPnZtKCkuc3ltYm9sUmVnaXN0cnkoKS5zeW1ib2xGb3JLZXkoc3RyaW5n
KSkpOworICAgIHJldHVybiBTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT52bSgpLnN5
bWJvbFJlZ2lzdHJ5KCkuc3ltYm9sRm9yS2V5KHN0cmluZykpOwogfQogCiBjb25zdCBjaGFyKiBj
b25zdCBTeW1ib2xLZXlGb3JUeXBlRXJyb3IgPSAiU3ltYm9sLmtleUZvciByZXF1aXJlcyB0aGF0
IHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIHN5bWJvbCI7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlGb3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yS2V5Rm9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgc3ltYm9sVmFsdWUgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBpZiAoIXN5bWJvbFZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChT
eW1ib2xLZXlGb3JUeXBlRXJyb3IpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFN5bWJvbEtleUZvclR5cGVFcnJvcikpOwogCiAgICAg
U3ltYm9sSW1wbCYgdWlkID0gYXNTeW1ib2woc3ltYm9sVmFsdWUpLT5wcml2YXRlTmFtZSgpLnVp
ZCgpOwogICAgIGlmICghdWlkLnN5bWJvbFJlZ2lzdHJ5KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgQVNTRVJUKHVpZC5zeW1ib2xSZWdpc3RyeSgpID09ICZ2bS5zeW1ib2xSZWdpc3Ry
eSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHZtLnN5bWJv
bFJlZ2lzdHJ5KCkua2V5Rm9yU3ltYm9sKHVpZCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhl
Yywgdm0uc3ltYm9sUmVnaXN0cnkoKS5rZXlGb3JTeW1ib2wodWlkKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDgg
KzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVmFsdWVPZihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3Rv
RnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFN5
bWJvbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiBzdGF0aWMgY29uc3QgY2hhciogU3lt
Ym9sVG9TdHJpbmdUeXBlRXJyb3IgPSAiU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyByZXF1aXJl
cyB0aGF0IHx0aGlzfCBiZSBhIHN5bWJvbCBvciBhIHN5bWJvbCBvYmplY3QiOwogc3RhdGljIGNv
bnN0IGNoYXIqIFN5bWJvbFZhbHVlT2ZUeXBlRXJyb3IgPSAiU3ltYm9sLnByb3RvdHlwZS52YWx1
ZU9mIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIGEgc3ltYm9sIG9yIGEgc3ltYm9sIG9iamVjdCI7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg4LDE3ICs4OCwxNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvCiAgICAgICAgIHN5bWJv
bCA9IGFzU3ltYm9sKGpzQ2FzdDxTeW1ib2xPYmplY3QqPih0aGlzT2JqZWN0KS0+aW50ZXJuYWxW
YWx1ZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBzeW1ib2wtPmRlc2NyaXB0aXZlU3RyaW5nKCkpKTsKKyAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHN5bWJvbC0+ZGVzY3JpcHRpdmVTdHJpbmcoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVmFsdWVPZihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaXNTeW1ib2woKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOworICAgICAgICByZXR1
cm4gdGhpc1ZhbHVlOwogCiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN5bWJvbFZhbHVlT2ZUeXBlRXJy
b3IpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3lt
Ym9sUHJvdG8KICAgICBpZiAoIXRoaXNPYmplY3QtPmluaGVyaXRzKFN5bWJvbE9iamVjdDo6aW5m
bygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN5bWJv
bFZhbHVlT2ZUeXBlRXJyb3IpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8
U3ltYm9sT2JqZWN0Kj4odGhpc09iamVjdCktPmludGVybmFsVmFsdWUoKSk7CisgICAgcmV0dXJu
IGpzQ2FzdDxTeW1ib2xPYmplY3QqPih0aGlzT2JqZWN0KS0+aW50ZXJuYWxWYWx1ZSgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNi0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDMzICs0NSwzMyBAQCB2b2lkIFdlYWtNYXBDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIERvbnRFbnVtIHwgUmVh
ZE9ubHkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2Vh
a01hcChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxX
ZWFrTWFwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJXZWFrTWFwIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9y
Q2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2Vha01hcCIp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXZWFr
TWFwKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0V2Vha01hcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdU
YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFwU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpj
cmVhdGUoZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtNYXApOworICAgICAgICByZXR1cm4g
d2Vha01hcDsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHdlYWtNYXAtPkpTT2JqZWN0
OjpnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c2V0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGFkZGVyRnVuY3Rpb24s
IGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYgKGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9
PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGZvckVhY2hJbkl0ZXJhYmxl
KGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV4
dEl0ZW0pIHsKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogICAgICAgICBjYWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rp
b25DYWxsVHlwZSwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhLCB3ZWFrTWFwLCBhcmd1bWVudHMpOwog
ICAgIH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrTWFwKTsKKyAgICByZXR1
cm4gd2Vha01hcDsKIH0KIAogQ29uc3RydWN0VHlwZSBXZWFrTWFwQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEwICsz
NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFdlYWtNYXBQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIldlYWtNYXAiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFdlYWtNYXBQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwR2V0KEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEhh
cyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3Rv
RnVuY1dlYWtNYXBTZXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByb3RvRnVuY1dlYWtNYXBEZWxldGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBIYXMoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBTZXQoRXhlY1N0YXRlKik7CiAK
IHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewpAQCAtNzAsMzYgKzcwLDM2IEBAIHN0YXRpYyBXZWFrTWFw
RGF0YSogZ2V0V2Vha01hcERhdGEoQ2FsbEYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxl
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdl
YWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFt
YXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNP
YmplY3QoKSAmJiBtYXAtPnJlbW92ZShhc09iamVjdChrZXkpKSkpOworICAgIHJldHVybiBqc0Jv
b2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5yZW1vdmUoYXNPYmplY3Qoa2V5KSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEdl
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vh
a01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1h
cCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGlmICgha2V5LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSht
YXAtPmdldChhc09iamVjdChrZXkpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIHJldHVybiBtYXAtPmdldChhc09iamVjdChrZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBIYXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7CiAgICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPmNv
bnRhaW5zKGFzT2JqZWN0KGtleSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihrZXkuaXNPYmpl
Y3QoKSAmJiBtYXAtPmNvbnRhaW5zKGFzT2JqZWN0KGtleSkpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwU2V0KENhbGxGcmFtZSogY2FsbEZyYW1l
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBTZXQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEwNywxMiArMTA3LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2UKICAgICBXZWFrTWFwRGF0YSogbWFw
ID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAg
ICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsKICAgICBpZiAoIW1hcCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOwogICAgIGlmICgha2V5LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwo
IkF0dGVtcHRlZCB0byBzZXQgYSBub24tb2JqZWN0IGtleSBpbiBhIFdlYWtNYXAiKSkpOworICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxp
dGVyYWwoIkF0dGVtcHRlZCB0byBzZXQgYSBub24tb2JqZWN0IGtleSBpbiBhIFdlYWtNYXAiKSk7
CiAgICAgbWFwLT5zZXQodm0sIGFzT2JqZWN0KGtleSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Cisg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1Nl
dENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsMzMgKzQ1LDMzIEBAIHZv
aWQgV2Vha1NldENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
RG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxXZWFrU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFdlYWtTZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldlYWtTZXQiKSk7CisgICAgcmV0dXJuIHRo
cm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsICJXZWFrU2V0Iik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdFdlYWtTZXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RXZWFrU2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1Nl
dFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQg
PSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVl
IGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha1NldCk7Cisg
ICAgICAgIHJldHVybiB3ZWFrU2V0OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vh
a1NldC0+SlNPYmplY3Q6OmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
YWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhKTsKICAgICBpZiAoYWRkZXJGdW5j
dGlvbkNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgZm9y
RWFjaEluSXRlcmFibGUoZXhlYywgaXRlcmFibGUsIFsmXShWTSYsIEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBuZXh0VmFsdWUpIHsKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBjYWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24s
IGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhLCB3ZWFrU2V0LCBh
cmd1bWVudHMpOwogICAgIH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrU2V0
KTsKKyAgICByZXR1cm4gd2Vha1NldDsKIH0KIAogQ29uc3RydWN0VHlwZSBXZWFrU2V0Q29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0
RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
OSArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFdlYWtTZXRQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIldlYWtTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFdlYWtTZXRQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0SGFzKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1Nl
dEFkZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5j
V2Vha1NldERlbGV0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cHJvdG9GdW5jV2Vha1NldEhhcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChFeGVjU3RhdGUqKTsKIAogdm9pZCBXZWFrU2V0UHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CkBAIC02OCwyNSArNjgsMjUgQEAgc3RhdGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFw
RGF0YShDYWxsRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldERlbGV0ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKICAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGtleS5pc09iamVjdCgpICYmIG1hcC0+
cmVtb3ZlKGFzT2JqZWN0KGtleSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihrZXkuaXNPYmpl
Y3QoKSAmJiBtYXAtPnJlbW92ZShhc09iamVjdChrZXkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0SGFzKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewogICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5j
b250YWlucyhhc09iamVjdChrZXkpKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oa2V5LmlzT2Jq
ZWN0KCkgJiYgbWFwLT5jb250YWlucyhhc09iamVjdChrZXkpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0QWRkKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NCwxMiArOTQsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZQogICAgIFdlYWtNYXBEYXRhKiBtYXAg
PSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAg
IEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFtYXApOwogICAgIGlmICghbWFwKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgi
QXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmplY3Qga2V5IHRvIGEgV2Vha1NldCIpKSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0
ZXJhbCgiQXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmplY3Qga2V5IHRvIGEgV2Vha1NldCIpKTsK
ICAgICBtYXAtPnNldCh2bSwgYXNPYmplY3Qoa2V5KSwganNVbmRlZmluZWQoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEw
MTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsMTUgKzYxLDE1IEBAIHZvaWQgSlNEb2xsYXJWTVBy
b3RvdHlwZTo6YWRkRnVuY3Rpb24oVk0KICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIu
c3RyaW5nKCksIGZ1bmN0aW9uKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25DcmFzaChFeGVjU3RhdGUqKQogewogICAgIENSQVNIKCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4geyB9OwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRGR1RydWUoRXhl
Y1N0YXRlKikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25ERkdUcnVlKEV4
ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KTsKKyAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIH0KIAogY2xhc3MgQ2FsbGVyRnJhbWVK
SVRUeXBlRnVuY3RvciB7CkBAIC05NiwyMiArOTYsMjIgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxl
IEpJVENvZGU6OkpJVFR5cGUgbV9qaXRUeXBlOwogfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25MTGludFRydWUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxMaW50VHJ1ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgaWYgKCFleGVjKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBDYWxsZXJGcmFt
ZUpJVFR5cGVGdW5jdG9yIGZ1bmN0b3I7CiAgICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmdW5jdG9y
LmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKIH0KIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KSVRUcnVlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBpZiAoIWV4ZWMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIENh
bGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3RvcjsKICAgICBleGVjLT5pdGVyYXRlKGZ1bmN0
b3IpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmdW5j
dG9yLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKIHZvaWQgSlNEb2xs
YXJWTVByb3RvdHlwZTo6Z2MoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTIxLDEwICsxMjEsMTAgQEAg
dm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjpnYyhFeGVjU3RhdGUqIAogICAgIGV4ZWMtPmhlYXAo
KS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KICAgICAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0RvbGxh
clZNUHJvdG90eXBlOjpnYyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiB2b2lkIEpTRG9sbGFy
Vk1Qcm90b3R5cGU6OmVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMzQsMTAgKzEzNCwxMCBA
QCB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmVkZW5HQyhFeGVjU3RhCiAgICAgZXhlYy0+aGVh
cCgpLT5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkVkZW4pOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWRlbkdDKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MoZXhlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAogYm9vbCBKU0RvbGxhclZNUHJvdG90eXBlOjppc0luSGVhcChIZWFwKiBoZWFw
LCB2b2lkKiBwdHIpCkBAIC0yNTQsMTQgKzI1NCwxNCBAQCBDb2RlQmxvY2sqIEpTRG9sbGFyVk1Q
cm90b3R5cGU6OmNvZGVCbG9jCiAgICAgcmV0dXJuIGZ1bmN0b3IuY29kZUJsb2NrOwogfQogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvckZy
YW1lKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Db2RlQmxvY2tGb3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmICghdmFsdWUuaXNVSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGluYyB0aGUg
ZnJhbWUgbnVtYmVyIGJlY2F1c2UgdGhlIGNhbGxlciB3b3VsZCBjb25zaWRlcgogICAgIC8vIGl0
cyBvd24gZnJhbWUgYXMgZnJhbWUgMC4gSGVuY2UsIHdlIG5lZWQgZGlzY291bnQgdGhlIGZyYW1l
IGZvciB0aGlzCkBAIC0yNzEsNyArMjcxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuYwogICAgIC8vIFRob3VnaCBDb2RlQmxvY2sgaXMgYSBKU0NlbGwsIGl0IGlz
IG5vdCBzYWZlIHRvIHJldHVybiBpdCBkaXJlY3RseSBiYWNrIHRvIEpTIGNvZGUKICAgICAvLyBh
cyBpdCBpcyBhbiBpbnRlcm5hbCB0eXBlIHRoYXQgdGhlIEpTIGNvZGUgY2Fubm90IGhhbmRsZS4g
SGVuY2UsIHdlIGZpcnN0IGVuY29kZSB0aGUKICAgICAvLyBDb2RlQmxvY2sqIGFzIGEgZG91Ymxl
IHRva2VuICh3aGljaCBpcyBzYWZlIGZvciBKUyBjb2RlIHRvIGhhbmRsZSkgYmVmb3JlIHJldHVy
bmluZyBpdC4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYml0d2lzZV9jYXN0
PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2spKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91Ymxl
PihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVC
bG9jaykpKSk7CiB9CiAKIHN0YXRpYyBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zyb21BcmcoRXhlY1N0
YXRlKiBleGVjKQpAQCAtMzA2LDQyICszMDYsNDIgQEAgc3RhdGljIENvZGVCbG9jayogY29kZUJs
b2NrRnJvbUFyZyhFeGVjUwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ29kZUJsb2NrRm9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zy
b21BcmcoZXhlYyk7CiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAgaWYg
KGNvZGVCbG9jaykgewogICAgICAgICBzdHJlYW0ucHJpbnQoKmNvZGVCbG9jayk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkp
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25QcmludFNvdXJjZUZvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsKICAg
ICBpZiAoY29kZUJsb2NrKQogICAgICAgICBjb2RlQmxvY2stPmR1bXBTb3VyY2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUFyZyhleGVjKTsKICAgICBpZiAo
Y29kZUJsb2NrKQogICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29kZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJp
bnQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgZGF0YUxvZyhhcmdTdHIpOwogICAgIH0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCiBjbGFzcyBQcmludEZyYW1lRnVuY3RvciB7CkBAIC00MDQsMjAgKzQw
NCwyMCBAQCB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OnByaW50U3RhY2soQ2FsCiAgICAgSlND
OjpwcmludFN0YWNrKHRvcENhbGxGcmFtZSwgMCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZWlyCiAgICAgLy8gb3duIGZyYW1lLiBT
byBza2lwIDEgZm9yIHRoaXMgZnJhbWUuCiAgICAgcHJpbnRDYWxsRnJhbWUoZXhlYywgMSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25QcmludFN0YWNrKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBXaGVu
IHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHBy
aW50IHRoZQogICAgIC8vIHN0YWNrIHN0YXJ0aW5nIHRoZWlyIG93biBmcmFtZS4gU28gc2tpcCAx
IGZvciB0aGlzIGZyYW1lLgogICAgIHByaW50U3RhY2soZXhlYywgMSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogdm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjpwcmludFZhbHVlKEpTVmFsdWUgdmFsdWUp
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjpwcmludFZhbHVl
KEpTVgogICAgIGRhdGFMb2codmFsdWUpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgV1RG
OjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CkBAIC00MzQsMTMgKzQzNCwxMyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgIHN0cmVhbS5wcmlu
dChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpOwogfQogCiAjaWYgIVBMQVRG
T1JNKFdJTikKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0
UElEKEV4ZWNTdGF0ZSopCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0
UElEKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihn
ZXRwaWQoKSkpOworICAgIHJldHVybiBqc051bWJlcihnZXRwaWQoKSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1i
bHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDE2ICs0MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTV2ViQXNzZW1ibHkpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBp
bGVGdW5jKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFs
aWRhdGVGdW5jKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5j
aHJvbm91czoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2MDE2CkBAIC01NywxNCArNTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseQogICAgIGlmIChFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhj
ZXB0aW9uKCkpIHsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOworICAgICAgICByZXR1cm4gcHJvbWlzZS0+
cHJvbWlzZSgpOwogICAgIH0KIAogICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgbW9kdWxlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7CisgICAgcmV0
dXJuIHByb21pc2UtPnByb21pc2UoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtNzIsMTEgKzc0LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHkKICAgICBzaXplX3QgYnl0ZU9mZnNldDsKICAgICBzaXplX3QgYnl0ZVNpemU7
CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIFdhc206OlBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBi
eXRlU2l6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4
Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgp
KTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHk6OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2Vt
Ymx5KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDIxICs0NCwy
MSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDCiAgQGVuZAogICov
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHN0YXRlLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVu
Y3Rpb24oc3RhdGUtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yOjpjcmVhdGUoc3RhdGUsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yOjpjcmVhdGUoc3RhdGUsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwog
fQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JD
YW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVD
YWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciIpOwogfQogCiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5
cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
MTkgKzQ2LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlGdW5jdGlvbiIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlGdW5jdGlvbikgfTsK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
V2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3Nl
bWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAgICAgaWYgKCF3YXNtRnVuY3Rpb24p
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2Nv
cGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJseSBmdW5jdGlv
biIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5qc0Nh
bGxlZSgpKSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVkIGEgV2ViQXNzZW1ibHkgZnVuY3Rpb24iLCBk
ZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+anNDYWxsZWUo
KSkpKTsKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25h
dHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRl
eCk7CiAKICAgICAvLyBGSVhNRSBpcyB0aGlzIHRoZSByaWdodCBiZWhhdmlvcj8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3NgogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMsIGRlZmF1bHRTb3VyY2VBcHBlbmRlcikpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjLCBkZWZhdWx0U291cmNlQXBwZW5kZXIpKTsKIAogICAgIHsKICAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGRpc2FsbG93ZWQgSTY0IHVzZS4KQEAgLTY3LDE0ICs2
NywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChhcmdJbmRleCkgPT0gV2FzbTo6STY0KSB7CiAg
ICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAg
ICAgICAgICAgIldlYkFzc2VtYmx5IGZ1bmN0aW9uIHdpdGggYW4gaTY0IGFyZ3VtZW50IGNhbid0
IGJlIGNhbGxlZCBmcm9tIEphdmFTY3JpcHQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNpZ25hdHVyZS0+cmV0dXJuVHlw
ZSgpID09IFdhc206Okk2NCkgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1
cmUoKSwKICAgICAgICAgICAgICAgICAiV2ViQXNzZW1ibHkgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IGk2NCBjYW4ndCBiZSBjYWxsZWQgZnJvbSBKYXZhU2NyaXB0Iik7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcik7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbAogICAgICAgICBjYXNlIFdhc206OkFueWZ1bmM6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGFy
Zyk7CiAgICAgfQogCkBAIC0xMzgsMjAgKzEzOCwyMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgLy8gRklYTUUgaXMgdGhpcyBjb3JyZWN0PyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODc2CiAgICAgc3dpdGNoIChzaWdu
YXR1cmUtPnJldHVyblR5cGUoKSkgewogICAgIGNhc2UgV2FzbTo6Vm9pZDoKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3UmVzdWx0KSkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3UmVzdWx0KSk7CiAgICAg
Y2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
cHVyaWZ5TmFOKHN0YXRpY19jYXN0PGRvdWJsZT4oYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNf
Y2FzdDxpbnQzMl90PihyYXdSZXN1bHQpKSkpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihw
dXJpZnlOYU4oc3RhdGljX2Nhc3Q8ZG91YmxlPihiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19j
YXN0PGludDMyX3Q+KHJhd1Jlc3VsdCkpKSkpOwogICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHB1cmlmeU5hTihiaXR3aXNlX2Nhc3Q8
ZG91YmxlPihyYXdSZXN1bHQpKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFO
KGJpdHdpc2VfY2FzdDxkb3VibGU+KHJhd1Jlc3VsdCkpKTsKICAgICBjYXNlIFdhc206Okk2NDoK
ICAgICBjYXNlIFdhc206OkZ1bmM6CiAgICAgY2FzZSBXYXNtOjpBbnlmdW5jOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBFbmNvZGVk
SlNWYWx1ZSgpOworICAgIHJldHVybiB7IH07CiB9CiAKIFdlYkFzc2VtYmx5RnVuY3Rpb24qIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw3IEBAIGNv
bnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3QKICBAZW5kCiAgKi8KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRv
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC02MiwyOCArNjIsMjggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29ucwogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJBc3NlbWJs
eS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+
KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIWpzTW9kdWxlKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFyZ3VtZW50KDApKSkpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3Rh
bmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVy
LCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFyZ3VtZW50KDApKSkpOwogICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIg
aXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEg
VHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+
YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50
LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAh
aW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
InNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5l
ZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29u
ZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBh
biBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGlt
cG9ydEFyZ3VtZW50KSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMg
aXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBl
RXJyb3IgaXMgdGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUo
KSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9i
amVjdCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsK
KyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJs
eS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUg
aGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVl
KGltcG9ydEFyZ3VtZW50KSkpOwogCiAgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFz
c2VtYmx5SW5zdGFuY2UiKSk7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJl
Y29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9i
amVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1
bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAKICAgICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9i
amVjdC0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1
cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICAvLyBMZXQgZnVu
Y3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxh
YmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdl
YkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KICAgICAvLyBMZXQgaW1wb3J0
cyBiZSBhbiBpbml0aWFsbHktZW1wdHkgbGlzdCBvZiBleHRlcm5hbCB2YWx1ZXMuCkBAIC05Niwy
MiArOTYsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
IGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewogICAgICAg
ICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGlt
cG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCiAgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxl
VmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICAvLyAyLiBJ
ZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICBpZiAo
IWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0
U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUpKSkp
OworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVj
dCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9k
dWxlVmFsdWUpKSk7CiAKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZv
cm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0LmZpZWxkKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgICAgIHN3aXRjaCAoaW1wb3J0Lmtp
bmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAg
ICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgogICAgICAgICAgICAgLy8g
aS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsYWJsZSIpKSk7CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsK
ICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBP
YmplY3Q6CiAgICAgICAgICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBv
cnRzID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4ob2JqZWN0KSkgewpAQCAt
MTM3LDIyICsxMzcsMjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseVRhYmxlKj4odmFsdWUpOwogICAgICAgICAgICAgLy8gaS4gSWYgdiBpcyBu
b3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgogICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGlz
IG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBu
b3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOwogCiAgICAgICAgICAgICB1
aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKTsKICAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJs
ZS0+c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRp
YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMg
dG9vIHNtYWxsIikpKTsKIAogICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4
aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gYWN0dWFs
TWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxN
YXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxl
IGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVz
IHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVj
LCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVt
JyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhp
bXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVk
IFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAn
bWF4aW11bSciKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4g
dGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCkBAIC0xNjksMjMgKzE2NywyMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2YWx1ZSk7CiAgICAg
ICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRo
cm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgaWYgKCFtZW1vcnkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
Lk1lbW9yeSIpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
Lk1lbW9yeSIpKSk7CiAKICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBleHBlY3RlZEluaXRp
YWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOwogICAgICAgICAgICAgV2Fz
bTo6UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgpLT5pbml0aWFsKCk7
CiAgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5pdGlhbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21h
bGwiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFs
bCIpKSk7CiAKICAgICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRNYXhpbXVt
ID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgewogICAgICAgICAgICAgICAg
IFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1vcnkoKS0+bWF4aW11
bSgpOwogICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBh
ICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVt
b3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWly
ZXMgdGhhdCBpdCBkb2VzIikpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFy
Z2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1w
b3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhp
bXVtJyIpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgpAQCAtMTk5LDcgKzE5NSw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIEFTU0VSVChtb2R1
bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gV2Fz
bTo6R2xvYmFsOjpJbW11dGFibGUpOwogICAgICAgICAgICAgLy8gaWkuIElmIFR5cGUodikgaXMg
bm90IE51bWJlciwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIikp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgi
aW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOwogICAgICAgICAgICAgLy8gaWlp
LiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBz
d2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkg
ewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CkBAIC0yMzEsNyArMjI3LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgogICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxX
YXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwogICAgICAgICAgICAgaWYgKCFtZW1vcnktPmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
TWVtb3J5KHZtLAogICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCksIFdURk1vdmUobWVtb3J5KSkpOwogICAgICAgICB9CkBAIC0yNzEsMjIgKzI2NywyMiBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgbW9k
dWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBtb2R1bGVSZWNv
cmQtPmR1bXAoKTsKICAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFs
dWF0ZShleGVjKTsKICAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShpbnN0YW5jZSk7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSog
c3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5SW5z
dGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIikpOworICAgIHJldHVybiB0
aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIik7CiB9CiAKIFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3RvciogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZSogdGhp
c1Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwyMSArNDQsMjEgQEAg
Y29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29ucwogIEBlbmQKICAqLwogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBzdGF0ZS0+YXJndW1lbnQoMCk7CiAg
ICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKHN0YXRl
LT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0
dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3Jl
YXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3Jl
YXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRl
KiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LkxpbmtFcnJvciIpKTsKKyAgICByZXR1
cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5MaW5rRXJyb3IiKTsKIH0KIAogV2ViQXNzZW1ibHlMaW5r
RXJyb3JDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90
eXBlKiB0aGlzUHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDE4ICs0OCwxOCBAQCBj
b25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1CiAgQGVuZAogICovCiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlN
ZW1vcnkoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhwZWN0cyBl
eGFjdGx5IG9uZSBhcmd1bWVudCIpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSkpOwogCiAgICAg
SlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7CiAgICAgewogICAgICAgICBKU1ZhbHVlIGFyZ3Vt
ZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3Qo
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuTWVtb3J5IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCIp
KSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBl
eHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpOwogICAgICAgICBt
ZW1vcnlEZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOwogICAgIH0KIApA
QCAtNjcsMTEgKzY3LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiaW5pdGlhbCIpOwogICAgICAgICBKU1ZhbHVlIG1pblNpemVWYWx1ZSA9IG1l
bW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICB1aW50MzJfdCBzaXplID0gdG9O
b25XcmFwcGluZ1VpbnQzMihleGVjLCBtaW5TaXplVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICghV2FzbTo6UGFnZUNv
dW50Ojppc1ZhbGlkKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5ICdpbml0aWFsJyBwYWdlIGNvdW50IGlzIHRv
byBsYXJnZSIpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJs
eS5NZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKTsKICAgICAgICAg
aW5pdGlhbFBhZ2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKICAgICB9CiAKQEAgLTc5
LDM1ICs3OSwzNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAg
ICAgewogICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgIm1heGltdW0iKTsKICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2Ny
aXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQo
ZXhlYywgbWF4aW11bSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IHRvTm9uV3JhcHBp
bmdVaW50MzIoZXhlYywgbWF4U2l6ZVZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBpZiAoIVdhc206OlBh
Z2VDb3VudDo6aXNWYWxpZChzaXplKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291
bnQgaXMgdG9vIGxhcmdlIikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikp
KTsKICAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7
CiAKICAgICAgICAgICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIidtYXhpbXVtJyBwYWdlIGNvdW50IG11c3QgYmUgdGhhbiBncmVh
dGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCInbWF4
aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo
ZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdhc206Ok1lbW9yeT4oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3Vu
dCk7CiAgICAgaWYgKCFtZW1vcnktPmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVt
b3J5KSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShtZW1vcnkpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29u
c3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsICJXZWJBc3NlbWJseS5NZW1vcnkiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JD
YW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJXZWJB
c3NlbWJseS5NZW1vcnkiKTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvciogV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ0LDE5ICs0NCwxOSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVj
U3RhdGUqKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9y
eVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVjLT50aGlzVmFsdWUoKSk7IAogICAgIGlm
ICghbWVtb3J5KSB7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5wcm90b3R5cGUuYnVmZmVy
IGdldHRlciBjYWxsZWQgd2l0aCBub24gV2ViQXNzZW1ibHkuTWVtb3J5IHx0aGlzfCB2YWx1ZSIp
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAg
ICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1lbW9yeS5wcm90b3R5cGUuYnVmZmVyIGdldHRlciBjYWxsZWQgd2l0aCBub24gV2ViQXNzZW1i
bHkuTWVtb3J5IHx0aGlzfCB2YWx1ZSIpKSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobWVtb3J5LT5idWZmZXIoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSk7CisgICAgcmV0dXJuIG1lbW9yeS0+YnVmZmVyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7CiB9CiAKIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMs
MjEgKzUzLDIxIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnUKICBA
ZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgdGhyb3dTY29wZS5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgc3RydWN0dXJlKSk7CisgICAgcmV0dXJuIFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBzdHJ1Y3R1cmUp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3Nl
bWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNh
bGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpOwogfQogCiBKU1Zh
bHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUq
IHN0YXRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzIsOCArMjMyLDcgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdAogICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGljZXNbaV07
CiAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBtb2R1bGUtPmltcG9ydENvdW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGggYW4gaW1wb3J0
LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiRWxlbWVudCBpcyBzZXR0aW5nIHRoZSB0YWJsZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhp
cyBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBGSVhNRS4iKSk7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVl
ID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDE4ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlGdW5jdGlvblZhbGlkYXRlKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5RnVu
Y3Rpb25WYWxpZGF0ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJy
b3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50
IHRoZSB2YWxpZGF0ZSBmdW5jdGlvbiBwcm9wZXJ0eSIpKSkpOworICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gcHJv
cGVydHkiKSkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseUZ1bmN0aW9uQ29tcGlsZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUZ1bmN0aW9uQ29tcGlsZShFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBjb21waWxlIGZ1bmN0aW9uIHByb3BlcnR5
IikpKSk7CisgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJy
b3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50
IHRoZSBjb21waWxlIGZ1bmN0aW9uIHByb3BlcnR5IikpKTsKIH0KIAogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDIxICs0NCwyMSBAQCBjb25zdCBDbGFzc0luZm8g
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDCiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoRXhl
Y1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBhdXRvKiBz
dHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0
ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmpzQ2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUo
c3RhdGUsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVh
dGUoc3RhdGUsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihFeGVjU3Rh
dGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIikpOwor
ICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIpOwogfQogCiBXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDUsNyArNDUsNyBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjCiAg
QGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU0LDUxICs1NCw1MSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgewogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHku
VGFibGUgZXhwZWN0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBp
dHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKTsKICAgICAgICAgbWVtb3J5RGVz
Y3JpcHRvciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKICAgICB9CiAKICAgICB7CiAg
ICAgICAgIElkZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJlbGVtZW50Iik7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudFZhbHVlID0gbWVtb3J5RGVz
Y3JpcHRvci0+Z2V0KGV4ZWMsIGVsZW1lbnRJZGVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgU3RyaW5nIGVsZW1lbnRTdHJpbmcg
PSBlbGVtZW50VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGVsZW1lbnRTdHJpbmcgIT0g
ImFueWZ1bmMiKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhl
IHN0cmluZyAnYW55ZnVuYyciKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0
cmluZyAnYW55ZnVuYyciKSkpOwogICAgIH0KIAogICAgIElkZW50aWZpZXIgaW5pdGlhbElkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CiAgICAgSlNWYWx1ZSBp
bml0aWFsU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVu
dCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgdWludDMy
X3QgaW5pdGlhbCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgaW5pdGlhbFNpemVWYWx1ZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICBzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOwogICAgIElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CiAgICAgYm9vbCBoYXNQcm9w
ZXJ0eSA9IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW1JZGVudCk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKGhhc1By
b3BlcnR5KSB7CiAgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRv
ci0+Z2V0KGV4ZWMsIG1heGltdW1JZGVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgbWF4aW11bSA9IHRvTm9uV3JhcHBpbmdVaW50
MzIoZXhlYywgbWF4U2l6ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgICAgIGlmIChpbml0aWFsID4gKm1heGltdW0pIHsKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwKLSAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiJ21heGltdW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IHRoZSAnaW5pdGlhbCcgcHJvcGVydHkiKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCInbWF4aW11bScgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVy
IHRoYW4gb3IgZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwcm9wZXJ0eSIpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4
aW11bSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCks
IGluaXRpYWwsIG1heGltdW0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldl
YkFzc2VtYmx5LlRhYmxlIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVD
YWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LlRhYmxl
Iik7CiB9CiAKIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw1MCArNTYsNTAg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseVRhYmxlKgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0xlbmd0aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1
bmNTZXQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0xlbmd0aChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xl
bmd0aChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlU
YWJsZVByb3RvRnVuY0xlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhl
Yy0+dGhpc1ZhbHVlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0YWJs
ZS0+c2l6ZSgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
ICAgIHJldHVybiBqc051bWJlcih0YWJsZS0+c2l6ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3co
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2VtYmx5
VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHVpbnQzMl90IGlu
ZGV4ID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKCF0YWJsZS0+Z3Jv
dyhpbmRleCkpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKICAg
ICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpKSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICB1aW50MzJfdCBp
bmRleCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlmIChpbmRleCA+PSB0
YWJsZS0+c2l6ZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
CiAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuVGFibGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRo
ZSBzaXplIG9mIHRoZSB0YWJsZSIpKSk7CkBAIC0xMDcsMTcgKzEwNywxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgfQogCiAgICAgaWYgKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ganNOdWxs
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVBy
b3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlUYWJsZVByb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwg
ZXhlYy0+dGhpc1ZhbHVlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0
aW9uKj4odmFsdWUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHkKICAgICB9CiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3Jh
cHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkp
IHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKQEAgLTE0Myw3ICsx
NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgICAg
IHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5kZXgsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSogV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTAxNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5
NTcgQEAKKzIwMTctMDEtMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZHVjZSB0aGUgdXNlIG9mIEVuY29kZWRKU1ZhbHVlLCBhbmQgdXNlIEpTVmFsdWUgaW5z
dGVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjY1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERl
bGV0ZWQgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yLCByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IsIGFuZAorICAgICAgICBjcmVhdGVKU0J1aWx0aW4gYmVjYXVzZSB0aGV5IGFyZSBubyBs
b25nZXIgdXNlZCBhbnl3aGVyZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlz
IHBhdGNoIG9ubHkgcmVmYWN0b3JzIGNvZGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dUeXBlRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6dGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjp0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0aHJvd0FyZ3VtZW50VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93UmVxdWly
ZWRNZW1iZXJUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dDb25zdHJ1Y3RvclNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnRocm93R2V0dGVyVHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93VGhpc1R5cGVFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpyZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsbFRocm93VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpyZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6
Y2FsbFByb21pc2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6
Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyOjpzZXRBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6YXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVKU0J1aWx0aW4pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlOjpjYWxsVGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNhbGxDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01JdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JUcmFpdHM+OjpuZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01Qcm9taXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dXZWJLaXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpbmRpbmdDYWxsZXI8SlNFdmVudFRhcmdldD46OmNhbGxPcGVyYXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0hUTUxFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTSFRN
TEVsZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU05vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJlcGxh
Y2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJlbW92ZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnaW5F
bGVtZW50UHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbFBsdWdpbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdFJlYWRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXb3JrZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6c2V0dXBNb2R1bGVTY3JpcHRIYW5kbGVycyk6CisgICAgICAgICogYmluZGluZ3MvanMv
U3RydWN0dXJlZENsb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cnVjdHVyZWRDbG9uZUFy
cmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVy
Vmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlvbk9yQ29uc3RydWN0
b3IpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVNlcmlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6
CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKToKKyAgICAgICAg
KEdlbmVyYXRlSW1wbGVtZW50YXRpb25JdGVyYWJsZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0ludGVyZmFj
ZU5hbWVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU0ludGVyZmFjZU5hbWVD
b25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFj
dGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVz
dEFjdGl2ZURPTU9iamVjdD46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0
aW5nRnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlQ2FsbGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46OmNhc3RG
b3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNS
ZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RD
RVJlYWN0aW9uc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVh
Y3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQ0VSZWFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9uc0NhbGxlcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0
aW9uVG9TdHJpbmdDYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFu
b3RoZXJGdW5jdGlvbkNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVz
dERPTUpJVD46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUQW55QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCb29sZWFuQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCeXRlQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRPY3RldEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkU2hv
cnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVExvbmdBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVEZsb2F0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0
ZWRGbG9hdEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklURG91YmxlQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RE9NSklUVXN2U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01K
SVROb2RlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFi
bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0RE9NSklUQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RE9NSklU
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25HZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90
eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUNhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlk
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudEJ5SWRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lQ2FsbGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9y
QXR0cjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0
Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV4Y2VwdGlvbk5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpj
YXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFJl
Z3VsYXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRp
b25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
MUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24y
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
SW5TcGVjaWZpY1dvcmxkQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9u
Q2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpj
b25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIx
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01l
dGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25JbXBsZW1lbnRzTWV0aG9kMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1l
bnRhbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRh
bE1ldGhvZDJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxl
bWVudGFsTWV0aG9kNCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRp
bmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpjYXN0Rm9yQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
UmVhZG9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJdGVyYWJsZUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVu
Y3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVy
YWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0Nh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9u
VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluZGlu
Z0NhbGxlcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNhc3RGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRl
Q3VzdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVz
dEF0dHJpYnV0ZVJXQ3VzdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3Rv
bUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENhbGxlcik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6
OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0cnVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9y
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE5vZGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3ROb2RlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdv
cmtlclByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVGVzdFdvcmtlclByb21pc2VQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJp
ZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
RW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25L
ZXlzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
bktleXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFs
dWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25G
b3JFYWNoQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2gpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FzdEZv
ckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRW51bUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqQnl0ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqT2N0ZXRB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialNob3J0QXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpMb25nQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpMb25nTG9uZ0F0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialRlc3RPYmpBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpT
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqRGljdGlvbmFyeUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialhN
TE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UmVmbGVjdGVkVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZVUkxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21V
UkxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakN1c3RvbUF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqT25mb28pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqT253
ZWJraXRmb28pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
aldpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
Myk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
ak9iamVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb250ZW50RG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTXV0YWJsZVBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakltbXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialN0cmF3YmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSWQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZXBsYWNlYWJs
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akJ5dGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9jdGV0QXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
TG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0TnVs
bGFibGVPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialhNTE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakN1c3RvbUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT25mb28pOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqT253ZWJraXRmb28pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpTdHJhd2JlcnJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iaklkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJs
ZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24xQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Xb3JsZFNwZWNpZmljTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdp
dGhBcmdzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQnl0ZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ5dGVNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RX
aXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9j
dGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0NhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZENh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
SW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZENhbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBh
dGhOU1Jlc29sdmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5n
TWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTdHJpbmdNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0
aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTdHJpbmdTcGVjaWFsTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFs
b25lRW51bUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxFbnVtQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVu
dW1BcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93c0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE51bGxhYmxlVVNWU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmlu
Z0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFi
bGVCeXRlU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZ0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJn
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1
cm5pbmdMb25nQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5p
bmdPYmplY3RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DdXN0b21NZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhv
ZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVN
ZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25QdWJsaWNBbmRQcml2YXRlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZENhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVy
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVt
b3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZENhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZU9iaik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRTdGF0ZU9iakNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhj
ZXB0aW9uQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhE
b2N1bWVudEFyZ3VtZW50Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhD
YWxsZXJXaW5kb3dBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dBcmd1bWVudENhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERl
ZmF1bHRWYWx1ZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kT3B0aW9uYWxBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdG9taWNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJp
bmdBbmREZWZhdWx0VmFsdWVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc051bGxDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
VW5kZWZpbmVkQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWlj
U3RyaW5nSXNOdWxsQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lz
RW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRG91YmxlSXNOYU4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNO
YU4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxGbG9hdElzTmFOQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm9D
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0Nh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdM
b25nSXNaZXJvQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUNhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFNlcXVlbmNlSXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eUNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2Up
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUNhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdENhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBl
cklzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbENhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRo
TlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFJlY29yZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxs
YmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Q2FsbGJhY2tBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxi
YWNrRnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJn
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5k
T3B0aW9uYWxBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRo
Q2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDJDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbE1ldGhvZDNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kNUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q3Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDgpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTApOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTBDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMTMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUNhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoT3B0aW9uYWxQYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9u
MSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1
aXNoaW5nVW5pb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoRGlzdGluZ3Vpc2hpbmdVbmlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1
aXNoaW5nVW5pb25zMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1Vu
aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5v
bkRpc3Rpbmd1aXNoaW5nVW5pb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGVVbmlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRXaXRoTnVsbGFibGVVbmlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlv
bik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0
aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFy
YW1ldGVyMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25n
U2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0
cmluZ0xpc3RGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZUNhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0Rv
Y3VtZW50Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0MUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29udmVydDJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0Myk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29udmVydDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db252ZXJ0NENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQ
b2ludEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2RDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRp
Y0RvdWJsZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZhcmlhZGljRG91YmxlTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlv
bk1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZh
cmlhZGljVW5pb25NZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25BbnkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BbnlDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
UHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudENhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhj
ZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRp
b25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9w
dGlvbmFsSW50QXJndW1lbnRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
ZEZ1bmN0aW9uMlByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
VGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblByb21pc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9t
aXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblBy
b21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxP
dmVybG9hZDFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlv
bmFsT3ZlcmxvYWQxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlv
bmFsT3ZlcmxvYWQyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Q2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0
aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0
ZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25C
dWZmZXJTb3VyY2VQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
MSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzMik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzMyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzNCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzNSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlMSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmNv
bnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBl
RnVuY3Rpb25OYW1lZEl0ZW1DYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFs
aXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6
YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25GdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0
dXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5pbmdDYWxsZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhc3RGb3JBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
VGVzdFN1Yk9iaik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vuc2ln
bmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzSW1t
dXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uU2V0U2hhZG93Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFy
Z0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTZXF1ZW5jZUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxl
c0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
U2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJs
ZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVT
ZXF1ZW5jZU9mVW5pb25zQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25BcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXApOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkltbXV0YWJsZVBvaW50RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNl
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1
ZW5jZUZ1bmN0aW9uMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2Vx
dWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGVyKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6bGVu
Z3RoR2V0dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6
Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6OmNhbGxSdW50aW1lTWV0aG9kKToKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9v
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6ZmFsbGJh
Y2tPYmplY3RHZXR0ZXIpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6
ZmllbGRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6bWV0
aG9kR2V0dGVyKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNhbGxSdW50aW1lT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNhbGxSdW50aW1lQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorCiAyMDE2LTEyLTI2ICBaYWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogIXJlY3QuaXNF
bXB0eSgpIGluIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjEwMTY3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAx
MSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJr
aXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2
OGsub3JnPgogICoKQEAgLTgzNCw3ICs4MzQsNyBAQCBib29sIEJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUCiAgICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQo
JnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKIH0KICAgICAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQor
c3RhdGljIEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiB9CkBAIC04NTgsMTkg
Kzg1OCw2IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0IKICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwogfQogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4
dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwg
YXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0gICAgCi12
b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4
dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0
cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOwot
fQotCiB2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwpAQCAtODkxLDcgKzg3OCw3IEBAIHZvaWQgdGhyb3dTZWN1
cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiAKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsK
IH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRWYWx1ZXMpCitKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoRXhlY1N0
YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQog
ewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBhcHBlbmRBcmd1bWVudE11c3RCZShi
dWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgZnVuY3Rpb25OYW1lKTsKQEAgLTkwMCw3ICs4ODcsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVFCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lKQorSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihFeGVj
U3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAg
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKQEAgLTkwOCw3ICs4OTUsNyBAQCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGCiAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQorSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNj
b3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3Vt
ZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwpAQCAtOTI3LDcg
KzkxNCw3IEBAIHZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3QKICAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VO
YW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgIiwgZXhwZWN0ZWRUeXBlKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1
aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlO
YW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCitKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1i
ZXJUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwpAQCAtOTM5LDcgKzkyNiw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclQKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUpCitKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVj
dXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKIHsKICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0
cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNv
bnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwogfQpAQCAtOTU5LDEyICs5NDYsMTIgQEAgU3RyaW5n
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IAogICAgIHJldHVybiBtYWtlU3RyaW5n
KCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4g
b25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKIH0KIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCitKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEV4
ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogewogICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQ
cm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCitKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJU
eXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKIH0KQEAgLTk4
MCwxOCArOTY3LDE4IEBAIFN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2gK
ICAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkgY2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAn
LicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK0pTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEV4ZWNT
dGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCitKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCiB7CiAgICAgcHJvbWlzZS5yZWpl
Y3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0
aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK0pTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCiB7CiAgICAgcmV0dXJuIGNyZWF0
ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVz
c2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CiB9CkBAIC0xMDE2LDEyICsxMDAzLDEy
IEBAIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2kKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7CiB9CiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3Ii
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCiBDYWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEo
SlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LTIwMDksIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDA2LCAyMDA4LTIwMDksIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJr
aXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCkBAIC0xMTMsOSArMTEzLDYgQEAgRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3co
SlNDOjpFeGVjU3RhdAogRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUq
KTsKIERPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKIAotV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSk7Ci0KIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogdm9p
ZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogbWVzc2FnZSk7CiB2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CkBAIC0xMjUsMjEgKzEyMiwyMSBA
QCBXRUJDT1JFX0VYUE9SVCBib29sIHRocm93U2V0dGVyVHlwZUVycm9yCiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7CiB2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKLVdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNo
YXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBj
aGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9u
YXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVk
VmFsdWVzKTsKK0pTQzo6SlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1Zh
bHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVl
IHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFt
ZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6SlNWYWx1ZSB0aHJvd0NvbnN0cnVj
dG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKIAogU3RyaW5n
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwogU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
IAotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpT
VmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsK
IAotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdl
dHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1X
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OkpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJv
bWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwogCiBXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSog
Z2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFz
c0luZm8qKTsKIFdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVy
ZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qKTsKQEAgLTE1MCw4ICsxNDcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IEpTQzo6SlNPCiAKIHZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVK
U0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5j
dGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQogSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CiB2b2lkKiB3cmFw
cGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGMKIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0
cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CiBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9t
aWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0
aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpT
Qzo6SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIAogCiBlbnVtIGNsYXNzIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBB
c3NlcnQgfTsKQEAgLTMyNSwxNCArMzIwLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+
CiBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rp
b24gPSBib29sKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpU
aHJvd1Njb3BlJik7CiAgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpT
VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAg
dXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21p
c2VPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CisgICAgdXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJv
bWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTQ2xhc3MqIGNh
c3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKIAogICAgIHRlbXBsYXRlPFByb21pc2VP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21p
c2U+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsUHJv
bWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChzdGF0ZSk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOwpAQCAtMzQ2LDcgKzM0MSw3IEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVy
IHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRp
b25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNh
bGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25O
YW1lKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCiAgICAgewogICAgICAgICBBU1NF
UlQoc3RhdGUpOwogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHN0YXRlLT52bSgpKTsKQEAgLTM2NCwxOCArMzU5LDE4IEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVy
IHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMg
Ym9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUgdGhp
c1ZhbHVlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoc3RhdGUpOwogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byogdGhpc09iamVj
dCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoIXRoaXNPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFt
ZSkgOiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBK
U0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
cmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB2YWx1ZSwgdGhyb3dTY29wZSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpUaHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RhdGUpOwogICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKQEAgLTM4NSw5
ICszODAsOSBAQCBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygp
LT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwogICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQogICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xh
c3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSlND
OjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUp
KTsKKyAgICAgICAgcmV0dXJuIGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKICAgICB9CiB9OwogCkBAIC00NTQsMTMgKzQ0OSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gaW5saW5lIEoKICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVj
dCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0
aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0
cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2Jh
bE9iamVjdCk7Ci0gICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpv
YmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5j
b2RlKG9iamVjdCk7Ci19Ci0KIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93
bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQogewogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgp
Lm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKQEAgLTc2NCw5
ICs3NTIsOSBAQCBpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljCiAgICAg
cmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlk
KCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKIH0KIAotdGVtcGxhdGU8SlNDOjpOYXRp
dmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3RlbXBs
YXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6
SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gSlNDOjpKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5n
dGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKTsKIH0KIAogQUxX
QVlTX0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDMsMTIgKzQzLDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVXN1YWxs
eSBkZWZpbmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgogICAgIHZvaWQgaW5pdGlh
bGl6ZVByb3BlcnRpZXMoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0JikgeyB9CiAKLSAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAg
ICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIEpTQzo6dGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSWxsZWdhbCBjb25zdHJ1Y3RvciIpKTsKLSAgICAgICAgcmV0
dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNOdWxsKCkpOworICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxs
RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNzgsNyArNzgs
NyBAQCBwcml2YXRlOgogICAgIC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXph
dGlvbiBjbGFzcy4KICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpIHsgfQogICAgIC8vIE11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBzcGVj
aWFsaXphdGlvbiBjbGFzcy4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NTmFtZWRDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCB7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0
ZToKICAgICAvLyBVc3VhbGx5IGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xhc3Mu
CiAgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKSB7IH0KICAgICAvLyBNdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24g
Y2xhc3MuCi0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBjbGFzcyBKU0J1aWx0aW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3RvckpTQnVpbHRpbk9iamVjdCB7CkBAIC0xMjAsMTAgKzEyMCwxMCBAQCBwcml2YXRlOgogICAg
IEpTQnVpbHRpbkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkg
eyB9CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpK
U0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsK
IAotICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU09iamVjdCYpOwotICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCopOworICAgIEpTQzo6SlNWYWx1ZSBj
YWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0Jik7CisgICAgSlND
OjpKU1ZhbHVlIGNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3Qq
KTsKIAogICAgIC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFz
cy4KICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpIHsgfQpAQCAtMjIwLDEzICsyMjAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gaW5saW5lIHZvaWQgSgogICAgIGluaXRpYWxpemVQcm9wZXJ0aWVzKHZtLCBnbG9iYWxPYmpl
Y3QpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgb2JqZWN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxK
U0NsYXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09i
amVjdCYgb2JqZWN0KQogewogICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0
YXRlLCBvYmplY3QsICppbml0aWFsaXplRnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIEpTQzo6SlNW
YWx1ZTo6ZW5jb2RlKCZvYmplY3QpOworICAgIHJldHVybiAmb2JqZWN0OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0J1aWx0aW5D
b25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU09iamVjdCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCogb2JqZWN0KQogewog
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0yNTksNyArMjU5LDcgQEAgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SlNET01PYmplY3RJbnNwZQogICAgIHJldHVybiBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3Ry
dWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFs
T2JqZWN0LCBKU0NsYXNzOjpET01XcmFwcGVkOjpjcmVhdGUoKmNvbnRleHQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0KEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3Ry
dWN0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwogICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBKU0M6OmpzQ2FzdDxKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHN0YXRl
LT5qc0NhbGxlZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTcgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00OCw4ICs0OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZv
ckJ1aWx0aW5zKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtl
R2V0dGVyVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZVRoaXNUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYWtlR2V0dGVyVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKik7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xv
YmFsT2JqZWN0IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNET01HbG9iYWxPYmplY3QpIH07CiAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBKU0RPTUds
b2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIAogICAgIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9iYWxPYmplY3QoKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZvckJ1
aWx0aW5zKEV4ZWNTdGF0ZSogZXhlY1N0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VU
aGlzVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNT
RVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpID09
IDIpOwpAQCAtODIsMTAgKzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFr
ZVRoaXNUeXAKICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIGF1dG8gZnVuY3Rpb25OYW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5n
ZXRTdHJpbmcoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VU
aGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRhKCksIGZ1bmN0aW9u
TmFtZS51dGY4KCkuZGF0YSgpKSkpOworICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlY1N0
YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgp
LCBmdW5jdGlvbk5hbWUudXRmOCgpLmRhdGEoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqIGV4ZWNT
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlR2V0dGVyVHlwZUVycm9yRm9yQnVpbHRp
bnMoRXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAg
QVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwpAQCAtOTYsNyArOTYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUCiAgICAgQVNTRVJUX1VO
VVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGF0dHJpYnV0ZU5hbWUg
PSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwog
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY3JlYXRlVHlwZUVycm9yKGV4ZWNTdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkp
KSk7CisgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VHZXR0ZXJUeXBl
RXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgYXR0cmlidXRlTmFtZS51
dGY4KCkuZGF0YSgpKSk7CiB9CiAKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5H
bG9iYWxzKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0
ZXJhdG9yLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQ2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBuZXh0KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG5leHQoSlNDOjpFeGVjU3RhdGUqKTsKIAogcHJpdmF0ZToKICAgICBKU0RPTUl0
ZXJhdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkgeyB9CkBAIC0yNDIsMTYgKzI0MiwxNiBAQCBKU0M6OkpTVmFs
dWUgSlNET01JdGVyYXRvcjxKU1dyYXBwZXIsIEl0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpT
V3JhcHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNET01JdGVyYXRvclByb3RvdHlwZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJh
aXRzPjo6bmV4dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+Ojpu
ZXh0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1
dG8gaXRlcmF0b3IgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTUl0ZXJhdG9yPEpTV3JhcHBlciwg
SXRlcmF0b3JUcmFpdHM+Kj4oc3RhdGUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9y
KQotICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVy
YXRvciBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVyYXRvciBv
YmplY3QiKSk7CiAKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3ItPm5l
eHQoKnN0YXRlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5uZXh0KCpzdGF0ZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHJldmlzaW9u
IDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc0LDcgKzE3NCw3IEBAIFJlZjxEZWZlcnJlZFBy
b21pc2U+IGNyZWF0ZURlZmVycmVkUHJvbWkKICAgICByZXR1cm4gRGVmZXJyZWRQcm9taXNlOjpj
cmVhdGUoZG9tV2luZG93LCAqZGVmZXJyZWQpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGNy
ZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK0pTQzo6SlNWYWx1ZSBjcmVhdGVSZWplY3RlZFBy
b21pc2VXaXRoVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKnN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKTsK
QEAgLTE5MCw3ICsxOTAsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJv
bWlzCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVqZWN0aW9uVmFsdWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
KCZzdGF0ZSwgcmVqZWN0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgcHJvbWlzZUNvbnN0
cnVjdG9yLCBhcmd1bWVudHMpKTsKKyAgICByZXR1cm4gY2FsbCgmc3RhdGUsIHJlamVjdEZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHByb21pc2VDb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsK
IH0KIAogc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgcGFyc2VBc0pTT04oSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oUmVmPERlZmVycmVkCiB2b2lkIGZ1bGZp
bGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEFycmF5QnVm
ZmVyKik7CiB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogdm9pZCByZWplY3RQcm9taXNlV2l0aEV4
Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpT
UHJvbWlzZURlZmVycmVkJik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJv
bWlzZVdpdGhUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmKTsKK0pTQzo6
SlNWYWx1ZSBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgU3RyaW5nJik7CiAKIHVzaW5nIFByb21pc2VGdW5jdGlvbiA9IHZvaWQoSlNDOjpF
eGVjU3RhdGUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBA
IGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbigKICAgICByZXR1cm4gcHJv
bWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLXVzaW5nIEJpbmRpbmdQcm9taXNlRnVuY3Rp
b24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7Cit1c2luZyBCaW5kaW5nUHJvbWlzZUZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiB0ZW1wbGF0ZTxCaW5kaW5n
UHJvbWlzZUZ1bmN0aW9uIGJpbmRpbmdGdW5jdGlvbj4KIGlubGluZSB2b2lkIGJpbmRpbmdQcm9t
aXNlRnVuY3Rpb25BZGFwdGVyKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJiBwcm9taXNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwLCAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
NDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNET01XaW5kb3dJbnN0YW5jZUZ1bmN0
aW9uU2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
RE9NV2luZG93SW5zdGFuY2VGdW5jdGlvblNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqKTsKIAog
dm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CkBAIC01NSwxMiArNTUsMTIgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZQogfQogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRvd1dlYktpdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWUganNE
T01XaW5kb3dXZWJLaXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIEpTRE9NV2luZG93KiBjYXN0ZWRUaGlzID0gdG9KU0RPTVdpbmRvdyhK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNET01XaW5kb3cqIGNhc3RlZFRoaXMg
PSB0b0pTRE9NV2luZG93KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVkVGhpcy0+d3JhcHBlZCgpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGNhc3RlZFRoaXMtPndyYXBwZWQoKS53ZWJraXROYW1lc3BhY2UoKSkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndlYmtpdE5hbWVzcGFjZSgpKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldEN1c3RvbS5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTAgKzUxLDEw
IEBAIHByaXZhdGU6CiBzdGQ6OnVuaXF1ZV9wdHI8SlNFdmVudFRhcmdldFdyYXBwZXI+IGpzRXZl
bnRUYXJnZXRDYXN0KEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUpOwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBCaW5kaW5nQ2FsbGVyPEpTRXZlbnRUYXJnZXQ+IHsKLSAgICB1c2luZyBPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0V2ZW50
VGFyZ2V0V3JhcHBlciosIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIE9wZXJhdGlvbkNh
bGxlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNFdmVudFRhcmdl
dFdyYXBwZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKIAogICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNh
bGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlcj4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3Bl
cmF0aW9uTmFtZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKHN0YXRlKTsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CkBAIC02NSw3ICs2NSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdDYWxsZXI8SlNFdmVudFQKIAogICAgICAgICBpZiAoYXV0byogd2luZG93ID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpLnRvRE9NV2luZG93KCkpIHsKICAgICAgICAgICAgIGlmICghd2lu
ZG93LT5mcmFtZSgpIHx8ICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coc3RhdGUsICp3aW5kb3csIFRocm93U2VjdXJpdHlFcnJvcikpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QuZ2V0KCksIHRocm93
U2NvcGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDEzICs1MSwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1l
ZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiB9CiAKIC8vIEhUTUxBbGxDb2xsZWN0aW9ucyBhcmUgc3Ry
YW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwuCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rp
b24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRG8gbm90IHVz
ZSB0aGlzT2JqIGhlcmUuIEl0IGNhbiBiZSB0aGUgSlNIVE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1
bWVudC5mb3JtcyhpKSBjYXNlLgogICAgIEpTSFRNTEFsbENvbGxlY3Rpb24qIGpzQ29sbGVjdGlv
biA9IGpzQ2FzdDxKU0hUTUxBbGxDb2xsZWN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CkBAIC02
OCwyMyArNjgsMjMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0
IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAgICBTdHJpbmcgc3RyaW5nID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBwYXJzZUluZGV4KCpzdHJpbmcuaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBj
b2xsZWN0aW9uLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24uaXRlbShpbmRl
eC52YWx1ZSgpKSk7CiAKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuaW1hZ2VzKCc8
bmFtZT4nKSBldGMuCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZWRJdGVtcygq
ZXhlYywganNDb2xsZWN0aW9uLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0cmluZykp
KTsKKyAgICAgICAgcmV0dXJuIG5hbWVkSXRlbXMoKmV4ZWMsIGpzQ29sbGVjdGlvbiwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCBzdHJpbmcpKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2Vj
b25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0
cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMp
LmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRl
bVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksICpp
dGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2Jh
bE9iamVjdCgpLCAqaXRlbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogQ2FsbFR5cGUg
SlNIVE1MQWxsQ29sbGVjdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxE
YXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxl
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTSFRNTEVsZW1lbnQo
RXhlY1N0YXRlJiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTSFRNTEVs
ZW1lbnQoRXhlY1N0YXRlJiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NywzNCArNzcsMzQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlmICghZWxlbWVu
dEludGVyZmFjZS0+aXNVcGdyYWRpbmdFbGVtZW50KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiBi
YXNlU3RydWN0dXJlID0gZ2V0RE9NU3RydWN0dXJlPEpTSFRNTEVsZW1lbnQ+KHZtLCAqZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgYXV0byogbmV3RWxlbWVudFN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKCZleGVjLCBuZXdUYXJnZXRWYWx1ZSwgYmFz
ZVN0cnVjdHVyZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgICAgIFJlZjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IEhUTUxFbGVtZW50OjpjcmVhdGUoZWxl
bWVudEludGVyZmFjZS0+bmFtZSgpLCBkb2N1bWVudCk7CiAgICAgICAgIGVsZW1lbnQtPnNldElz
RGVmaW5lZEN1c3RvbUVsZW1lbnQoKmVsZW1lbnRJbnRlcmZhY2UpOwogICAgICAgICBhdXRvKiBq
c0VsZW1lbnQgPSBKU0hUTUxFbGVtZW50OjpjcmVhdGUobmV3RWxlbWVudFN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50LmdldCgpKTsKICAgICAgICAgY2FjaGVXcmFwcGVyKGdsb2JhbE9i
amVjdC0+d29ybGQoKSwgZWxlbWVudC5wdHIoKSwganNFbGVtZW50KTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0VsZW1lbnQpOworICAgICAgICByZXR1cm4ganNFbGVtZW50Owog
ICAgIH0KIAogICAgIEVsZW1lbnQqIGVsZW1lbnRUb1VwZ3JhZGUgPSBlbGVtZW50SW50ZXJmYWNl
LT5sYXN0RWxlbWVudEluQ29uc3RydWN0aW9uU3RhY2soKTsKICAgICBpZiAoIWVsZW1lbnRUb1Vw
Z3JhZGUpIHsKICAgICAgICAgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJDYW5ub3QgaW5zdGFudGlhdGUgYSBjdXN0b20gZWxlbWVudCBpbnNpZGUgaXRz
IG93biBjb25zdHJjdXRvciBkdXJpbmcgdXBncmFkZXMiKSk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAogICAgIEpTVmFsdWUgZWxlbWVudFdyYXBwZXJWYWx1ZSA9IHRvSlMoJmV4ZWMs
IGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCAqZWxlbWVudFRvVXBncmFkZSk7CiAgICAg
QVNTRVJUKGVsZW1lbnRXcmFwcGVyVmFsdWUuaXNPYmplY3QoKSk7CiAKICAgICBKU1ZhbHVlIG5l
d1Byb3RvdHlwZSA9IG5ld1RhcmdldC0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU09iamVjdCog
ZWxlbWVudFdyYXBwZXJPYmplY3QgPSBhc09iamVjdChlbGVtZW50V3JhcHBlclZhbHVlKTsKICAg
ICBKU09iamVjdDo6c2V0UHJvdG90eXBlKGVsZW1lbnRXcmFwcGVyT2JqZWN0LCAmZXhlYywgbmV3
UHJvdG90eXBlLCB0cnVlIC8qIHNob3VsZFRocm93SWZDYW50U2V0ICovKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgZWxlbWVudEludGVyZmFjZS0+ZGlkVXBncmFkZUxh
c3RFbGVtZW50SW5Db25zdHJ1Y3Rpb25TdGFjaygpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShlbGVtZW50V3JhcHBlclZhbHVlKTsKKyAgICByZXR1cm4gZWxlbWVudFdyYXBwZXJWYWx1
ZTsKIH0KIAogSlNTY29wZSogSlNIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRp
b25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDMsNyArNDMsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSYgZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2ZXIoRXhl
Y1N0YXRlJiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02MSw3ICs2MSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBKU09iamVjdCoganNPYnNlcnZlciA9
IGFzT2JqZWN0KHRvSlNOZXdseUNyZWF0ZWQoJmV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBNdXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoV1RGTW92ZShjYWxsYmFjaykpKSk7CiAg
ICAgUHJpdmF0ZU5hbWUgcHJvcGVydHlOYW1lOwogICAgIGpzT2JzZXJ2ZXItPnB1dERpcmVjdCh2
bSwgcHJvcGVydHlOYW1lLCBvYmplY3QpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNP
YnNlcnZlcik7CisgICAgcmV0dXJuIGpzT2JzZXJ2ZXI7CiB9CiAKIGJvb2wgSlNNdXRhdGlvbk9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMDE2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA5LTIwMTAsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw3ICsxMjEsNyBA
QCBKU1ZhbHVlIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSYgCiAgICAgSlNWYWx1ZSBu
ZXdDaGlsZFZhbHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byogbmV3
Q2hpbGQgPSBKU05vZGU6OnRvV3JhcHBlZChuZXdDaGlsZFZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIW5ld0NoaWxkKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm5vZGUiLCAiTm9kZSIsICJpbnNlcnRCZWZv
cmUiLCAiTm9kZSIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAibm9kZSIsICJOb2RlIiwgImluc2VydEJlZm9yZSIsICJOb2RlIik7CiAK
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkuaW5zZXJ0QmVm
b3JlKCpuZXdDaGlsZCwgSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MSkpKSk7CiAgICAgcmV0dXJuIG5ld0NoaWxkVmFsdWU7CkBAIC0xNDAsOCArMTQwLDggQEAgSlNW
YWx1ZSBKU05vZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUmIAogICAgIGF1dG8qIG9sZENoaWxk
ID0gSlNOb2RlOjp0b1dyYXBwZWQob2xkQ2hpbGRWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFu
ZXdDaGlsZCB8fCAhb2xkQ2hpbGQpKSB7CiAgICAgICAgIGlmICghbmV3Q2hpbGQpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAwLCAibm9kZSIsICJOb2RlIiwgInJlcGxhY2VDaGlsZCIsICJOb2RlIikpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAxLCAiY2hpbGQiLCAiTm9kZSIsICJyZXBsYWNlQ2hpbGQiLCAiTm9kZSIpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwg
Im5vZGUiLCAiTm9kZSIsICJyZXBsYWNlQ2hpbGQiLCAiTm9kZSIpOworICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJjaGlsZCIsICJOb2RlIiwg
InJlcGxhY2VDaGlsZCIsICJOb2RlIik7CiAgICAgfQogCiAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCBzY29wZSwgd3JhcHBlZCgpLnJlcGxhY2VDaGlsZCgqbmV3Q2hpbGQsICpvbGRDaGls
ZCkpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIEpTVmFsdWUgSlNOb2RlOjpyZW1vdmVDaGlsZChFeGVj
U3RhdGUmIHMKICAgICBKU1ZhbHVlIGNoaWxkVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAg
ICBhdXRvKiBjaGlsZCA9IEpTTm9kZTo6dG9XcmFwcGVkKGNoaWxkVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2hpbGQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHRocm93QXJn
dW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiY2hpbGQiLCAiTm9kZSIsICJyZW1vdmVD
aGlsZCIsICJOb2RlIikpOworICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIDAsICJjaGlsZCIsICJOb2RlIiwgInJlbW92ZUNoaWxkIiwgIk5vZGUiKTsK
IAogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5yZW1vdmVD
aGlsZCgqY2hpbGQpKTsKICAgICByZXR1cm4gY2hpbGRWYWx1ZTsKQEAgLTE3MCw3ICsxNzAsNyBA
QCBKU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRlJiBzCiAgICAgSlNWYWx1ZSBu
ZXdDaGlsZFZhbHVlID0gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgYXV0byBuZXdDaGlsZCA9IEpT
Tm9kZTo6dG9XcmFwcGVkKG5ld0NoaWxkVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmV3Q2hp
bGQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHRocm93QXJndW1lbnRUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAwLCAibm9kZSIsICJOb2RlIiwgImFwcGVuZENoaWxkIiwgIk5vZGUi
KSk7CisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
MCwgIm5vZGUiLCAiTm9kZSIsICJhcHBlbmRDaGlsZCIsICJOb2RlIik7CiAKICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkuYXBwZW5kQ2hpbGQoKm5ld0NoaWxk
KSk7CiAgICAgcmV0dXJuIG5ld0NoaWxkVmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVu
dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtOTQsMTkgKzk0LDE5
IEBAIEpTT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QoRXhlY1N0YXRlKiAKICAgICByZXR1cm4g
aW5zdGFuY2UtPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiB9CiAgICAgCi1FbmNvZGVkSlNW
YWx1ZSBwbHVnaW5FbGVtZW50UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHBs
dWdpbkVsZW1lbnRQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNI
VE1MRWxlbWVudCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTSFRNTEVsZW1lbnQq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNIVE1MRWxlbWVudCogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTSFRNTEVsZW1lbnQqPih0aGlzVmFsdWUpOwogICAg
IGlmICghdGhpc09iamVjdCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIEpTT2JqZWN0KiBzY3JpcHRPYmplY3QgPSBwbHVnaW5TY3JpcHRPYmplY3Qo
ZXhlYywgdGhpc09iamVjdCk7CiAgICAgaWYgKCFzY3JpcHRPYmplY3QpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2NyaXB0T2JqZWN0LT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHNjcmlwdE9iamVjdC0+Z2V0KGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKIGJvb2wgcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCwgSlNIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTEzMiw3ICsxMzIs
NyBAQCBib29sIHBsdWdpbkVsZW1lbnRDdXN0b21QdXQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQbHVn
aW4oRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1
Z2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0hUTUxFbGVtZW50KiBlbGVtZW50ID0ganND
YXN0PEpTSFRNTEVsZW1lbnQqPihleGVjLT5qc0NhbGxlZSgpKTsKIApAQCAtMTUxLDcgKzE1MSw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIENh
bGwgdGhlIG9iamVjdC4KICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgc2NyaXB0T2Jq
ZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGV4ZWMtPnRoaXNWYWx1ZSgpLCBhcmd1bWVudExpc3Qp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBDYWxsVHlwZSBwbHVnaW5FbGVtZW50R2V0Q2FsbERhdGEoSlNIVE1MRWxlbWVudCog
ZWxlbWVudCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHJldmlzaW9uIDIx
MDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTkgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNy0yMDA4LCAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDcgKzM3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEpTQzo6QmluZGluZ3M6Okluc3RhbmNlKiBwbHVn
aW5JbnN0YW5jZShIVE1MRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEpTQzo6SlNPYmpl
Y3QqIHBsdWdpblNjcmlwdE9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTSFRNTEVsZW1lbnQqKTsK
IAotICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgcGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
ICAgIEpTQzo6SlNWYWx1ZSBwbHVnaW5FbGVtZW50UHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICAgICBib29sIHBsdWdpbkVs
ZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmLCBKU0hUTUxFbGVtZW50Kik7CiAgICAgYm9vbCBw
bHVnaW5FbGVtZW50Q3VzdG9tUHV0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNIVE1MRWxlbWVudCosIEpTQzo6UHV0UHJvcGVydHlTbG90JiwgYm9v
bCYgcHV0UmVzdWx0KTsKICAgICBKU0M6OkNhbGxUeXBlIHBsdWdpbkVsZW1lbnRHZXRDYWxsRGF0
YShKU0hUTUxFbGVtZW50KiwgSlNDOjpDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2
YXRlQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBQdWJsaWMgSlMgUmVhZGFibGVTdHJlYW1SZWFkZXIgYW5kIFJlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIgY29uc3RydWN0b3IgY2FsbGJhY2tzLgotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoRXhl
Y1N0YXRlJiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlcihFeGVjU3RhdGUmIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTQ2LDcgKzQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwog
CiAjaWYgRU5BQkxFKFJFQURBQkxFX0JZVEVfU1RSRUFNX0FQSSkKIC8vIFB1YmxpYyBKUyBSZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGNvbnN0cnVjdG9yIGNhbGxiYWNrLgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xs
ZXIoRXhlY1N0YXRlJiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVh
ZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcihFeGVjU3RhdGUmIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTU0LDcgKzU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UwogfQogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNS
ZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoRXhlY1N0YXRlJiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKEV4ZWNTdGF0
ZSYgZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjgsNyArNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgbm9Bcmd1bWVudHM7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYWxsKCZleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHN0cmVhbSwg
bm9Bcmd1bWVudHMpKTsKKyAgICByZXR1cm4gY2FsbCgmZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBzdHJlYW0sIG5vQXJndW1lbnRzKTsKIH0KIAogLy8gUHJpdmF0ZSBKUyBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgYW5kIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIgY29uc3RydWN0b3JzLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOCw3
ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dvcmtlcihFeGVjU3RhdGUm
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV29ya2VyKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01MSwxMyArNTEsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgU3RyaW5nIHNjcmlwdFVSTCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8v
IFNlZSBzZWN0aW9uIDQuOC4yIHN0ZXAgMTQgb2YgV2ViV29ya2VycyBmb3Igd2h5IHRoaXMgaXMg
dGhlIGxleGljYWxHbG9iYWxPYmplY3QuCiAgICAgYXV0byYgd2luZG93ID0gYXNKU0RPTVdpbmRv
dyhzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7CiAKICAgICBBU1NFUlQo
d2luZG93LmRvY3VtZW50KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzY29wZSwgV29ya2VyOjpjcmVhdGUoKndpbmRv
dy5kb2N1bWVudCgpLCBzY3JpcHRVUkwsIGdsb2JhbE9iamVjdC5ydW50aW1lRmxhZ3MoKSkpKTsK
KyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzY29wZSwg
V29ya2VyOjpjcmVhdGUoKndpbmRvdy5kb2N1bWVudCgpLCBzY3JpcHRVUkwsIGdsb2JhbE9iamVj
dC5ydW50aW1lRmxhZ3MoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpzZXR1cE1vZHVsZVNjcmlwdAogICAgIGF1dG8mIGZ1bGZpbGxIYW5kbGVyID0g
KkpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZShzdGF0ZS52bSgpLCBzaGVsbC53aW5kb3coKSwg
MSwgU3RyaW5nKCksIFttb2R1bGVTY3JpcHRdKEV4ZWNTdGF0ZSogZXhlYykgewogICAgICAgICBJ
ZGVudGlmaWVyIG1vZHVsZUtleSA9IGpzVmFsdWVUb01vZHVsZUtleShleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7CiAgICAgICAgIG1vZHVsZVNjcmlwdC0+bm90aWZ5TG9hZENvbXBsZXRlZCgqbW9k
dWxlS2V5LmltcGwoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0pOwogCiAgICAgYXV0
byYgcmVqZWN0SGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUoc3RhdGUudm0o
KSwgc2hlbGwud2luZG93KCksIDEsIFN0cmluZygpLCBbbW9kdWxlU2NyaXB0LCBtb2R1bGVMb2Fk
ZXJBbHJlYWR5UmVwb3J0ZWRFcnJvclN5bWJvbCwgbW9kdWxlTG9hZGVyRmV0Y2hpbmdJc0NhbmNl
bGVkU3ltYm9sXShFeGVjU3RhdGUqIGV4ZWMpIHsKQEAgLTM4NiwxMiArMzg2LDEyIEBAIHZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6c2V0dXBNb2R1bGVTY3JpcHQKICAgICAgICAgICAgICAgICAgICAg
TG9hZGFibGVTY3JpcHQ6OkVycm9yVHlwZTo6Q2FjaGVkU2NyaXB0LAogICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om51bGxvcHQKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoc3lt
Ym9sLT5wcml2YXRlTmFtZSgpID09IG1vZHVsZUxvYWRlckZldGNoaW5nSXNDYW5jZWxlZFN5bWJv
bCkgewogICAgICAgICAgICAgICAgIG1vZHVsZVNjcmlwdC0+bm90aWZ5TG9hZFdhc0NhbmNlbGVk
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpz
ZXR1cE1vZHVsZVNjcmlwdAogICAgICAgICAgICAgICAgIHJldHJpZXZlRXJyb3JNZXNzYWdlKCpl
eGVjLCB2bSwgZXJyb3IsIHNjb3BlKSwKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0pOwogCiAgICAgcHJvbWlzZS50aGVuKCZzdGF0ZSwgJmZ1
bGZpbGxIYW5kbGVyLCAmcmVqZWN0SGFuZGxlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TdHJ1Y3R1cmVkQ2xvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RydWN0dXJlZENsb25lQXJyYXlC
dWZmZXIoRXhlY1N0YXRlKiBleGVjU3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RydWN0
dXJlZENsb25lQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNTRVJU
KGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKQEAg
LTQzLDEzICs0MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRD
CiAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IHRvVW5zaGFyZWRBcnJheUJ1ZmZlcihleGVjU3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlY1N0YXRlLCBEQVRBX0NMT05FX0VSUik7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGV4ZWNTdGF0ZS0+dm0oKSwgZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQp
LCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmJ5dGVMZW5n
dGgoKSkpKTsKKyAgICByZXR1cm4gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWNTdGF0ZS0+dm0o
KSwgZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJl
KEFycmF5QnVmZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhFeGVjU3Rh
dGUqIGV4ZWNTdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1Y3R1cmVkQ2xvbmVBcnJh
eUJ1ZmZlclZpZXcoRXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNTRVJUKGV4ZWNTdGF0
ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKQEAgLTYxLDMzICs2
MSwzMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDCiAgICAgYXV0
byogYnVmZmVyID0gYnVmZmVyVmlldy0+dW5zaGFyZWRCdWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZl
cikgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlY1N0YXRlLCBEQVRBX0NMT05FX0VSUik7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBhdXRvIGJ1ZmZlckNsb25lID0gQXJy
YXlCdWZmZXI6OnRyeUNyZWF0ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OwogCiAgICAgaWYgKGpzRHluYW1pY0Rvd25jYXN0PEpTSW50OEFycmF5Kj4odmFsdWUpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50OEFycmF5OjpjcmVhdGUoZXhlY1N0YXRl
LCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZp
ZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJu
IEpTSW50OEFycmF5OjpjcmVhdGUoZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwg
V1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmll
dy0+bGVuZ3RoKCkpOwogICAgIGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU0ludDE2QXJyYXkqPih2
YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNJbnQxNkFycmF5OjpjcmVh
dGUoZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9u
ZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAg
ICAgICAgcmV0dXJuIEpTSW50MTZBcnJheTo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmlldy0+
c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0
KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93bmNhc3Q8SlNJ
bnQzMkFycmF5Kj4odmFsdWUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50
MzJBcnJheTo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1v
dmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxl
bmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU0ludDMyQXJyYXk6OmNyZWF0ZShleGVjU3RhdGUs
IGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmll
dy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpzRHluYW1p
Y0Rvd25jYXN0PEpTVWludDhBcnJheSo+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1VpbnQ4QXJyYXk6OmNyZWF0ZShleGVjU3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVj
dHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBi
dWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNVaW50OEFycmF5OjpjcmVh
dGUoZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9u
ZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwogICAg
IGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4odmFsdWUpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShl
eGVjU3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwg
YnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAg
ICByZXR1cm4gSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmll
dy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zm
c2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93bmNhc3Q8
SlNVaW50MTZBcnJheSo+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1VpbnQxNkFycmF5OjpjcmVhdGUoZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwg
V1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmll
dy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVWludDE2QXJyYXk6OmNyZWF0ZShleGVj
U3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVm
ZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpz
RHluYW1pY0Rvd25jYXN0PEpTVWludDMyQXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNVaW50MzJBcnJheTo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmll
dy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zm
c2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU1VpbnQzMkFy
cmF5OjpjcmVhdGUoZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShi
dWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3Ro
KCkpOwogICAgIGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU0Zsb2F0MzJBcnJheSo+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlKGV4
ZWNTdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBi
dWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAg
IHJldHVybiBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmlldy0+c3Ry
dWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCks
IGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93bmNhc3Q8SlNGbG9h
dDY0QXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGbG9h
dDY0QXJyYXk6OmNyZWF0ZShleGVjU3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZN
b3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5s
ZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZShleGVjU3Rh
dGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVy
Vmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpzRHlu
YW1pY0Rvd25jYXN0PEpTRGF0YVZpZXcqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNEYXRhVmlldzo6Y3JlYXRlKGV4ZWNTdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0
dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1
ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3OjpjcmVhdGUo
ZXhlY1N0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSks
IGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENs
b25lLmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0
cnVjdHVyZWRDbG9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwxNSBAQAogICoKICAqLwog
CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisKIG5hbWVzcGFjZSBKU0MgewotdXNp
bmcgRW5jb2RlZEpTVmFsdWUgPSBpbnQ2NF90OwogY2xhc3MgRXhlY1N0YXRlOwogfQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1
Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RydWN0dXJlZENsb25lQXJy
YXlCdWZmZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSopOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFu
ZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2Vpbmln
IDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAoQykgMjAwNi0yMDEwLCAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
MCwgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0
IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgogIyBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKQEAgLTE4NzIsNyArMTg3Miw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
ICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvbmRpdGlvbmFsQXR0cmlidXRlID8g
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFs
dWUoJGNvbmRpdGlvbmFsQXR0cmlidXRlKSA6IHVuZGVmOwogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgk
aW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9u
TmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4
ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlm
XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KIApAQCAtMTg4OCwxMCArMTg4
OCwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0
cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1
dGUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFs
U3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgbXkgJGdldHRl
ciA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJp
YnV0ZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNW
YWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJK
U0M6OkpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgICAgIGlmICghSXNSZWFkb25seSgkYXR0cmli
dXRlKSkgewogICAgICAgICAgICAgICAgIG15ICRzZXR0ZXIgPSBHZXRBdHRyaWJ1dGVTZXR0ZXJO
YW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJib29sICR7c2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiAgICAgICAgIH0KQEAgLTE5MjMsNyArMTkyMyw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogCiAgICAgaWYgKEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpKSB7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIvLyBDdXN0b20gY29uc3RydWN0b3JcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSYpO1xuXG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSYpO1xuXG4iKTsKICAgICB9CiAKICAgICBpZiAo
TmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2UpKSB7CkBAIC0yMzQ5LDkgKzIzNDks
OSBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0cnVjCiAgICAgbXkgJGNv
bmRpdGlvbmFsU3RyaW5nID0gJGNvbmRpdGlvbmFsQXR0cmlidXRlID8gJGNvZGVHZW5lcmF0b3It
PkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFs
QXR0cmlidXRlKSA6IHVuZGVmOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0
aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgaWYgKCRpc0NvbnN0
cnVjdG9yKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBs
YXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIp
OwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOyAgICAKIHsKQEAgLTI3NTks
NyArMjc1OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAk
Y29uZGl0aW9uYWxTdHJpbmcgPSAkY29uZGl0aW9uYWxBdHRyaWJ1dGUgPyAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9u
YWxBdHRyaWJ1dGUpIDogdW5kZWY7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAg
ICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlLCAkY2xh
c3NOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0
YXRlKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKICAg
ICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RPTUpJVH0pIHsK
ICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJET01KSVRJRExUeXBlLmgifSA9IDE7CiAg
ICAgICAgICAgICAgICAgbXkgJHVuc2FmZUZ1bmN0aW9uTmFtZSA9ICJ1bnNhZmUiIC4gJGNvZGVH
ZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uTmFtZSk7CkBAIC0yNzg4LDIxICsyNzg4LDIx
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkY29uZGl0aW9u
YWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0
cmlidXRlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9u
YWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICBteSAkZ2V0
dGVyID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0
cmlidXRlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNW
YWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlND
OjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgICAgICBpZiAoIUlzUmVhZG9ubHkoJGF0dHJpYnV0
ZSkpIHsKICAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gR2V0QXR0cmlidXRlU2V0dGVyTmFt
ZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5
KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0gImpzIiAuICRpbnRlcmZh
Y2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBt
eSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAi
Q29uc3RydWN0b3IiOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjb25zdHJ1
Y3RvckZ1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJv
b2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
Iik7CiAgICAgfQpAQCAtMzI4MSwxNyArMzI4MSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICBteSAkY2FzdGluZ0Z1bmN0aW9uID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbVByb3h5VG9KU09iamVjdCJ9ID8gInRvJHtjbGFzc05hbWV9IiA6
IEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpOwogICAgICAgICAjIEZJ
WE1FOiBSZW1vdmUgSW1wbGljaXRUaGlzIGtleXdvcmQgYXMgaXQgaXMgbm8gbG9uZ2VyIGRlZmlu
ZWQgYnkgV2ViSURMIHNwZWMgYW5kIGlzIG9ubHkgdXNlZCBpbiBET01XaW5kb3cuCiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGljaXRUaGlzIn0pIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8PiBpbmxpbmUgJHtjbGFz
c05hbWV9KiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NOYW1lfT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhl
Y1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogQmlu
ZGluZ0NhbGxlcjwke2NsYXNzTmFtZX0+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBkZWNv
ZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChkZWNvZGVkVGhpc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBkZWNvZGVkVGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCkudG9UaGlzKCZzdGF0ZSwgTm90
U3RyaWN0TW9kZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiAkY2FzdGluZ0Z1bmN0aW9uKGRlY29kZWRUaGlzVmFsdWUpOyIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhpc1ZhbHVl
ID0gc3RhdGUudGhpc1ZhbHVlKCkudG9UaGlzKCZzdGF0ZSwgTm90U3RyaWN0TW9kZSk7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0
aW9uKHRoaXNWYWx1ZSk7Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRl
bXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogQmluZGluZ0NhbGxlcjwke2NsYXNzTmFtZX0+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSlc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAk
e2NsYXNzTmFtZX0qIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6Y2FzdEZvckF0dHJpYnV0
ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjYXN0aW5nRnVu
Y3Rpb24odGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG5cbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzMyOSw3ICszMzI4LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
c3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUm
LCAke2NsYXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtcblxuIik7CiAKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1
ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6YXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJz
fT4oc3RhdGUsIHRoaXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTMzNDAsMTAgKzMzMzksMTAgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlv
bk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYpO1xuXG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtnZXRGdW5jdGlvbk5hbWV9
R2V0dGVyKCpzdGF0ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3RhdGUpO1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlv
bk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpXG4iKTsKQEAgLTM0NTksMzMgKzM0NTgsMzIg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgaWYgKE5lZWRzQ29uc3RydWN0
b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewogICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVu
Y3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKIAotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2NvbnN0cnVjdG9y
RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1Zh
bHVlICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0
PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSlcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTtcbiIpOwogCiAgICAgICAgICAgICBpZiAoISRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vSW50ZXJmYWNlT2JqZWN0fSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtj
bGFzc05hbWV9OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSAke2Ns
YXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCAke2NsYXNzTmFtZX1Db25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHN0YXRlLT52bSgpLCAqZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpLCAq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5n
IGNvbnN0cnVjdG9yIHByb3BlcnR5IHRvIGVuc3VyZSByZXVzaW5nIHRoZSBzYW1lIGNvbnN0cnVj
dG9yIG9iamVjdFxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRPbmx5KTtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0b3IpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgIH0KIAogICAgICAgICBteSAk
Y29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29u
c3RydWN0b3IiOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NvbnN0cnVj
dG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgImJvb2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xh
c3NOYW1lfVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8JHtjbGFzc05h
bWV9UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4odGhpc1ZhbHVlKTtc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpIHtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwpAQCAtMzU2NSw5ICszNTYzLDkgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGlubGluZSBib29sICR7c2V0dGVyRnVuY3Rpb259KEV4ZWNTdGF0ZSYs
ICR7Y2xhc3NOYW1lfSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTtcblxuIik7CiAKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29s
ICR7cHV0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0
ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCBcIiRuYW1lXCIpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsIFwiJG5hbWVcIik7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRlckZ1bmN0aW9ufShFeGVjU3RhdGUm
IHN0YXRlLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpXG4iKTsKQEAgLTM1NzUsMTIgKzM1NzMsMTEgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBV
TlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgImJvb2wgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBK
U1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBB
U1NFUlQoc3RhdGVQb2ludGVyKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIHN0YXRlID0gKnN0YXRlUG9pbnRlcjtcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfSkgewpA
QCAtMzc2NywxMiArMzc2NCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbXkgJGZ1bmN0aW9uUmV0dXJuID0gIkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwiOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uUmV0
dXJuID0gIkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCI7CiAgICAgICAgICAgICBpZiAoISRpc0N1c3Rv
bSAmJiAkaXNPdmVybG9hZGVkKSB7CiAgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBudW1iZXIg
dG8gYW4gb3ZlcmxvYWRlZCBtZXRob2QncyBuYW1lIHRvIG1ha2UgaXQgdW5pcXVlOgogICAgICAg
ICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1lIC4gJGZ1bmN0aW9uLT57b3Zl
cmxvYWRJbmRleH07CiAgICAgICAgICAgICAgICAgIyBNYWtlIHRoaXMgZnVuY3Rpb24gc3RhdGlj
IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCBzaW5jZSB3ZSBkb24ndCBnZW5lcmF0ZSBhIHBy
b3RvdHlwZSBmb3IgaXQgaW4gdGhlIGhlYWRlci4KLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25S
ZXR1cm4gPSAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSI7CisgICAgICAgICAgICAgICAg
JGZ1bmN0aW9uUmV0dXJuID0gInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSI7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGNvZGVHZW5lcmF0b3It
PldLX2xjZmlyc3QoJGZ1bmN0aW9uLT5uYW1lKTsKQEAgLTM3ODIsMjIgKzM3NzksMjIgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICghJGZ1bmN0aW9uLT5pc1N0
YXRpYykgewogICAgICAgICAgICAgICAgIG15ICRjbGFzc1BhcmFtZXRlclR5cGUgPSAkY2xhc3NO
YW1lIGVxICJKU0V2ZW50VGFyZ2V0IiA/ICJKU0V2ZW50VGFyZ2V0V3JhcHBlcioiIDogIiR7Y2xh
c3NOYW1lfSoiOwogICAgICAgICAgICAgICAgIG15ICRvcHRpb25hbFByb21pc2VQYXJhbWV0ZXIg
PSAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikgJiYgISRpc0N1c3RvbSkgPyAiIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYsIiA6ICIiOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosICR7Y2xhc3NQYXJhbWV0ZXJUeXBlfSwke29wdGlvbmFsUHJv
bWlzZVBhcmFtZXRlcn0gSlNDOjpUaHJvd1Njb3BlJik7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlICR7ZnVuY3Rpb25O
YW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosICR7Y2xhc3NQYXJhbWV0ZXJUeXBlfSwke29wdGlv
bmFsUHJvbWlzZVBhcmFtZXRlcn0gSlNDOjpUaHJvd1Njb3BlJik7XG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmIChJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSAmJiAhJGlzQ3VzdG9tKSB7CiAg
ICAgICAgICAgICAgICAgbXkgJHNjb3BlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57RXhwb3NlZH0gPyAiV2luZG93T3JXb3JrZXIiIDogIldpbmRvd09ubHkiOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
JHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
KTsKK3N0YXRpYyBKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0YXRlKiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJik7CiAKICR7ZnVuY3Rpb25SZXR1cm59ICR7ZnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rpb25OYW1lfVByb21pc2Us
IFByb21pc2VFeGVjdXRpb25TY29wZTo6JHtzY29wZX0+KCpzdGF0ZSkpOworICAgIHJldHVybiBj
YWxsUHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rpb25OYW1lfVByb21pc2UsIFByb21pc2VFeGVjdXRp
b25TY29wZTo6JHtzY29wZX0+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtmdW5jdGlvbk5h
bWV9UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UpCiBFTkQKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIke2Z1bmN0aW9uUmV0dXJufSAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBz
dGF0ZSlcbiIpOwpAQCAtMzgxNSw3ICszODEyLDcgQEAgRU5ECiAgICAgICAgICAgICBpZiAoJGZ1
bmN0aW9uLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsKICAg
ICAgICAgICAgICAgICAgICAgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrKFxAaW1wbENvbnRl
bnQsICRmdW5jdGlvbiwgJGludGVyZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjoiIC4g
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihzdGF0ZSkpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06OiIg
LiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKHN0YXRlKTtcbiIpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pO1xuIik7CkBAIC0zODM0LDcgKzM4MzEsNyBAQCBFTkQKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JGNsYXNzTmFtZT46
OmNhbGxQcm9taXNlT3BlcmF0aW9uPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIFdURk1v
dmUocHJvbWlzZSksIFwiJHttZXRob2ROYW1lfVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcywgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlz
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgbXkgJGNsYXNzUGFyYW1ldGVyVHlwZSA9ICRjbGFz
c05hbWUgZXEgIkpTRXZlbnRUYXJnZXQiID8gIkpTRXZlbnRUYXJnZXRXcmFwcGVyKiIgOiAiJHtj
bGFzc05hbWV9KiI7CiAgICAgICAgICAgICAgICAgICAgIG15ICR0ZW1wbGF0ZVBhcmFtZXRlcnMg
PSAiJHtmdW5jdGlvbk5hbWV9Q2FsbGVyIjsKQEAgLTM4NDksNyArMzg0Niw3IEBAIEVORAogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjwkY2xhc3NOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3RlbXBsYXRlUGFyYW1ldGVyc30+KHN0
YXRlLCBcIiR7bWV0aG9kTmFtZX1cIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzUGFyYW1ldGVyVHlwZX0gY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc1BhcmFtZXRlclR5cGV9IGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC0zODYyLDEx
ICszODU5LDExIEBAIEVORAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgp
LmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIo
KnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAi
KCpzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpO1xuIik7CiAKQEAgLTQxODksNyArNDE4Niw3IEBAIHN1YiBHZW5lcmF0ZVNlcmlhbGl6
ZXJGdW5jdGlvbgogICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lID0gJGNvZGVH
ZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4g
JGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUpOwogCiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Iik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7c2Vy
aWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlMkaW50
ZXJmYWNlTmFtZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtzZXJpYWxp
emVyTmF0aXZlRnVuY3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKUyRpbnRlcmZh
Y2VOYW1lKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKQEAgLTQy
MTksMTAgKzQyMTYsMTAgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uCiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2
ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlMkaW50
ZXJmYWNlTmFtZT46OmNhbGxPcGVyYXRpb248JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1l
fUNhbGxlcj4oc3RhdGUsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwpAQCAtNDM5NSw3ICs0MzkyLDcgQEAgc3ViIEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgaWYgKCEkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NvbnN0cnVjdG9yfSkgewogICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+bmFtZTsK
ICAgICAgICAgJHF1b3RlZEZ1bmN0aW9uTmFtZSA9ICJcIiRuYW1lXCIiOwotICAgICAgICBwdXNo
KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJheSwgIkpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSIsICRmdW5jdGlvbikpOworICAgICAgICBwdXNoKEBhcmd1bWVu
dHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJheSwgImpzVW5kZWZpbmVkKCkiLCAkZnVu
Y3Rpb24pKTsKICAgICB9IGVsc2UgewogICAgICAgICAkcXVvdGVkRnVuY3Rpb25OYW1lID0gIm51
bGxwdHIiOwogICAgIH0KQEAgLTQ0NDAsNyArNDQzNyw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRl
cnNDaGVjawogICAgICAgICAgICAgbXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCRpbnRlcmZhY2Us
ICR0eXBlKTsKIAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJHtu
YW1lfSA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50czwke0lETFR5cGV9Pigqc3RhdGUsICR7YXJn
dW1lbnRJbmRleH0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTtcbiIpOwogCiAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgk
e25hbWV9LmFyZ3VtZW50cy52YWx1ZSgpKSI7CiAKQEAgLTQ0NzgsNyArNDQ3NSw3IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogCiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKUyRj
bGFzc05hbWUuaCJ9ID0gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNFeHRlcm5hbEVudW1UeXBlKCR0
eXBlKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgJGRlZmlu
ZU9wdGlvbmFsVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPCRjbGFzc05hbWU+KCpzdGF0ZSwgJHtu
YW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVu
dCAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoISRvcHRpb25hbFZhbHVlKSlcbiIp
OwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAkYXJndW1l
bnRJbmRleCwgXCIkbmFtZVwiLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVu
Y3Rpb25OYW1lLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPCRjbGFzc05hbWU+KCkpO1xuIik7
CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICRuYW1lID0gb3B0
aW9uYWxWYWx1ZS52YWx1ZSgpO1xuIikgaWYgJG9wdGlvbmFsVmFsdWUgbmUgJG5hbWU7CkBAIC00
NTE0LDcgKzQ1MTEsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAg
IG15ICgkbmF0aXZlVmFsdWUsICRtYXlUaHJvd0V4Y2VwdGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUo
JGludGVyZmFjZSwgJGFyZ3VtZW50LCAkaW5uZXIsICRjb25kaXRpb25hbCwgInN0YXRlIiwgIipz
dGF0ZSIsICIqY2FzdGVkVGhpcyIsICRnbG9iYWxPYmplY3RSZWZlcmVuY2UsICRhcmd1bWVudEV4
Y2VwdGlvblRocm93ZXIpOwogCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byAkbmFtZSA9ICR7b3V0ZXJ9JHtuYXRpdmVWYWx1ZX07XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpO1xuIikgaWYgJG1heVRocm93RXhjZXB0aW9uOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTtcbiIpIGlmICRtYXlUaHJvd0V4Y2VwdGlvbjsKIAogICAgICAgICAgICAgJHZhbHVlID0g
UGFzc0FyZ3VtZW50RXhwcmVzc2lvbigkbmFtZSwgJGFyZ3VtZW50KTsKICAgICAgICAgfQpAQCAt
NDg4NywxMCArNDg4NCwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2Fs
bCgpCiAKICAgICBpZiAoJGZ1bmN0aW9uLT50eXBlLT5uYW1lIGVxICJ2b2lkIiB8fCBJc1JldHVy
bmluZ1Byb21pc2UoJGZ1bmN0aW9uKSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1cm4ganNVbmRlZmluZWQo
KTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR0aGlzT2JqZWN0ID0gJGZ1bmN0aW9u
LT5pc1N0YXRpYyA/IDAgOiAiY2FzdGVkVGhpcyI7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUoIiAuIE5hdGl2ZVRvSlNWYWx1ZVVz
aW5nUG9pbnRlcnMoJGZ1bmN0aW9uLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0
aGlzT2JqZWN0KSAuICIpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gInJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkZnVuY3Rpb24sIDEs
ICRpbnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOwogICAg
IH0KIH0KIApAQCAtNDk1Niw5ICs0OTUzLDkgQEAgRU5ECiAKICAgICAgICAgaWYgKCRwcm9wZXJ0
eU5hbWUgZXEgImZvckVhY2giKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIDw8
RU5EKTsKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2Z1bmN0aW9uTmFt
ZX1DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlMkaW50ZXJmYWNlTmFtZSogdGhpc09iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaXRlcmF0b3JGb3JFYWNoPCR7aXRlcmF0b3JOYW1lfT4oKnN0YXRlLCAqdGhpc09iamVjdCwg
dGhyb3dTY29wZSkpOworICAgIHJldHVybiBpdGVyYXRvckZvckVhY2g8JHtpdGVyYXRvck5hbWV9
Pigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAogRU5ECkBAIC00OTY5LDE2
ICs0OTY2LDE2IEBAIEVORAogICAgICAgICAgICAgJGl0ZXJhdGlvbktpbmQgPSAiVmFsdWUiIGlm
ICRwcm9wZXJ0eU5hbWUgZXEgIltTeW1ib2wuSXRlcmF0b3JdIiBhbmQgbm90ICRpbnRlcmZhY2Ut
Pml0ZXJhYmxlLT5pc0tleVZhbHVlOwogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IDw8RU5EKTsKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2Fs
bGVyKEV4ZWNTdGF0ZSosIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNT
dGF0ZSosIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTwke2l0ZXJhdG9yTmFt
ZX0+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjoke2l0ZXJhdGlvbktpbmR9KSk7CisgICAg
cmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPCR7aXRlcmF0b3JOYW1lfT4oKnRoaXNPYmplY3QsIEl0ZXJh
dGlvbktpbmQ6OiR7aXRlcmF0aW9uS2luZH0pOwogfQogCiBFTkQKICAgICAgICAgfQogCiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAgPDxFTkQpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPCRjbGFzc05hbWU+OjpjYWxsT3BlcmF0aW9u
PCR7ZnVuY3Rpb25OYW1lfUNhbGxlcj4oc3RhdGUsICIke3Byb3BlcnR5TmFtZX0iKTsKIH0KQEAg
LTU4MDcsNyArNTgwNCw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogCiAg
ICAgaWYgKElzQ29uc3RydWN0YWJsZSgkaW50ZXJmYWNlKSkgewogICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ29uc3RydWN0b3J9KSB7Ci0gICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ0ZW1w
bGF0ZTw+IEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9
Ojpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEFTU0VSVChleGVjKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJldHVybiBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oKmV4ZWMpO1xuIik7CkBAIC01ODE1LDkg
KzU4MTIsOSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICAgICAgIH0g
ZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSAmJiAoISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e05hbWVkQ29uc3RydWN0b3J9IHx8ICRnZW5lcmF0aW5nTmFt
ZWRDb25zdHJ1Y3RvcikpIHsKICAgICAgICAgICAgIG15ICRpc092ZXJsb2FkZWQgPSAkZnVuY3Rp
b24tPntvdmVybG9hZHN9ICYmIEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwogICAgICAg
ICAgICAgaWYgKCRpc092ZXJsb2FkZWQpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdCR7Y2xhc3NOYW1l
fSRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29u
c3RydWN0JHtjbGFzc05hbWV9JGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0oRXhlY1N0YXRlKiBz
dGF0ZSlcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKVxuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUq
IHN0YXRlKVxuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOwpAQCAtNTg3NCw3ICs1ODcxLDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWZpbml0aW9uCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCR7Y29uc3RydWN0b3JBcmd9KTtc
biIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIp
IGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0cnVjdG9yQ2FsbFdpdGh9LCAiU2NyaXB0U3RhdGUi
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7XG4iKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3Rv
ckNhbGxXaXRofSwgIlNjcmlwdFN0YXRlIik7CiAKICAgICAgICAgICAgIG15ICRJRExUeXBlID0g
R2V0SURMVHlwZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlLT50eXBlKTsKIApAQCAtNTg4NCw3ICs1
ODgxLDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uCiAgICAgICAgICAgICBw
dXNoKEBjb25zdHJ1Y3Rpb25Db252ZXJzaW9uQXJndW1lbnRzLCAidGhyb3dTY29wZSIpIGlmICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0cnVjdG9yTWF5VGhyb3dFeGNlcHRp
b259OwogICAgICAgICAgICAgcHVzaChAY29uc3RydWN0aW9uQ29udmVyc2lvbkFyZ3VtZW50cywg
IldURk1vdmUob2JqZWN0KSIpOwogCi0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPCR7SURMVHlwZX0+KCIg
LiBqb2luKCIsICIsIEBjb25zdHJ1Y3Rpb25Db252ZXJzaW9uQXJndW1lbnRzKSAuICIpKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkPCR7SURMVHlwZX0+KCIgLiBqb2luKCIsICIsIEBjb25zdHJ1Y3Rpb25Db252ZXJzaW9u
QXJndW1lbnRzKSAuICIpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9
XG5cbiIpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0ludGVyZmFjZU5hbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
SW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUgOiBwdWJsaWMg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEyMiwyMiArMTIyLDIxIEBAIHZv
aWQgSlNJbnRlcmZhY2VOYW1lOjpkZXN0cm95KEpTQzo6SlNDZWwKICAgICB0aGlzT2JqZWN0LT5K
U0ludGVyZmFjZU5hbWU6On5KU0ludGVyZmFjZU5hbWUoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKiBk
b21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNJbnRlcmZhY2VOYW1lOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU0ludGVyZmFjZU5hbWU6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0K
IAotYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTSW50ZXJm
YWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNJbnRlcmZh
Y2VOYW1lUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTSW50
ZXJmYWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNJbnRl
cmZhY2VOYW1lUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTQgKzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5j
dGlvblBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUq
KTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdEV4Y2l0aW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzoKICAgICB0aGlzT2JqZWN0LT5KU1Rl
c3RBY3RpdmVET01PYmplY3Q6On5KU1Rlc3RBY3RpdmVET01PYmplY3QoKTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEFj
dGl2ZURPTU9iamVjdD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhl
Y1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4odGhp
c1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3RGb3JPcGVyYXRpb24oRXhl
Y1N0YXRlJiBzdGF0ZSkKQEAgLTE1OSw3ICsxNTksNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rl
c3RBY3RpdmVET01PYmplY3QqCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVE
T01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFj
dGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0QWN0aXZlRE9NT2JqZWN0
Pjo6YXR0cmlidXRlPGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgImV4Y2l0aW5nQXR0ciIpOwogfQpAQCAtMTc1LDIyICsxNzUsMjEgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iagogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0QWN0
aXZlRE9NT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3Qp
KSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yMDQsMzYgKzIwMywzNiBAQCBKU1ZhbHVlIEpTVGVzdEFjdGl2
ZURPTU9iamVjdDo6Z2V0Q29uc3RyCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVz
dEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1
bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVG
dW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RBY3RpdmVET01PYmplY3Q+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJleGNpdGluZ0Z1
bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25DYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQo
KS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBuZXh0Q2hpbGQgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgMCwgIm5leHRDaGlsZCIsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgImV4Y2l0aW5nRnVu
Y3Rpb24iLCAiTm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24oKm5leHRDaGlsZCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9z
dE1lc3NhZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
RnVuY3Rpb25Qb3N0TWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhbGxPcGVyYXRpb248anNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZUNhbGxlcj4oc3RhdGUsICJw
b3N0TWVzc2FnZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMjQxLDkgKzI0MCw5IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gbWVzc2FnZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5wb3N0
TWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBib29sIEpTVGVz
dEFjdGl2ZURPTU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnMoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25z
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqKTsK
IAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENFUmVh
Y3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlIDogcHVibGlj
IEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDEsOSArMTQxLDkgQEAgdm9p
ZCBKU1Rlc3RDRVJlYWN0aW9uczo6ZGVzdHJveShKU0M6OkpTQwogICAgIHRoaXNPYmplY3QtPkpT
VGVzdENFUmVhY3Rpb25zOjp+SlNUZXN0Q0VSZWFjdGlvbnMoKTsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zKiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dENFUmVhY3Rpb25zPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNW
YWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnMq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdENFUmVhY3Rpb25zKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+Ojpj
YXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNTMsNyArMTUzLDcgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbgogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjphdHRyaWJ1dGU8anNUZXN0Q0VS
ZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46
OmF0dHJpYnV0ZTxqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rp
b25zIik7CiB9CkBAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dENFUmVhY3Rpb25zUgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RDRVJlYWN0aW9ucyYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+
OjphdHRyaWJ1dGU8anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CiB9CkBAIC0xOTksMjIg
KzE5OSwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0Q0VSZWFjdGlvbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q0VS
ZWFjdGlvbnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENF
UmVhY3Rpb25zUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpT
VGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjUsOSArMjI0LDkgQEAgYm9vbCBzZXRK
U1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEV4ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RDRVJlYWN0aW9ucyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBz
ZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJhdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yNDUsOSAr
MjQ0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0
aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNS
ZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInJlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RD
RVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKQEAgLTI2NSw5ICsyNjQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VS
ZWFjdGlvbnNSCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0
aW9ucz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ2lmaWVy
QXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yODks
MjEgKzI4OCwyMSBAQCBKU1ZhbHVlIEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25zdHJ1Y3RvCiAg
ICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3I+
KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0Q0VSZWFjdGlvbnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Q0VSZWFjdGlvbnNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RDRVJlYWN0aW9ucyosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENF
UmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnND
YWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENFUmVhY3Rpb25zIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Q0VSZWFjdGlvbnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoQ0VSZWFjdGlvbnNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RDRVJlYWN0aW9ucyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoQ0VSZWFjdGlvbnMoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBib29sIEpTVGVzdENFUmVh
Y3Rpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyMTAx
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1
bmN0aW9uVG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5n
KEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTMzLDkg
KzEzMyw5IEBAIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6ZGVzdHIKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp+SlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllcigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqIEJpbmRpbmdD
YWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmNhc3RGb3JBdHRyaWJ1dGUoRXhl
Y1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXI+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNDUsNyArMTQ1
LDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbgogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6YXR0cmlidXRlPGpz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InZhbHVlIik7CiB9CkBAIC0xNTksMjIgKzE1OSwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0Q0VSZWFjdGlvbnNTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9t
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90
eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1LDkgKzE4NCw5IEBAIGJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnMKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidmFsdWUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1
ZSwgInZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtMjA4LDE5ICsyMDcsMTkgQEAgSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOjpnZQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlw
ZUZ1bmN0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcj4o
c3RhdGUsICJ0b1N0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXIqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC52YWx1ZSgpKSk7Cisg
ICAgcmV0dXJuIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwudmFsdWUoKSk7CiB9CiAK
IGJvb2wgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CkBAIC0xMjgsMjIgKzEyOCwyMSBAQCB2b2lkIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yCiAgICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFk
b21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RD
dXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwog
CiBjbGFzcyBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtNjIsNyAr
NjIsNyBAQCBwcml2YXRlOgogCiB1c2luZyBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3RvcjxKU1Rlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD47CiAKLXRlbXBsYXRlPD4gSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50
ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
K3RlbXBsYXRlPD4gSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChleGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoKmV4ZWMpOwpAQCAt
MTI4LDI1ICsxMjgsMjQgQEAgdm9pZCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZgogICAgIHRoaXNPYmplY3QtPkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0Ojp+SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3RQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9t
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBKU1Rlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoc3RhdGUtPnZtKCksIEpTVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgKmRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSwgKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAvLyBTaGFkb3dp
bmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29uc3Ry
dWN0b3Igb2JqZWN0CiAgICAgZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJl
YWRPbmx5KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTsKKyAgICBy
ZXR1cm4gY29uc3RydWN0b3I7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QuaAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjUwogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiAvLyBDdXN0
b20gY29uc3RydWN0b3IKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdChKU0M6OkV4ZWNT
dGF0ZSYpOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoSlNDOjpFeGVjU3RhdGUmKTsKIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24oSlNDOjpFeGVj
U3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1
c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CkBAIC0xNzAsMjIgKzE3MCwyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKj4oc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1l
ZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkp
IHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE5OSwxNCArMTk4LDE0IEBAIEpTVmFsdWUgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OmdldENvbnMKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVy
RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25B
bm90aGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj46OmNhbGxPcGVyYXRpb248anNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbkNhbGxlcj4oc3RhdGUs
ICJhbm90aGVyRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rp
b25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3Ro
ZXJGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0y
MTQsOSArMjEzLDkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwuYW5vdGhlckZ1bmN0aW9uKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDIxMDE2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw1NiArNDIsNTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5j
dGlvbkdldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklUOjpJRExKU0FyZ3VtZW50
VHlwZTxJRExET01TdHJpbmc+KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShK
U0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2Fm
ZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dERPTUpJVCosIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMVW5zaWduZWRTaG9ydD4sIERP
TUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMVW5zaWduZWRTaG9ydD4pOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChK
U0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2Fm
ZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETERPTVN0cmlu
Zz4pOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dHNCeU5hbWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1l
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlw
ZTxJRExET01TdHJpbmc+KTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVEFueUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJv
b2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVFVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRM
b25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVu
cmVzdHJpY3RlZERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERv
bVN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRM
b25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdM
b25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRG
bG9hdE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0
cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VERvdWJsZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUTm9kZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklUQW55QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9N
SklUVW5zaWduZWRMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
RmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklURG91YmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFu
TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUU2hvcnRO
dWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJ
VFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nTnVs
bGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9N
SklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVREb3Vi
bGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxs
YWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
VXN2U3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERPTUpJVENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiAjaWYg
RU5BQkxFKEpJVCkKIHN0YXRpYyBjb25zdCBKU0M6OkRPTUpJVDo6U2lnbmF0dXJlIERPTUpJVFNp
Z25hdHVyZUZvclRlc3RET01KSVRHZXRBdHRyaWJ1dGUoKHVpbnRwdHJfdCl1bnNhZmVKc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZSwgRE9NSklUOjpjaGVja0RPTTxUZXN0
RE9NSklUPiwgSlNUZXN0RE9NSklUOjppbmZvKCksIEpTQzo6RE9NSklUOjpFZmZlY3Q6OmZvclJl
YWQoRE9NSklUOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpET00pLCBET01KSVQ6OklETFJlc3Vs
dFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj46OnZhbHVlLCBET01KSVQ6OklE
TEFyZ3VtZW50VHlwZUZpbHRlcjxJRExET01TdHJpbmc+Ojp2YWx1ZSk7CkBAIC0yNDMsOSArMjQz
LDkgQEAgSlNPYmplY3QqIEpTVGVzdERPTUpJVDo6cHJvdG90eXBlKFZNJiB2bQogICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0RE9NSklUPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJ
VD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERP
TUpJVD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVCo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RE9N
SklUKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0YXRlJiBz
dGF0ZSkKQEAgLTI1NSw3ICsyNTUsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RET01KSVQq
IEJpbmRpbmdDCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01K
SVRBbnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRl
PGpzVGVzdERPTUpJVEFueUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhbnlBdHRyIik7
CiB9CkBAIC0yODIsNyArMjgyLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklU
R2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbkF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RET01KSVRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46
OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRCb29sZWFuQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImJvb2xlYW5BdHRyIik7CiB9CkBAIC0zMDksNyArMzA5LDcgQEAgSlNDOjpET01KSVQ6Okdl
dHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRCeXRlQXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImJ5dGVBdHRyIik7CiB9CkBAIC0zMzYsNyArMzM2LDcgQEAgSlNDOjpET01KSVQ6
OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJvY3RldEF0dHIiKTsKIH0KQEAgLTM2Myw3ICszNjMsNyBAQCBKU0M6
OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklU
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFNob3J0QXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQpAQCAtMzkwLDcgKzM5MCw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklU
VW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojph
dHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQpAQCAtNDE3LDcgKzQxNyw3IEBAIEpTQzo6
RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERPTUpJVExvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUTG9uZ0F0dHJHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOwogfQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIEpT
Qzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVk
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8
anNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVu
c2lnbmVkTG9uZ0F0dHIiKTsKIH0KQEAgLTQ3MSw3ICs0NzEsNyBAQCBKU0M6OkRPTUpJVDo6R2V0
dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
T01KSVRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVExvbmdMb25nQXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQpAQCAtNDk4LDcgKzQ5
OCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQpAQCAtNTI1
LDcgKzUyNSw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0
RE9NSklURmxvYXRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZmxvYXRBdHRyIik7CiB9
CkBAIC01NTIsNyArNTUyLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0
dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxv
YXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3Ry
aWN0ZWRGbG9hdEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0ZWRGbG9h
dEF0dHIiKTsKIH0KQEAgLTU3OSw3ICs1NzksNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3Vi
bGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVERvdWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJkb3VibGVBdHRyIik7CiB9CkBAIC02MDYsNyArNjA2LDcgQEAgSlNDOjpET01KSVQ6
OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RE
T01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0
cmljdGVkRG91YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0
dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidW5yZXN0cmljdGVkRG91YmxlQXR0ciIpOwogfQpAQCAtNjMzLDcgKzYzMyw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNU
ZXN0RE9NSklURG9tU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImRvbVN0cmlu
Z0F0dHIiKTsKIH0KQEAgLTY2MCw3ICs2NjAsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRl
U3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHIiKTsKIH0KQEAgLTY4Nyw3ICs2
ODcsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRl
PGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZT
dHJpbmdBdHRyIik7CiB9CkBAIC03MTQsNyArNzE0LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNl
dHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Tm9kZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RET01KSVROb2RlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJ
VD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVROb2RlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgIm5vZGVBdHRyIik7CiB9CkBAIC03NDEsNyArNzQxLDcgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUQm9vbGVhbk51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQm9v
bGVhbk51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RE
T01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYm9vbGVh
bk51bGxhYmxlQXR0ciIpOwogfQpAQCAtNzY4LDcgKzc2OCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0
ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERP
TUpJVEJ5dGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVO
dWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUQnl0
ZU51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVOdWxsYWJsZUF0dHIi
KTsKIH0KQEAgLTc5NSw3ICs3OTUsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21K
SVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldE51bGxh
YmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXROdWxsYWJsZUF0dHIiKTsKIH0KQEAg
LTgyMiw3ICs4MjIsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJT
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAic2hvcnROdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTg0OSw3ICs4
NDksNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVuc2lnbmVk
U2hvcnROdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0
TnVsbGFibGVBdHRyIik7CiB9CkBAIC04NzYsNyArODc2LDcgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051
bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRMb25n
TnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibG9uZ051bGxhYmxlQXR0ciIp
OwogfQpAQCAtOTAzLDcgKzkwMyw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJ
VEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9u
Z051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25n
TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0
RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
dW5zaWduZWRMb25nTnVsbGFibGVBdHRyIik7CiB9CkBAIC05MzAsNyArOTMwLDcgQEAgSlNDOjpE
T01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
TG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0
dHJpYnV0ZTxqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImxvbmdMb25nTnVsbGFibGVBdHRyIik7CiB9CkBAIC05NTcsNyArOTU3LDcgQEAg
SlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdMb25nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRM
b25nTG9uZ051bGxhYmxlQXR0ciIpOwogfQpAQCAtOTg0LDcgKzk4NCw3IEBAIEpTQzo6RE9NSklU
OjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJ
VCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0
RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJmbG9hdE51
bGxhYmxlQXR0ciIpOwogfQpAQCAtMTAxMSw3ICsxMDExLDcgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01K
SVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxh
YmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZEZsb2F0TnVsbGFi
bGVBdHRyIik7CiB9CkBAIC0xMDM4LDcgKzEwMzgsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0
dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRE
b3VibGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZU51
bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVERv
dWJsZU51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImRvdWJsZU51bGxhYmxl
QXR0ciIpOwogfQpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRl
ciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJ
VCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVu
cmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJs
ZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0ZWREb3VibGVOdWxsYWJs
ZUF0dHIiKTsKIH0KQEAgLTEwOTIsNyArMTA5Miw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0
ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERv
bVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG9tU3Ry
aW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdOdWxsYWJsZUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0
RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZG9t
U3RyaW5nTnVsbGFibGVBdHRyIik7CiB9CkBAIC0xMTE5LDcgKzExMTksNyBAQCBKU0M6OkRPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRl
U3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6
YXR0cmlidXRlPGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJieXRlU3RyaW5nTnVsbGFibGVBdHRyIik7CiB9CkBAIC0xMTQ2LDcgKzEx
NDYsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0
ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ051bGxhYmxlQXR0ciIpOwogfQpA
QCAtMTE3Myw3ICsxMTczLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0
dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVROb2RlTnVsbGFibGVBdHRyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9kZU51bGxhYmxlQXR0ciIpOwogfQpAQCAtMTE5OCwyMiAr
MTE5OCwyMSBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAgICAg
cmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgSlNUZXN0RE9NSklUUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RET01KSVRQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgSlNUZXN0RE9NSklUUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RET01KSVRQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
ZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RE9NSklUOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJl
dHVybiBKU1Rlc3RET01KSVQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0RE9NSklUUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRv
bU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMjcsMTQgKzEyMjYsMTQgQEAgSlNWYWx1ZSBK
U1Rlc3RET01KSVQ6OmdldENvbnN0cnVjdG9yKFZNJgogICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3RET01KSVRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0
dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQ2Fs
bGVyPihzdGF0ZSwgImdldEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC0xMjQyLDggKzEyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5nZXRB
dHRyaWJ1dGUoV1RGTW92ZShuYW1lKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4o
KnN0YXRlLCBpbXBsLmdldEF0dHJpYnV0ZShXVEZNb3ZlKG5hbWUpKSk7CiB9CiAKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5j
dGlvbkdldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2Fz
dGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExET01TdHJpbmc+IGVuY29kZWRO
YW1lKQpAQCAtMTI1OSwxNCArMTI1OCwxNCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gdW5zYWZlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxl
PElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5nZXRBdHRyaWJ1dGUoV1RGTW92ZShuYW1lKSkp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFBy
b3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCos
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0RE9N
SklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9N
SklUKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXI+KHN0
YXRlLCAiaXRlbSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkl0ZW1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTEyNzQsMTAgKzEyNzMsMTAg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byB4ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGF1dG8geSA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1w
bC5pdGVtKFdURk1vdmUoeCksIFdURk1vdmUoeSkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETERPTVN0cmluZz4oKnN0YXRl
LCBpbXBsLml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkpOwogfQogCiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25J
dGVtKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBET01K
SVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRYLCBET01KSVQ6
OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRZKQpAQCAtMTI5NSwx
OSArMTI5NCwxOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBs
Lml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkhhc0F0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJ
VFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01K
SVQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmli
dXRlQ2FsbGVyPihzdGF0ZSwgImhhc0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1
dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5oYXNBdHRy
aWJ1dGUoKSkpOworICAgIHJldHVybiB0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRl
KCkpOwogfQogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMpCkBAIC0xMzIxLDE0ICsxMzIwLDE0IEBAIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmUKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5oYXNBdHRyaWJ1dGUoKSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
UHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVG
dW5jdGlvbkdldEVsZW1lbnRCeUlkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RET01KSVRQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyPihzdGF0ZSwgImdldEVsZW1lbnRCeUlk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklU
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0xMzM2LDgg
KzEzMzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3Ry
aW5nKHN0YXRlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNl
PEVsZW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRF
bGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxFbGVtZW50
Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5
SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlk
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBET01KSVQ6
OklETEpTQXJndW1lbnRUeXBlPElETERPTVN0cmluZz4gZW5jb2RlZEVsZW1lbnRJZCkKQEAgLTEz
NTMsMTQgKzEzNTIsMTQgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2Fm
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8RWxlbWVudD4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRCeUlk
KFdURk1vdmUoZWxlbWVudElkKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0
RWxlbWVudHNCeU5hbWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVt
ZW50c0J5TmFtZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdERPTUpJVD46OmNhbGxPcGVyYXRpb248anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25HZXRFbGVtZW50c0J5TmFtZUNhbGxlcj4oc3RhdGUsICJnZXRFbGVtZW50c0J5TmFtZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90
eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25H
ZXRFbGVtZW50c0J5TmFtZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJ
VCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTM2OCw4
ICsxMzY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBlbGVtZW50TmFtZSA9IHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8Tm9kZUxpc3Q+Pigqc3RhdGUs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRFbGVtZW50c0J5TmFtZShXVEZN
b3ZlKGVsZW1lbnROYW1lKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPE5vZGVMaXN0Pj4oKnN0YXRlLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudHNCeU5hbWUoV1RGTW92
ZShlbGVtZW50TmFtZSkpKTsKIH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIERPTUpJVDo6SURM
SlNBcmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPiBlbmNvZGVkRWxlbWVudE5hbWUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxMyBAQCB0ZW1wbGF0ZTw+IFRl
c3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNvCiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICNpZiBFTkFC
TEUoU1BFQ0lBTF9FVkVOVCkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2VuZGlmCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKIAogY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6
CiAKIHVzaW5nIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3Ry
dWN0b3I8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj47CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0
cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNSwxMSArMTI1LDExIEBAIHRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBldmVudElu
aXREaWN0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0
Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdEV2ZW50Q29uc3RydWN0b3I6
OmNyZWF0ZShXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGV2ZW50SW5pdERpY3QpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RFdmVu
dENvbnN0cnVjdG9yPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1v
dmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBAIC0xOTIsMTQgKzE5Miwx
NCBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6cHJvdG90CiAgICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0
KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogQmluZGlu
Z0NhbGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3Rh
dGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+Ojpj
YXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJl
dHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46
OmF0dHJpYnV0ZTxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJhdHRyMSIpOwogfQpAQCAtMjE1LDcgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmF0dHJpYnV0
ZTxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJh
dHRyMiIpOwogfQpAQCAtMjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RFdmVudENvbnN0cnUKICNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAiYXR0cjMiKTsKIH0KQEAgLTI0OCwyMiArMjQ4LDIxIEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKIAogI2VuZGlmCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmpl
Y3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjEwMTY3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGVGdW5jdGlvbkl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVudFRh
cmdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CkBAIC0xNjgsMjIgKzE2OCwyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RFdmVudFRhcmdl
dCogQmluCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4o
c3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSo+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3RFdmVudFRhcmdldDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXQ6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMCwxNCArMjA5LDE0IEBAIEpT
VmFsdWUgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG8KICAgICByZXR1cm4gZ2V0RE9N
Q29uc3RydWN0b3I8SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29u
c3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25J
dGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RXZlbnRUYXJnZXQqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RXZlbnRUYXJn
ZXQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25J
dGVtKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
RXZlbnRUYXJnZXQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25JdGVtQ2FsbGVyPihzdGF0ZSwgIml0ZW0iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTIyNSw4ICsyMjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4
ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJ
RExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKTsKIH0KIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRl
cwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xh
c3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CkBAIC0xMzgsMTQgKzEzOCwxNCBAQCB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6
ZGVzdHJveShKU0M6OkpTQ2VsCiAgICAgdGhpc09iamVjdC0+SlNUZXN0RXhjZXB0aW9uOjp+SlNU
ZXN0RXhjZXB0aW9uKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV4Y2VwdGlvbiog
QmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0
ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV4
Y2VwdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0Rm9yQXR0cmlidXRl
KEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RFeGNlcHRpb24qPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV4Y2VwdGlvbio+KHRoaXNWYWx1ZSk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdEV4Y2VwdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RFeGNlcHRp
b25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXhjZXB0aW9uPjo6YXR0cmlidXRl
PGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJuYW1lIik7CiB9
CkBAIC0xNTksMjIgKzE1OSwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0
aW9uTmFtCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXhj
ZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RFeGNlcHRpb246OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9uUHJv
dG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9u
UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5j
cHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOCArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEyMiwyMiArMTIy
LDIxIEBAIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6ZGVzdHJveSgKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp+SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJv
b2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmpl
Y3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDMxICs0MCwzMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3Vs
YXJPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
SW5TcGVjaWZpY1dvcmxkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNX
b3JsZChKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblRlc3RQcml2YXRlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0
ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKIAogLy8gQXR0cmlidXRlcwogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjaWYg
RU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKIAogdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OwogCkBA
IC0xNzgsOSArMTc4LDkgQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDOjpK
UwogICAgIHRoaXNPYmplY3QtPkpTVGVzdEdsb2JhbE9iamVjdDo6fkpTVGVzdEdsb2JhbE9iamVj
dCgpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxPYmplY3QqIEJpbmRpbmdD
YWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxP
YmplY3QqIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvckF0dHJpYnV0
ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPih0aGlz
VmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxPYmplY3QqIEJpbmRp
bmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUm
IHN0YXRlKQpAQCAtMTkwLDcgKzE5MCw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEdsb2Jh
bE9iamVjdCogQmkKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJl
Z3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjphdHRyaWJ1
dGU8anNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiB9CkBAIC0yMjMsNyArMjIzLDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdAogI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmF0dHJp
YnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1
dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGUiKTsKIH0KQEAgLTI0Miw3ICsyNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6YXR0cmli
dXRlPGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiB9CkBAIC0yNTgs
MjIgKzI1OCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAK
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RHbG9iYWxPYmplY3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0R2xv
YmFsT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RH
bG9iYWxPYmplY3RQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg0LDkgKzI4Myw5IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXgKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJyZWd1bGFyQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWd1bGFyQXR0cmli
dXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1
bGFyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
MzAzLDkgKzMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3QK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFs
dWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzIzLDkgKzMyMiw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3QKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2Jh
bE9iamVjdCYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFs
QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1Ymxp
Y0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKQEAgLTM0NCw5ICszNDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTM2NywxNCArMzY2LDE0IEBAIEpTVmFsdWUgSlNUZXN0R2xvYmFsT2Jq
ZWN0OjpnZXRDb25zdHJ1Y3QKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvblJlZ3VsYXJPcGVyYXRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9i
YWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVj
dEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkNhbGxl
cj4oc3RhdGUsICJyZWd1bGFyT3BlcmF0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9w
ZXJhdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVy
YXRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTM4MiwyMCArMzgx
LDIwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLnJlZ3VsYXJPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxP
YmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMShFeGVjU3RhdGUqIHN0
YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGxPcGVyYXRpb248
anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24xQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC00MDMsMjIgKzQwMiwyMiBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5lbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9i
amVjdCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24y
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bjJDYWxsZXI+KHN0YXRlLCAiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTQyNiwxNSArNDI1LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
dGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDU0LDE0ICs0NTMsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYQogfQogI2VuZGlmCiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNp
ZmljV29ybGRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZChFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZENh
bGxlcj4oc3RhdGUsICJlbmFibGVkSW5TcGVjaWZpY1dvcmxkIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
RW5hYmxlZEluU3BlY2lmaWNXb3JsZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTQ2OSwyNiArNDY4LDI2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29u
dmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZChXVEZN
b3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZh
dGVGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQ2FsbGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PihzdGF0ZSwgInRlc3RQcml2YXRlRnVuY3Rp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaW1wbC50ZXN0UHJpdmF0ZUZ1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjEwMTY3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDc4ICs0OCw3OCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBGdW5jdGlvbnMKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0
aW9uSW1wbGVtZW50c01ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50
c01ldGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoSlNDOjpFeGVj
U3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
SW1wbGVtZW50c01ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvbkltcGxlbWVudHNNZXRob2Q0KEpTQzo6RXhl
Y1N0YXRlKik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0
aW9uU3VwcGxlbWVudGFsTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVt
ZW50YWxNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIoSlND
OjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdElu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1l
dGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAvLyBBdHRyaWJ1dGVzCiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0
YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25k
aXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICNlbmRpZgogI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xh
c3MgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CkBAIC0yMTcsNyArMjE3LDcgQEAgc3RhdGljX2Fzc2VydChUZXN0U3VwcGxl
bWVudGFsOjpTVVBQTEVNRQogc3RhdGljX2Fzc2VydChUZXN0U3VwcGxlbWVudGFsOjpDT05TVF9J
TVBMID09IDIsICJDT05TVF9JTVBMIGluIFRlc3RTdXBwbGVtZW50YWwgZG9lcyBub3QgbWF0Y2gg
dmFsdWUgZnJvbSBJREwiKTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtMjI3LDE0ICsyMjcsMTQgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIxID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSku
aXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
Y2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSgh
Y29udGV4dCkpCiAgICAgICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9u
Q29udGV4dFVuYXZhaWxhYmxlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFj
ZSIpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdEludGVyZmFjZTo6Y3JlYXRlKCpjb250ZXh0LCBX
VEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0cjIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZhY2U+Pigqc3RhdGUsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RGTW92ZShvYmplY3QpKSk7
CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZhY2U+
Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RGTW92
ZShvYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBAIC0zOTgsOSArMzk4LDkgQEAgdm9pZCBKU1Rlc3RJ
bnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbAogICAgIHRoaXNPYmplY3QtPkpTVGVzdEludGVy
ZmFjZTo6fkpTVGVzdEludGVyZmFjZSgpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJ
bnRlcmZhY2UqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdEZvckF0dHJpYnV0
ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RJbnRlcmZhY2UqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdEZv
ckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0
aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJbnRlcmZhY2UqIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0
YXRlKQpAQCAtNDExLDEwICs0MTEsMTAgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJm
YWNlKiBCaW5kaQogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIz
KQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVt
ZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0
YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICByZXR1
cm4ganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRy
R2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSkKQEAgLTQyOSwxMCArNDI5LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVybiBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC00NDcsNyArNDQ3LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c1N0cjFHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMSIp
OwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsKIH0KQEAgLTQ4NSw3ICs0
ODUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0
dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImltcGxlbWVudHNTdHIzIik7CiB9CkBAIC01MDIsNyArNTAyLDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRz
Tm9kZSIpOwogfQpAQCAtNTIxLDEwICs1MjEsMTAgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
U3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKCpzdGF0
ZSkpOworICAgIHJldHVybiBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTUzOSwxMCArNTM5LDEwIEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFs
U3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEFTU0VS
VChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoKnN0YXRlKSk7CisgICAgcmV0dXJu
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcigq
c3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC01
NTcsNyArNTU3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbgog
I2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJ
bnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjEiKTsKIH0KQEAgLTU3Niw3ICs1
NzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFj
ZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOwogfQpAQCAtNTk1LDcgKzU5NSw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdElu
dGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0
cmlidXRlPGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CiB9CkBAIC02MTIsNyArNjEyLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cAogI2lmIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNl
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InN1cHBsZW1lbnRhbE5vZGUiKTsKIH0KQEAgLTYyOCwyMiArNjI4LDIxIEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAKIAogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4o
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21P
YmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NzUsMTIgKzY3NCwxMSBAQCBib29sIEpTVGVzdElu
dGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqCiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRl
ciwgSlNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc3RhdGVQb2ludGVyKTsK
ICAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVu
dHNTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTY5Miw5ICs2OTAsOSBAQCBi
b29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRl
cmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
ImltcGxlbWVudHNTdHIyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTcxMyw5ICs3MTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
SW1wCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1l
bnRzU3RyMyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImltcGxlbWVudHNTdHIzIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTczMSw5ICs3MjksOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImltcGxlbWVudHNOb2Rl
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
Tm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTc1MCwxMiArNzQ4
LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1ib29sIHNl
dEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3Rh
dGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0
aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBKU1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOwogICAgIGF1dG8mIHN0YXRlID0gKnN0YXRlUG9p
bnRlcjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8gdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAg
ICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0cihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC03NjcsOSArNzY0LDkgQEAgYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZQogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdHIyIik7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJz
dXBwbGVtZW50YWxTdHIyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNzg4LDkgKzc4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic3VwcGxlbWVudGFsU3RyMyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdElu
dGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIz
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3VwcGxlbWVudGFsU3RyMyIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
M0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTgwNiw5ICs4MDMsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dEludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVy
ZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbE5vZGUi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgInN1cHBsZW1lbnRhbE5vZGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC04MzAsMzMgKzgyNywzMyBAQCBKU1ZhbHVlIEpTVGVzdElu
dGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoCiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbklt
cGxlbWVudHNNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMShFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0
aW9uSW1wbGVtZW50c01ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFDYWxsZXI+KHN0YXRlLCAiaW1wbGVt
ZW50c01ldGhvZDEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGltcGwuaW1wbGVtZW50c01ldGhvZDEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRl
cmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
bkltcGxlbWVudHNNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFj
ZT46OmNhbGxPcGVyYXRpb248anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kMkNhbGxlcj4oc3RhdGUsICJpbXBsZW1lbnRzTWV0aG9kMiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25JbXBsZW1lbnRzTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtODY1
LDczICs4NjIsNzMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEs
ICJvYmpBcmciLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTWV0aG9kMiIsICJUZXN0T2Jq
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0
T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuaW1wbGVtZW50c01ldGhvZDIoKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJu
IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRzTWV0aG9kMigqY29udGV4dCwgV1RG
TW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9k
M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdElu
dGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzQ2FsbGVyPihzdGF0
ZSwgImltcGxlbWVudHNNZXRob2QzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2Qz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FzdGVk
VGhpcy0+aW1wbGVtZW50c01ldGhvZDMoKnN0YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvbkltcGxlbWVudHNN
ZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvbkltcGxlbWVudHNNZXRob2Q0KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNNZXRob2Q0KCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVu
dGFsTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2FsbGVyPihzdGF0ZSwgInN1cHBsZW1lbnRhbE1l
dGhvZDEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QxKGltcGwp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
blN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZh
Y2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMkNhbGxlcj4oc3Rh
dGUsICJzdXBwbGVtZW50YWxNZXRob2QyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1l
dGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtOTQwLDQxICs5MzcsNDEgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byBz
dHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVz
dEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxNZXRob2QyIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV2ViQ29yZTo6VGVzdFN1
cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihpbXBsLCAqY29udGV4dCwgV1RGTW92ZShz
dHJBcmcpLCAqb2JqQXJnKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGltcGwsICpjb250ZXh0LCBXVEZNb3ZlKHN0ckFy
ZyksICpvYmpBcmcpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDNDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFj
ZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzQ2FsbGVyPihzdGF0
ZSwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0
aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Qz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKCpzdGF0ZSkpOworICAgIHJldHVy
biBjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKCpzdGF0ZSk7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDQo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
TWV0aG9kNCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZpc2lvbiAyMTAx
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHkoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5KEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qgewog
cHVibGljOgpAQCAtMTI1LDE0ICsxMjUsMTQgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6ZAogICAgIHRoaXNPYmplY3QtPkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlOjp+SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUoKTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpjYXN0Rm9yQXR0cmlidXRlKEV4
ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1Zh
bHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlKj4odGhpc1ZhbHVlKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seShFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPjo6YXR0cmlidXRl
PGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJyZWFkb25seSIpOwogfQpAQCAtMTQ2LDIyICsxNDYsMjEgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3Rv
dHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVy
biBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SXRlcmFibGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxNiArMzMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVz
KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0
aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlw
ZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0SXRlcmFibGVQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0MSwyMiAr
MTQxLDIxIEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEl0ZXJhYmxlKiBCaW5kaW4KICAgICBy
ZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRlcmFibGUqPihzdGF0ZS50aGlzVmFsdWUo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJ
dGVyYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRl
cmFibGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0
SXRlcmFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEl0
ZXJhYmxlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVj
dCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBK
U1Rlc3RJdGVyYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0SXRlcmFibGVQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1LDUyICsxODQsNTIgQEAgY29u
c3QgSlNDOjpDbGFzc0luZm8gVGVzdEl0ZXJhYmxlSXRlcmF0bwogdGVtcGxhdGU8PgogY29uc3Qg
SlNDOjpDbGFzc0luZm8gVGVzdEl0ZXJhYmxlSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3RJdGVyYWJsZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoVGVzdEl0ZXJhYmxlSXRlcmF0b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJh
dG9yQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3RJdGVyYWJsZSog
dGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGl0ZXJhdG9yQ3JlYXRlPFRlc3RJdGVyYWJsZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRl
cmF0aW9uS2luZDo6VmFsdWUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJh
YmxlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1ZSk7CiB9CiAKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1
bmN0aW9uU3ltYm9sSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RJdGVyYWJsZT46OmNhbGxPcGVyYXRpb248anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5j
dGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyPihzdGF0ZSwgIltTeW1ib2wuSXRlcmF0b3JdIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVG
dW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SXRlcmFi
bGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFi
bGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3Qs
IEl0ZXJhdGlvbktpbmQ6OktleVZhbHVlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRl
c3RJdGVyYWJsZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6S2V5VmFsdWUp
OwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEl0ZXJhYmxlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9u
RW50cmllc0NhbGxlcj4oc3RhdGUsICJlbnRyaWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXND
YWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0
SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleSkpOworICAg
IHJldHVybiBpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3Qs
IEl0ZXJhdGlvbktpbmQ6OktleSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlw
ZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SXRlcmFibGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyPihzdGF0ZSwgImtleXMiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVz
Q2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVu
Y3Rpb25WYWx1ZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRv
ckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6
OlZhbHVlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRlc3RJdGVyYWJsZUl0ZXJhdG9y
PigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6VmFsdWUpOwogfQogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVl
cyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVyYWJsZT46OmNhbGxPcGVyYXRp
b248anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcj4oc3RhdGUsICJ2
YWx1ZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVyYWJs
ZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJ
dGVyYWJsZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2Fs
bGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVy
YXRvckZvckVhY2g8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRo
cm93U2NvcGUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JGb3JFYWNoPFRlc3RJdGVyYWJsZUl0ZXJh
dG9yPigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25Gb3JF
YWNoKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVyYWJsZT46OmNhbGxPcGVy
YXRpb248anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KHN0YXRl
LCAiZm9yRWFjaCIpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxNSArMzQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlv
bnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb24oSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsK
IAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b20oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzksOSArMTM5LDkgQEAgdm9pZCBKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveQogICAgIHRoaXNPYmplY3QtPkpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp+SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IoKTsKIH0KIAotdGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIEJpbmRpbmdDYWxsZXI8
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAg
ICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUp
CkBAIC0xNTEsNyArMTUxLDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29u
c3RydQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JU
ZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAidGVzdEF0dHJpYnV0ZUN1c3RvbSIpOwogfQpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db24KIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RB
dHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJp
YnV0ZVJXQ3VzdG9tR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tIik7CiB9CkBAIC0xNzcsMjIgKzE3NywyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SlNCdWlsdGluQ29uCiAgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tKHN0YXRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmpl
Y3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDMsOSArMjAyLDkgQEAg
Ym9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21G
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RB
dHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ0ZXN0QXR0cmlidXRlUldDdXN0b20iKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC0yMjIsMTggKzIyMSwxOCBAQCBKU1ZhbHVlIEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yOjpnZXRDCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3Rv
bUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb25D
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rp
b25UZXN0Q3VzdG9tRnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAidGVzdEN1c3RvbUZ1bmN0aW9uIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVu
Y3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbUZ1bmN0aW9uKCpzdGF0
ZSkpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tRnVuY3Rpb24oKnN0YXRlKTsK
IH0KIAogdm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNz
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzNSwyMiArMTM1LDIxIEBAIHRlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGkKICAgICByZXR1cm4ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwogfQogCi1ib29sIHNldEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY0
LDE0ICsxNjMsMTQgQEAgSlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZQog
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj46OmNhbGxPcGVyYXRpb248anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTc5LDkgKzE3OCw5IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
bGlzdGVuZXIgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29w
ZSwgMCwgImxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgIm1ldGhvZCIp
OyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm1ldGhvZChsaXN0ZW5lci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBi
b29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDbwogCiB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZENvbnN0
cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MCwxMyArOTAsMTMgQEAgdGVt
cGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzdHIxID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0
cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVm
YXVsdFN0cmluZyIpIDogY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0cjMg
PSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3ROYW1lZENvbnN0cnVjdG9y
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKCpjYXN0ZWRUaGlzLT5kb2N1bWVudCgpLCBXVEZNb3Zl
KHN0cjEpLCBXVEZNb3ZlKHN0cjIpLCBXVEZNb3ZlKHN0cjMpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3ROYW1lZENvbnN0cnVj
dG9yPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIFdU
Rk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFj
ZTxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKQEAgLTE1OSwyMiArMTU5LDIxIEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZGVz
dHJveShKU0MKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjp+SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvcigpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFk
b21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkp
OworICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIwICszNywy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtl
clByb21pc2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21p
c2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVz
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOwogCiAv
LyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgog
CiB1c2luZyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yPEpTVGVzdE5v
ZGU+OwogCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Tm9k
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHRlbXBs
YXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKICAg
ICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0Tm9kZTo6Y3JlYXRl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZN
b3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8
VGVzdE5vZGU+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShv
YmplY3QpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6
cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQpAQCAtMTcyLDkgKzE3Miw5IEBAIEpTT2JqZWN0KiBKU1Rlc3ROb2Rl
Ojpwcm90b3R5cGUoVk0mIHZtLCAKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5v
ZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROb2Rl
KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5vZGUq
IEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwg
SlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5vZGUqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3ROb2RlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9yT3BlcmF0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xODQsNyArMTg0LDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0Tm9kZSogQmluZGluZ0NhbAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9k
ZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9kZSYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Tm9k
ZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6YXR0cmlidXRlPGpzVGVz
dE5vZGVOYW1lR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQpAQCAtMTk4LDIy
ICsxOTgsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNU
ZXN0Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Tm9k
ZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3ROb2Rl
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlUHJvdG90
eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE5vZGU6OmdldENv
bnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
Ym9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Tm9kZVByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Tm9kZVByb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIyNCw5ICsy
MjMsOSBAQCBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE5vZGUmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibmFtZSIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Tm9kZU5hbWVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJuYW1lIik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC0yNDYsMjggKzI0NSwyOCBAQCBKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENvbnN0cnVj
dG9yKFZNJiB2CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5vZGVDb25zdHJ1
Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0Tm9kZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdv
cmtlclByb21pc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZVByb21pc2UoRXhl
Y1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1ZSBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZVByb21pc2UoRXhlY1N0YXRlKiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2UoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25U
ZXN0V29ya2VyUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZSwgUHJvbWlzZUV4ZWN1
dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9t
aXNlRnVuY3Rpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VQ
cm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29ya2VyPigqc3RhdGUpOwog
fQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbFByb21pc2VPcGVyYXRpb248anNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VDYWxsZXI+KHN0YXRlLCBXVEZNb3ZlKHByb21pc2Up
LCAidGVzdFdvcmtlclByb21pc2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogY2FzdGVkVGhpcywgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29y
a2VyUHJvbWlzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIGNhc3Rl
ZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaW1wbC50ZXN0V29ya2VyUHJvbWlzZShXVEZNb3ZlKHByb21pc2UpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCiBzdHJ1Y3QgVGVzdE5vZGVJdGVyYXRvclRyYWl0cyB7CkBAIC0yODUsNTcgKzI4NCw1
NyBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0Tm9kZUl0ZXJhdG9yOjpzCiB0ZW1wbGF0ZTw+
CiBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJUZXN0Tm9kZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoVGVzdE5vZGVJdGVyYXRvclByb3RvdHlwZSkgfTsKIAotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxl
cihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0
ZXJhdG9yQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxU
ZXN0Tm9kZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6VmFsdWUpKTsKKyAg
ICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0
ZXJhdGlvbktpbmQ6OlZhbHVlKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcj4oc3RhdGUsICJbU3ltYm9sLkl0
ZXJhdG9yXSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSogdGhp
c09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUq
IHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShpdGVyYXRvckNyZWF0ZTxUZXN0Tm9kZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0
aW9uS2luZDo6S2V5VmFsdWUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJ
dGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleVZhbHVlKTsKIH0KIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNhbGxPcGVyYXRp
b248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxlcj4oc3RhdGUsICJlbnRy
aWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uS2V5c0NhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbktleXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSogdGhpc09iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJh
dG9yQ3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpL
ZXkpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4oKnRoaXNP
YmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbktleXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbktleXNDYWxsZXI+KHN0YXRlLCAia2V5cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcihFeGVjU3Rh
dGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcihFeGVj
U3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4o
KnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZhbHVlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9y
Q3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1
ZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNDYWxsZXI+KHN0
YXRlLCAidmFsdWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckZvckVh
Y2g8VGVzdE5vZGVJdGVyYXRvcj4oKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOwor
ICAgIHJldHVybiBpdGVyYXRvckZvckVhY2g8VGVzdE5vZGVJdGVyYXRvcj4oKnN0YXRlLCAqdGhp
c09iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2hDYWxsZXI+KHN0YXRlLCAiZm9yRWFjaCIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIHRoaXNPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsK
QEAgLTM0NCwxMCArMzQzLDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9kZVAKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwgbmFtZVZh
bHVlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1NSwzNTUgKzEwNTUsMzU1IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0
aW9uYXIKIC8vIEZ1bmN0aW9ucwogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lk
TWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2QoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0
ZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRo
b2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJs
ZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2
ZXJQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
U3RhbmRhbG9uZUVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdB
bmREZWZhdWx0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdB
cmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyhK
U0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJn
KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
blJldHVybmluZ0xvbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25S
ZXR1cm5pbmdPYmplY3QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blByaXZhdGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRo
b2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZVZvaWQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEF0b21pY1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nQW5kRGVmYXVsdFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQm9vbGVhbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
Qm9vbGVhbklzRmFsc2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFu
eShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmQoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV29ybGRTcGVjaWZpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRo
b2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqSW5zdGFuY2VGdW5jdGlvblVuZm9y
Z2VhYmxlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0
ZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25O
dWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1Nw
ZWNpYWxNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0Fu
ZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhCeXRlU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5
dGVTdHJpbmdBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdChKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0
aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3Zl
RXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFj
ZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayhKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9j
dW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnQoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXRvbWljU3RyaW5nSXNOdWxsKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0lzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3Ry
aW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNT
dHJpbmdJc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJs
ZUlzTmFOKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsVW5zaWduZWRMb25nTG9uZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNp
Z25lZExvbmdMb25nSXNaZXJvKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVl
bmNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFueShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3QoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsUmVjb3JkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2Fs
bGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRo
b2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhv
ZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShDb25kaXRpb24x
KQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9k
MShKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlm
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1
bmN0aW9uQ2xhc3NNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRo
T3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhP
cHRpb25hbFBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rp
bmd1aXNoaW5nVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGlu
Z3Vpc2hpbmdVbmlvbnMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0
aW5ndWlzaGluZ1VuaW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24o
SlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1
bmN0aW9uQ2xhc3NNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25h
bChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVO
QUJMRShDb25kaXRpb24xKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0
aG9kV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNl
UmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5j
ZShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdl
dEVsZW1lbnRCeUlkKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVy
dDQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
cmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VmFyaWFkaWNOb2RlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0
aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoRmxvYXRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoT3B0aW9uYWxJbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VP
dmVybG9hZGVkRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21p
c2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0
aW9uV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VG
dW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVu
c2lnbmVkTG9uZ1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJ
ZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db252ZXJ0MihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MyhKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0NChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbihKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZShKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0Rv
dWJsZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNVbmlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aEZsb2F0QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFy
Z3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRl
c3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RD
dXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKICNpZiBFTkFCTEUoQ09ORElU
SU9OMSkgfHwgRU5BQkxFKENPTkRJVElPTjIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNo
U2hhZG93Um9vdChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGlj
dGlvbmFyeVBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1l
dGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQXR0YWNoU2hhZG93Um9vdChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJu
YWxEaWN0aW9uYXJ5UGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRl
cihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVj
U3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5TG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5
U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2Jq
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFk
T25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1N0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJP
YmooSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakJ5dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hv
cnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqVXN2c3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxh
YmxlT2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVbmZvcmdlYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9u
Z1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVj
b3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqRGljdGlv
bmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEaWN0aW9u
YXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDcmVh
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZV
UkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVh
ZE9ubHlTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3Rv
clN0YXRpY1N0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakVu
dW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dE9iakJ5dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpD
bGFtcGVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpM
b25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdM
b25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmlu
Z09ialJlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9u
YXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURp
Y3Rpb25hcnlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1B
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFs
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29s
ZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRVUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkVVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5B
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialR5cGVkQXJyYXlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RP
YmpPbmZvbyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVHlw
ZWRBcnJheUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7
CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZVdpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqT25mb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T2JqT25mb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqT253ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOwogI2lmIEVOQUJMRShDb25kaXRpb24xKQotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q2FjaGVkQXR0cmlidXRlMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9iak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFi
bGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJy
eShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqSWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iaklkKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlcGxhY2VhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0
cmluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9i
akF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJk
c0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9iak9iamVjdEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iakltbXV0YWJsZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50KEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alN0cmF3YmVycnkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9iaklkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iaklkKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJs
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9v
bGVhbkF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0
cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFz
cyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKQEAgLTE1MzMsNyArMTUzMyw3IEBAIHN0YXRpY19hc3NlcnQoVGVzdE9iajo6Q09OU1Rf
VkFMVUVfMTQgPT0KIHN0YXRpY19hc3NlcnQoVGVzdE9iajo6Q09OU1RfSU1QTCA9PSAxNSwgIkNP
TlNUX0lNUEwgaW4gVGVzdE9iaiBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOwogc3Rh
dGljX2Fzc2VydChUZXN0T2JqOjpyZWFkb25seSA9PSAwLCAicmVhZG9ubHkgaW4gVGVzdE9iaiBk
b2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOwogCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T2JqQ29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMTU0MywxNiArMTU0MywxNiBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RDYWxsYmFjayA9IGNv
bnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAidGVzdENh
bGxiYWNrIiwgIlRlc3RPYmplY3QiLCBudWxscHRyKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNv
bnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMSwgInRlc3RDYWxs
YmFja0Z1bmN0aW9uIiwgIlRlc3RPYmplY3QiLCBudWxscHRyKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CiAgICAgYXV0byBvYmpl
Y3QgPSBUZXN0T2JqOjpjcmVhdGUoZG9jdW1lbnQsIHRlc3RDYWxsYmFjay5yZWxlYXNlTm9uTnVs
bCgpLCB0ZXN0Q2FsbGJhY2tGdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigq
c3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7Cisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAogdGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBA
IC0xOTYzLDkgKzE5NjMsOSBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRlCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVj
dCwgc3RhdGUsIGluZGV4LCBzbG90KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0T2Jq
KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0T2JqKiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNW
YWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0T2JqKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0
YXRlJiBzdGF0ZSkKQEAgLTE5NzUsNyArMTk3NSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dE9iaiogQmluZGluZ0NhbGwKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRP
bmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKIH0KQEAgLTE5OTEsNyArMTk5MSw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUwKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZE9u
bHlTdHJpbmdBdHRyIik7CiB9CkBAIC0yMDA3LDcgKzIwMDcsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRl
c3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlYWRPbmx5VGVz
dE9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkT25seVRlc3RPYmpBdHRyIik7
CiB9CkBAIC0yMDIzLDEwICsyMDIzLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWFkT25seVQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
U3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRl
cigqc3RhdGUpKTsKKyAgICByZXR1cm4ganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSkKQEAgLTIwMzgsMTAgKzIwMzgsMTAgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JT
dGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVy
biBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoKnN0YXRlKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdAogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVz
dFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rl
c3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJUZXN0
U3ViT2JqIik7CiB9CkBAIC0yMDY3LDcgKzIwNjcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZyIpOwogfQpAQCAtMjA4Niw3ICsyMDg2LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImVudW1BdHRy
Iik7CiB9CkBAIC0yMTAyLDcgKzIxMDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRW51bUF0dHJHCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
akJ5dGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZUF0dHIiKTsKIH0KQEAgLTIx
MTgsNyArMjExOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0ckcK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqT2N0ZXRBdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CkBAIC0yMTM0LDcgKzIx
MzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyCiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialNob3J0QXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQpAQCAtMjE1MCw3ICsyMTUwLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cgogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDbGFt
cGVkU2hvcnRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIp
OwogfQpAQCAtMjE2Niw3ICsyMTY2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNsYW1wZWRTaAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdl
U2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKIH0K
QEAgLTIxODIsNyArMjE4Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZv
cmNlUmEKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQpAQCAtMjE5OCw3ICsyMTk4LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImxvbmdBdHRyIik7CiB9CkBAIC0yMjE0LDcgKzIyMTQsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQpAQCAtMjIzMCw3ICsyMjMwLDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9u
Z0xvbmdBdHRyIik7CiB9CkBAIC0yMjQ2LDcgKzIyNDYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRMCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJp
bmdBdHRyIik7CiB9CkBAIC0yMjYyLDcgKzIyNjIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJ1c3ZzdHJpbmdBdHRyIik7CiB9CkBAIC0yMjc4LDcgKzIyNzgsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAidGVzdE9iakF0dHIiKTsKIH0KQEAgLTIyOTQsNyArMjI5NCw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVGVz
dE51bGxhYmxlT2JqQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3ROdWxsYWJsZU9i
akF0dHIiKTsKIH0KQEAgLTIzMTAsNyArMjMxMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0TnVsbGEKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmll
bnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KHN0YXRlLCB0aGlzVmFs
dWUsICJsZW5pZW50VGVzdE9iakF0dHIiKTsKIH0KQEAgLTIzMjYsNyArMjMyNiw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGUKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5m
b3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5mb3JnZWFibGVB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRyIik7CiB9CkBAIC0y
MzQyLDcgKzIzNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFi
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmli
dXRlPGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsK
IH0KQEAgLTIzNTgsNyArMjM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVXN2c3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQpAQCAtMjM3NCw3ICsyMzc0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpC
eXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KQEAg
LTIzOTAsNyArMjM5MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3Ry
aW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogfQpAQCAtMjQwNiw3ICsy
NDA2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbgogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9CkBAIC0yNDIy
LDcgKzI0MjIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nCiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKIH0KQEAg
LTI0MzgsNyArMjQzOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJp
bmcKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInN0cmluZ09ialJlY29yZEF0dHIiKTsKIH0KQEAgLTI0NTQsNyArMjQ1NCw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmoKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRy
Iik7CiB9CkBAIC0yNDcwLDcgKzI0NzAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nTnVsCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXJ5
QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9iakRpY3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9iakRpY3Rpb25hcnlBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAiZGljdGlvbmFyeUF0dHIiKTsKIH0KQEAgLTI0ODYsNyArMjQ4Niw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFy
eUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxh
YmxlRGljdGlvbmFyeUF0dHIiKTsKIH0KQEAgLTI1MDIsNyArMjUwMiw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iaklt
cGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51
bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxl
bWVudGF0aW9uRW51bUF0dHIiKTsKIH0KQEAgLTI1MTgsNyArMjUxOCw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqWE1MT2JqQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgIlhNTE9iakF0dHIiKTsKIH0KQEAgLTI1MzQsNyArMjUzNCw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqQ3JlYXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY3JlYXRlIik7CiB9CkBA
IC0yNTUwLDcgKzI1NTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3JlYXRl
R2V0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiB9CkBAIC0yNTY2LDcgKzI1NjYs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiB9CkBAIC0yNTgyLDcgKzI1ODIs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQpAQCAtMjU5OCw3ICsyNTk4LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyIik7CiB9CkBAIC0yNjE0LDcgKzI2MTQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsK
IH0KQEAgLTI2MzAsNyArMjYzMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKIH0KQEAgLTI2NDYsNyArMjY0Niw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVT
VlVSTEF0dHIiKTsKIH0KQEAgLTI2NjIsNyArMjY2Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKIH0K
QEAgLTI2NzgsNyArMjY3OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyIik7CiB9CkBAIC0yNjk0LDcgKzI2OTQsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKIH0KQEAgLTI3MTAsNyAr
MjcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKIH0KQEAgLTI3MjcsNyAr
MjcyNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKICNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KQEAgLTI3NDUsNyArMjc0NSw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFy
cmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwogfQpAQCAtMjc2MSw3ICsy
NzYxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYQogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRl
ckV4Y2VwdGlvbiIpOwogfQpAQCAtMjc3Nyw3ICsyNzc3LDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0
cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0
aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMjc5Myw3
ICsyNzkzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0yODA5LDcgKzI4MDksNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsK
IH0KQEAgLTI4MjUsNyArMjgyNSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakN1c3Rv
bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQ3VzdG9tQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImN1c3RvbUF0dHIiKTsKIH0K
QEAgLTI4MzksNyArMjgzOSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0
b21BdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqT25mb29HZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJvbmZvbyIpOwogfQpAQCAtMjg1Myw3ICsyODUzLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dAogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgIm9ud2Via2l0Zm9vIik7CiB9CkBAIC0yODY3LDcgKzI4NjcsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogfQpAQCAtMjg4Myw3ICsyODgz
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxX
aXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRl
Iik7CiB9CkBAIC0yODk5LDcgKzI4OTksNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aENhbGxXCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUiKTsKIH0KQEAgLTI5MTgsNyArMjkxOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiB9CkBA
IC0yOTM0LDcgKzI5MzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KQEAgLTI5NTMsNyArMjk1Myw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0K
QEAgLTI5NzIsNyArMjk3Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXAKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KQEAgLTI5
OTEsNyArMjk5MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZSIpOwogfQpAQCAtMzAxMCw3ICszMDEwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNj
cmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogfQpAQCAtMzAyNyw3ICszMDI3
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcAogI2lmIEVOQUJM
RShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKIH0KQEAgLTMwNDYsNyArMzA0Niw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogfQpAQCAtMzA2NSw3
ICszMDY1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbgogI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7
CiB9CkBAIC0zMDg0LDcgKzMwODQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI0Iik7CiB9CkBAIC0zMTAxLDcgKzMxMDEs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQpAQCAtMzExOCw3ICszMTE4
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbgogI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjYiKTsKIH0KQEAgLTMxMzQsNyArMzEz
NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb24KIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJp
YnV0ZTEiKTsKIH0KQEAgLTMxNTMsNyArMzE1Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDYWNoZWRBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hl
ZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKIH0KQEAgLTMxNzIsNyArMzE3Miw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHQKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQW55QXR0cmlidXRl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYW55QXR0cmlidXRlIik7CiB9CkBAIC0zMTg4LDcg
KzMxODgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmliCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9iak9iamVjdEF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9iamVjdEF0dHJp
YnV0ZSIpOwogfQpAQCAtMzIwNCw3ICszMjA0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iak9iamVjdEF0dAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29udGVu
dERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudChFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJjb250ZW50RG9jdW1lbnQiKTsKIH0KQEAgLTMyMjAsNyArMzIyMCw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG8KIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0
YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAibXV0YWJsZVBvaW50Iik7CiB9CkBAIC0zMjM2LDcgKzMyMzYs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakltbXV0
YWJsZVBvaW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1tdXRhYmxlUG9pbnQiKTsKIH0K
QEAgLTMyNTIsNyArMzI1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbW11
dGFibGUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVy
cnkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
U3RyYXdiZXJyeUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KQEAg
LTMyNjgsNyArMzI2OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2Jl
cnIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
RGVzY3JpcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJkZXNjcmlwdGlvbiIpOwogfQpA
QCAtMzI4NCw3ICszMjg0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2Ny
aXB0aQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJZEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImlkIik7CiB9CkBAIC0zMzAwLDcgKzMzMDAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSWRHZXR0ZXIoCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpIYXNo
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakhhc2hH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJoYXNoIik7CiB9CkBAIC0zMzE2LDcgKzMzMTYsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
cmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTMzMzIsNyArMzMzMiw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3Vi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzM0OCw3ICszMzQ4LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRAogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9u
Z0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxq
c1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJu
dWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTMzNjQsNyArMzM2NCw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUwKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJv
b2xlYW5BdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAibnVsbGFibGVCb29sZWFuQXR0cmlidXRlIik7CiB9CkBAIC0zMzgwLDcgKzMzODAsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTMzOTYsNyArMzM5
Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVMKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVMb25nU2V0
dGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzQxMiw3ICszNDEyLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZSIpOwogfQpAQCAtMzQyOCw3ICszNDI4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSIpOwogfQpAQCAtMzQ0NCw3ICszNDQ0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlVQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlQnl0ZVN0cmluZ1NldHRh
YmxlQXR0cmlidXRlIik7CiB9CkBAIC0zNDYwLDcgKzM0NjAsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVCCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0
cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlU3Ry
aW5nVmFsdWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7
CiB9CkBAIC0zNDc2LDcgKzM0NzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
akF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZSIpOwogfQpAQCAt
MzQ5Miw3ICszNDkyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CkBAIC0zNTA4LDcgKzM1MDgsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicHV0Rm9y
d2FyZHNBdHRyaWJ1dGUiKTsKIH0KQEAgLTM1MjQsNyArMzUyNCw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTM1
NDAsNyArMzU0MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXIK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwogfQpAQCAtMzU1NCwyMiArMzU1
NCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0T2Jq
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0T2JqUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rl
c3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFko
IWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1NzgsMTIgKzM1NzcsMTEgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIAogICAgIHJldHVybiBkb21PYmplY3Qt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBKU1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOwogICAgIGF1dG8mIHN0YXRlID0gKnN0YXRlUG9p
bnRlcjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8gdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAg
ICAgVGVzdE9iajo6c2V0U3RhdGljU3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBA
IC0zNTkzLDkgKzM1OTEsOSBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3Ry
aW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialRlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIlRl
c3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzYwOSw5ICszNjA3LDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialRlc3RTdWJPYgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbnVtQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImVudW1BdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTM2MzAsOSArMzYyOCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpF
bnVtQXR0ckYKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpC
eXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiYnl0ZUF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJieXRlQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQnl0ZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjQ5LDkgKzM2
NDcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJGCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqT2N0
ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9j
dGV0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvY3RldEF0
dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
b2N0ZXRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0
dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjY4LDkgKzM2NjYsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialNob3J0QXR0ckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaG9ydEF0dHIiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic2hvcnRBdHRy
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjg3LDkgKzM2ODUsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
akNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiY2xhbXBlZFNob3J0QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTM3MDYsOSArMzcwNCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDbGFtcGVkU2gKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VT
aG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJlbmZvcmNlUmFuZ2VT
aG9ydEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuZm9yY2VS
YW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM3MjUsOSAr
MzcyMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmEKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5z
aWduZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ1bnNpZ25l
ZFNob3J0QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWdu
ZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNzQ0LDkgKzM3
NDIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxvbmdB
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxvbmdBdHRyIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9iakxvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibG9uZ0F0
dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzc2Myw5ICszNzYxLDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyRgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0
dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibG9uZ0xvbmdBdHRy
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
ImxvbmdMb25nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9u
Z0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzc4Miw5ICszNzgw
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNU
ZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKQEAgLTM4MDEsOSArMzc5OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpVbnNpZ25lZEwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpAQCAtMzgyMCw5ICszODE4LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alN0cmluZ0F0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInVzdnN0cmluZ0F0dHIi
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zODM5LDkgKzM4MzcsOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialRlc3RPYmpBdHRy
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RPYmpBdHRyIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAidGVz
dE9iakF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzg1OCw5ICszODU2LDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdAogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpU
ZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpUZXN0
TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVz
dE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInRlc3RO
dWxsYWJsZU9iakF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zODc3
LDkgKzM4NzUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9u
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImxlbmllbnRUZXN0T2JqQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHJGdW5jdGlvbiwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJldHVybkVhcmx5PihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImxlbmllbnRUZXN0T2JqQXR0ciIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQpAQCAtMzg5Niw5ICszODk0LDkgQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakxlbmllbnRUZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgInN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM5MTUsOSAr
MzkxMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHQKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFs
dWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zOTM0LDkgKzM5MzIs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJieXRl
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zOTUzLDkgKzM5
NTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0xvbmdSZWNvcmRBdHRy
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAic3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtMzk3Miw5ICszOTcwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialN0cmluZ0xvbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdM
b25nUmVjb3JkQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpV
c3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTM5OTEsOSArMzk4OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJp
bmcKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3Ry
aW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0
dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3Jk
QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9u
Z1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MDEwLDkgKzQw
MDgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nT2JqUmVjb3JkQXR0ciIpOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVl
LCAic3RyaW5nT2JqUmVjb3JkQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTQwMjksOSArNDAyNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdPYmoKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2Jq
UmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3Jk
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ciIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJzdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQwNDgsOSArNDA0Niw5IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakRpY3Rpb25hcnlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRGljdGlvbmFy
eUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZGljdGlvbmFy
eUF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRGljdGlvbmFyeUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00
MDY3LDkgKzQwNjUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRGljdGlvbmFy
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlRGlj
dGlvbmFyeUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVs
bGFibGVEaWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibnVsbGFibGVEaWN0aW9uYXJ5QXR0ciIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQwODYsOSArNDA4NCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUQKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2Jq
SW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2Jq
SW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRhdGlvbkVudW1BdHRy
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJpbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQpAQCAtNDEwNyw5ICs0MTA1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakltcGxlbWVudAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1M
T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlhNTE9iakF0dHIiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCkBAIC00MTI2LDkgKzQxMjQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqWE1MT2JqQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVh
dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJjcmVhdGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAiY3JlYXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
cmVhdGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MTQ1LDkgKzQxNDMsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVuCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVm
bGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQx
NjQsOSArNDE2Miw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWQK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNW
U3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZs
ZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDE4Myw5ICs0MTgxLDkgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1
ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpAQCAtNDIwMiw5ICs0MjAwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2ln
bmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQyMjEsOSArNDIx
OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC00MjQwLDkgKzQyMzgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVJMQXR0
ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTQyNTksOSArNDI1Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0
ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZV
UkxBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtNDI3OCw5ICs0Mjc2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Mjk3LDkgKzQyOTUsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MzE2LDkg
KzQzMTQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAot
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVk
Q3VzdG9tQm9vbGVhbkF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNDMzNSw5ICs0MzMzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
VVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0
dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MzU1LDkgKzQzNTMs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVl
LCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTQzNzUsOSArNDM3Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpFbmFibGVkQXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialR5cGVk
QXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidHlwZWRBcnJheUF0dHIiKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ0
eXBlZEFycmF5QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Mzk0LDkgKzQz
OTIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJhCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
YXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTQ0MTMsOSArNDQxMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0
aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmli
dXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoU2V0
dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJhdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9u
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0
dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDQzMiw5ICs0
NDMwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ0NTEsOSArNDQ0OSw5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC00NDcwLDkgKzQ0NjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiY3VzdG9tQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY3VzdG9tQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTQ0ODYsOSArNDQ4NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
dXN0b21BdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqT25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib25mb28i
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqT25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJvbmZvbyIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTAyLDkgKzQ1MDAsOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqT25mb29GdW5jCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9ud2Via2l0Zm9vIik7CisgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9u
d2Via2l0Zm9vRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAib253ZWJraXRmb28i
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDUxOCw5ICs0NTE2LDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0ZgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDUzNyw5ICs0NTM1LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTQ1NTYsOSArNDU1NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFcKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTc4LDkg
KzQ1NzYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTk3LDkgKzQ1OTUsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NDYxOSw5ICs0NjE3LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NjQxLDkgKzQ2MzksOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ2NjMsOSArNDY2MSw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Njg1LDkgKzQ2ODMsOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRD
YWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVl
LCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFj
a0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ3MDUsOSArNDcw
Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIxRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRy
MSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTQ3MjYsOSArNDcyNCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIi
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NzQ3LDkgKzQ3NDUsOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25k
aXRpb25hbEF0dHIzIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtNDc2OCw5ICs0NzY2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRp
dGlvbmFsQXR0cjQiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDc4Niw5ICs0Nzg0LDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24x
KSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCB2YWx1ZSwgImNvbmRpdGlvbmFsQXR0cjUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTQ4MDQsOSArNDgwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NkNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNiIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJj
b25kaXRpb25hbEF0dHI2Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC00ODIxLDkgKzQ4MTksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJv
b2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJhbnlBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYW55QXR0cmlidXRlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCkBAIC00ODQwLDkgKzQ4MzgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQW55QXR0cmliCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpP
YmplY3RBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9iamVjdEF0dHJp
YnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvYmplY3RBdHRy
aWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC00ODU5LDkgKzQ4NTcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0
QXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibXV0YWJsZVBvaW50Iik7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCkBAIC00ODc4LDkgKzQ4NzYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTXV0YWJsZVBvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbW11
dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltbXV0YWJsZVBvaW50Iik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
aW1tdXRhYmxlUG9pbnQiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklt
bXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDg5Nyw5ICs0
ODk1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpT
dHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpTdHJhd2JlcnJ5RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0
cmF3YmVycnkiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alN0cmF3YmVycnlGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00OTE2LDkgKzQ5
MTQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpJZChFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iaklkRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImlkIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iaklkRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAiaWQiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aklkRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDkzNSw5ICs0OTMzLDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3RpbwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2Jq
UmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJl
cGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
InJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTQ5NTEsOSArNDk0OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZXBs
YWNlYWIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00OTcwLDkgKzQ5NjgsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
ak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ5ODksOSArNDk4Nyw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVMKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NTAwOCw5ICs1MDA2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
VQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlQnl0
ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJs
ZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm51bGxh
YmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTUwMjcsOSArNTAyNSw5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJp
bmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdW
YWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5n
VmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZVN0cmluZ1Zh
bHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNTA0Niw5ICs1MDQ0LDkg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlUwogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
ImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTUwNjcsOSArNTA2NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRy
aWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJwdXRGb3J3YXJkc0F0dHJp
YnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MDg3LDkgKzUwODUs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJk
c051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicHV0
Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTUxMDksOSArNTEwNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmlu
Z2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MTQxLDE0ICs1MTM5LDE0IEBA
IEpTVmFsdWUgSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0KIH0KIAogI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24xKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTUxNTYsMjIgKzUxNTQsMjIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFy
YW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMihFeGVjU3Rh
dGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJDYWxsZXI+KHN0YXRlLCAi
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTE3OSwxNSArNTE3NywxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTIwNywxNCArNTIwNSwxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiB9CiAjZW5kaWYKIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRT
cGVjaWZpY01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
b3JsZFNwZWNpZmljTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldvcmxkU3BlY2lmaWNNZXRob2RDYWxsZXI+KHN0YXRlLCAid29ybGRTcGVjaWZpY01ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldv
cmxkU3BlY2lmaWNNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUyMjIsMzUg
KzUyMjAsMzUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgaW1wbC53b3JsZFNwZWNpZmljTWV0aG9kKFdURk1vdmUodGVzdFBhcmFtKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRN
ZXRob2RDYWxsZXI+KHN0YXRlLCAidm9pZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwudm9pZE1l
dGhvZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0
aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZvaWRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0Nh
bGxlcj4oc3RhdGUsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdp
dGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwpAQCAtNTI1OCwzOCArNTI1NiwzOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxv
bmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJ2b2lk
TWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnZvaWRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxv
bmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkJ5dGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQnl0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZChFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kQ2FsbGVyPihzdGF0ZSwg
ImJ5dGVNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25C
eXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
Qnl0ZT4oaW1wbC5ieXRlTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExCeXRlPihpbXBs
LmJ5dGVNZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3ND
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5
dGVNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0NhbGxlcj4o
c3RhdGUsICJieXRlTWV0aG9kV2l0aEFyZ3MiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNTI5NywzNyArNTI5NSwzNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJ5dGVBcmcg
PSBjb252ZXJ0PElETEJ5dGU+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJieXRlTWV0aG9k
V2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExCeXRlPihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGJ5dGVBcmcpLCBXVEZN
b3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEJ5dGU+KGltcGwuYnl0ZU1ldGhvZFdpdGhB
cmdzKFdURk1vdmUoYnl0ZUFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PY3RldE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PY3RldE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyPihz
dGF0ZSwgIm9jdGV0TWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMT2N0ZXQ+KGltcGwub2N0ZXRNZXRob2QoKSkpOworICAgIHJldHVybiB0b0pTPElE
TE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0
TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0
aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRo
b2RXaXRoQXJnc0NhbGxlcj4oc3RhdGUsICJvY3RldE1ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9jdGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRo
QXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTMzNSwzNyArNTMzMywzNyBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIG9jdGV0QXJnID0gY29udmVydDxJRExPY3RldD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRv
IHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmpBcmcgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJU
ZXN0T2JqZWN0IiwgIm9jdGV0TWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExPY3RldD4oaW1wbC5vY3RldE1ldGhvZFdpdGhB
cmdzKFdURk1vdmUob2N0ZXRBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElE
TE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShvY3RldEFyZyksIFdURk1v
dmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2Qo
RXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkxvbmdNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTG9uZ01ldGhvZENhbGxlcj4oc3RhdGUsICJsb25nTWV0aG9kIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxv
bmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwubG9uZ01ldGhvZCgpKSk7
CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kKCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25M
b25nTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkxvbmdNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxsZXI+KHN0YXRlLCAibG9uZ01ldGhvZFdpdGhBcmdz
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25n
TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUzNzMsMzcgKzUz
NzEsMzcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9i
akFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAyLCAib2Jq
QXJnIiwgIlRlc3RPYmplY3QiLCAibG9uZ01ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9k
V2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9K
UzxJRExMb25nPihpbXBsLmxvbmdNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZN
b3ZlKHN0ckFyZyksICpvYmpBcmcpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm9iak1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5vYmpNZXRob2QoKSkpOworICAgIHJldHVybiB0
b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwub2JqTWV0aG9kKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RX
aXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzQ2Fs
bGVyPihzdGF0ZSwgIm9iak1ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhB
cmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC01NDExLDM3ICs1NDA5LDM3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0Fy
ZyA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxU
ZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9iak1ldGhv
ZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5vYmpNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0
ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShs
b25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVN
ZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25V
bmZvcmdlYWJsZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iaklu
c3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhv
ZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqSW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0
aG9kQ2FsbGVyPihzdGF0ZSwgInVuZm9yZ2VhYmxlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFi
bGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwudW5mb3JnZWFi
bGVNZXRob2QoKSkpOworICAgIHJldHVybiB0b0pTPElETExvbmc+KGltcGwudW5mb3JnZWFibGVN
ZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aEFy
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1Ry
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU0
NDksMTkgKzU0NDcsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhBcmdUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoYXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1l
dGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
WFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXJDYWxsZXI+KHN0YXRl
LCAibWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTU0NjksNDIgKzU0NjcsNDIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURM
WFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJyZXNvbHZl
ciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAi
WFBhdGhOU1Jlc29sdmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlcigqcmVz
b2x2ZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3Ry
aW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRo
b2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJp
bmdNZXRob2RDYWxsZXI+KHN0YXRlLCAibnVsbGFibGVTdHJpbmdNZXRob2QiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TnVsbGFibGVTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdN
ZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxs
YWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdNZXRob2QoKSkp
OworICAgIHJldHVybiB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1w
bC5udWxsYWJsZVN0cmluZ01ldGhvZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0aWNNZXRo
b2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
KCpzdGF0ZSwgVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoKSkpOworICAgIHJl
dHVybiB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgVGVzdE9iajo6bnVs
bGFibGVTdHJpbmdTdGF0aWNNZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lh
bE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZENhbGxlcj4o
c3RhdGUsICJudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVT
dHJpbmdTcGVjaWFsTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3Bl
Y2lhbE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTUxMiwxOCArNTUxMCwx
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFi
bGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhv
ZChXVEZNb3ZlKGluZGV4KSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRl
LCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhFbnVtQXJn
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NTMzLDIyICs1NTMx
LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBhdXRv
IGVudW1BcmdWYWx1ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBUZXN0T2Jq
OjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlRW51bWVy
YXRpb248VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGlv
bmFsVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigp
KTsKICAgICBlbnVtQXJnID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpOwogICAgIGltcGwubWV0aG9k
V2l0aEVudW1BcmcoZW51bUFyZyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0
YW5kYWxvbmVFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVF
bnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJn
Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFN0YW5kYWxvbmVFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NTU4LDIy
ICs1NTU2LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBU
ZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uIGVudW1Bcmc7CiAgICAgYXV0byBvcHRpb25hbFZhbHVl
ID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPigqc3RhdGUsIGVu
dW1BcmdWYWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvcHRpb25hbFZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyIsIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXM8VGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbj4oKSk7CiAgICAgZW51bUFyZyA9
IG9wdGlvbmFsVmFsdWUudmFsdWUoKTsKICAgICBpbXBsLm1ldGhvZFdpdGhTdGFuZGFsb25lRW51
bUFyZyhlbnVtQXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxF
bnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0NhbGxlcj4oc3RhdGUsICJt
ZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVu
dW1BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTU4MiwyMiArNTU4MCwyMiBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgc3RkOjpvcHRpb25hbDxUZXN0T2Jq
OjpFbnVtVHlwZT4gZW51bUFyZzsKICAgICBpZiAoIWVudW1BcmdWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CiAgICAgICAgIGVudW1BcmcgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
Pigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFlbnVtQXJnKSkKICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVt
QXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CiAg
ICAgfQogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhlbnVtQXJnKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1B
cmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmRE
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcj4oc3RhdGUsICJtZXRo
b2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwpAQCAtNTYwOCwyMyArNTYwNiwyMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgICAgIGVudW1BcmcgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW51
bVZhbHVlMTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBvcHRpb25hbFZhbHVlID0gcGFyc2VF
bnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1
bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRl
c3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSIsIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwogICAgICAgICBl
bnVtQXJnID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpOwogICAgIH0KICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoZW51bUFyZyk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3ND
YWxsZXI+KHN0YXRlLCAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTU2MzIsMjAgKzU2MzAsMjAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBb
XShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIs
ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgIlRlc3RPYmoiKTsgfSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3Rh
dGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
KFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5n
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhVU1ZTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhVU1ZTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoVVNWU3Ry
aW5nQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNTY1MywxOSArNTY1MSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVVNW
U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnKFdURk1vdmUoc3Ry
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2Fs
bGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01
NjczLDE5ICs1NjcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExVU1ZTdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJp
bmdBcmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNW
U3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyPihzdGF0ZSwg
Im1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NjkzLDE5ICs1NjkxLDE5IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhC
eXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZyhFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdDYWxsZXI+KHN0YXRlLCAibWV0
aG9kV2l0aEJ5dGVTdHJpbmdBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKQEAgLTU3MTMsMTkgKzU3MTEsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIg
PSBjb252ZXJ0PElETEJ5dGVTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhCeXRlU3Ry
aW5nQXJnKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51
bGxhYmxlQnl0ZVN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVs
bGFibGVCeXRlU3RyaW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5n
QXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
dWxsYWJsZUJ5dGVTdHJpbmdBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE51bGxhYmxlQnl0
ZVN0cmluZ0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU3MzMsMTkgKzU3MzEsMTkgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJn
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmlu
Z0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC01NzUzLDE5ICs1NzUxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0g
Y29udmVydDxJRExCeXRlU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0
aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoc3Ry
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFs
aXplZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQ2FsbGVyPihzdGF0ZSwgInNlcmlh
bGl6ZWRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2VyaWFsaXplZFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NzczLDE5
ICs1NzcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VyaWFsaXplZEFyZyA9IGNvbnZlcnQ8SURMU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShXVEZNb3ZlKHNlcmlhbGl6ZWRBcmcp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhSZWNvcmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZENhbGxlcj4oc3RhdGUsICJt
ZXRob2RXaXRoUmVjb3JkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NTc5Myw5MyArNTc5MSw5MyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlY29yZFBhcmFtZXRlciA9IGNvbnZl
cnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhSZWNvcmQoV1RGTW92ZShyZWNvcmRQYXJhbWV0ZXIpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25D
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxl
cj4oc3RhdGUsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RX
aXRoRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b25SZXR1cm5pbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uUmV0dXJuaW5nTG9uZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xv
bmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4
Y2VwdGlvblJldHVybmluZ0xvbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aEV4Y2VwdGlvblJl
dHVybmluZ0xvbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmdDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPigqc3RhdGUs
IHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoKSkpOwor
ICAgIHJldHVybiB0b0pTPElETExvbmc+KCpzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RX
aXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZygpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
blJldHVybmluZ09iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhj
ZXB0aW9uUmV0dXJuaW5nT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJu
aW5nT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aEV4
Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0
dXJuaW5nT2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1
cm5pbmdPYmplY3RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QoKSkp
OworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlv
blJldHVybmluZ09iamVjdCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2FsbGVyPihzdGF0ZSwgImN1c3RvbU1ldGhvZCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DdXN0b21NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5jdXN0b21NZXRob2QoKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmN1
c3RvbU1ldGhvZCgqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RX
aXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdz
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdp
dGhBcmdzQ2FsbGVyPihzdGF0ZSwgImN1c3RvbU1ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1
c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhB
cmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2RXaXRoQXJncygqc3RhdGUpKTsKKyAgICByZXR1cm4g
Y2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3MoKnN0YXRlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0
ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Qcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RDYWxsZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KHN0YXRlLCAicHJpdmF0ZU1ldGhvZCIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU4ODcsMTggKzU4ODUsMTggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBhcmd1bWVudCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZh
dGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZENhbGxlcj4o
c3RhdGUsICJwdWJsaWNBbmRQcml2YXRlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZh
dGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTkwNiwxOCArNTkwNCwxOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1w
bC5wdWJsaWNBbmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExET01T
dHJpbmc+KCpzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1l
bnQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQ2FsbGVyPihzdGF0ZSwgImFkZEV2ZW50TGlz
dGVuZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25B
ZGRFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01OTI1LDIzICs1
OTIzLDIzIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRMaXN0ZW5lcjxKU0V2ZW50TGlz
dGVuZXI+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdXNl
Q2FwdHVyZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMikp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuYWRk
RXZlbnRMaXN0ZW5lcihXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgV1RGTW92ZSh1
c2VDYXB0dXJlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lckNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVF
dmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50
TGlzdGVuZXJDYWxsZXI+KHN0YXRlLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25S
ZW1vdmVFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVu
ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU5NDksMjY4ICs1OTQ3LDI2OCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8g
bGlzdGVuZXIgPSBjb252ZXJ0PElETEV2ZW50TGlzdGVuZXI8SlNFdmVudExpc3RlbmVyPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBj
b252ZXJ0PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnJlbW92ZUV2ZW50TGlz
dGVuZXIoV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShsaXN0ZW5lciksIFdURk1vdmUodXNlQ2FwdHVy
ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRl
Vm9pZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lk
Q2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZVZvaWQiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlVm9pZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpbXBsLndpdGhTY3JpcHRTdGF0ZVZvaWQoKnN0YXRlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVP
YmooRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXI+KHN0YXRlLCAid2l0aFNj
cmlwdFN0YXRlT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZU9iaigqc3RhdGUpKSk7CisgICAg
cmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0YXRlKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
U3RhdGVWb2lkRXhjZXB0aW9uQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNl
cHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhTY3JpcHRTdGF0
ZVZvaWRFeGNlcHRpb24oKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24o
KnN0YXRlKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Q2FsbGVyPihzdGF0
ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKmNvbnRleHQpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZShF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZSgqc3RhdGUsICpjb250ZXh0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
aWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0
YXRlLCAqY29udGV4dCkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgKmNvbnRleHQpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0NhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0
ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCpzdGF0ZSwgKmNvbnRleHQpKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxU
ZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAqY29u
dGV4dCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0NhbGxlcj4o
c3RhdGUsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRB
cmd1bWVudHMoc3RhdGUsIDApKTsKICAgICBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2soV1RGTW92ZShzY3JpcHRBcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnQoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Q2FsbGVyPihzdGF0ZSwgIndpdGhEb2N1
bWVudEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKICAgICBpbXBs
LndpdGhEb2N1bWVudEFyZ3VtZW50KGRvY3VtZW50KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlckRv
Y3VtZW50QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFy
Z3VtZW50Q2FsbGVyPihzdGF0ZSwgIndpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50Iik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhD
YWxsZXJEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvKiBkb2N1bWVudCA9IGNh
bGxlckRPTVdpbmRvdyhzdGF0ZSkuZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLndpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCpk
b2N1bWVudCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhD
YWxsZXJXaW5kb3dBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
Q2FsbGVyV2luZG93QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50Q2FsbGVyPihzdGF0ZSwgIndpdGhDYWxsZXJX
aW5kb3dBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnRDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
bXBsLndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudChjYWxsZXJET01XaW5kb3coc3RhdGUpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
cmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
cmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmcoV1RGTW92ZShvcHQpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdB
bmREZWZhdWx0VmFsdWVDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVm
YXVsdFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1
ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFs
dWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyA2NjYgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShvcHQpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9w
dGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02MjE4LDIxICs2MjE2
LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlv
bmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUo
b3B0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5k
VHdvT3B0aW9uYWxBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFs
QXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFy
Z3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0
aW9uYWxBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02MjQwLDUwOSArNjIzOCw1
MDkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
YXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlv
bmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvcHQyID0g
c3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+
KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdDEpLCBX
VEZNb3ZlKG9wdDIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmco
KSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxV
U1ZTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJp
bmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMVVNWU3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcoV1RGTW92ZShzdHIp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSA6IHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEF0b21pY1N0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0FuZERlZmF1bHRWYWx1ZUNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdB
bmREZWZhdWx0VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVm
YXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Fu
ZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikgOiBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZh
bHVlKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0Fu
ZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhP
cHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQXRvbWlj
U3RyaW5nKCJmb28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0
YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVs
bENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbENh
bGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0
ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChXVEZN
b3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0lzVW5kZWZpbmVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdJc1VuZGVmaW5lZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNV
bmRlZmluZWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNVbmRlZmluZWQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSXNVbmRlZmluZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSXNVbmRlZmluZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKFdURk1vdmUo
c3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3Ry
aW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
QXRvbWljU3RyaW5nSXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJp
bmdJc051bGwoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhP
cHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmdJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
QXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1
bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxBdG9taWNTdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0lzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0
eVN0cmluZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3Ry
aW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQo
KSA/IGVtcHR5U3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJp
bmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNW
U3RyaW5nSXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5n
SXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1l
dGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmco
KSA6IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJp
bmdJc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJ
c0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXI+KHN0YXRlLCAi
bWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBl
bXB0eUF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50
b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3Ry
aW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRG91YmxlSXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5DYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERv
dWJsZUlzTmFOKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTihFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3Vi
bGVJc05hTkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1i
ZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEZsb2F0SXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsb2F0SXNOYU4oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTkNhbGxlcj4oc3RhdGUsICJtZXRob2RX
aXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0
SXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKFdU
Rk1vdmUobnVtYmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
TG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0NhbGxlcj4oc3Rh
dGUsICJtZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxMb25nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNV
bmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8SURMTG9uZ0xv
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhXVEZNb3ZlKG51
bWJlcikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25n
SXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9u
Z0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9u
Z0xvbmdJc1plcm9DYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1pl
cm8iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm9DYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm9DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNp
Z25lZExvbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PigpIDogY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhXVEZNb3ZlKG51bWJlcikpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJ
c1plcm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
VW5zaWduZWRMb25nTG9uZ0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWdu
ZWRMb25nTG9uZ0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvQ2FsbGVyPihzdGF0ZSwg
Im1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxTZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFNlcXVlbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRp
b25hbFNlcXVlbmNlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0
ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKFdURk1vdmUoYXJyYXkpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U2VxdWVuY2VJc0VtcHR5Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Iik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYXJy
YXkgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5KFdURk1vdmUoYXJyYXkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5DYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEJvb2xlYW4oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4o
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQm9vbGVhbkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBiID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGJvb2w+KCkgOiBjb252ZXJ0
PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW4oV1RGTW92ZShiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxC
b29sZWFuSXNGYWxzZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZUNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29s
ZWFuSXNGYWxzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFu
SXNGYWxzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBiID0gY29udmVydDxJRExCb29sZWFuPigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShXVEZN
b3ZlKGIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFueShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBbnlDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMQW55Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBbnkoV1RGTW92ZShhKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Q2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbE9iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxPYmplY3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsT2JqZWN0Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbE9i
amVjdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3RDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGEgPSBz
dGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4+KCkgOiBjb252ZXJ0PElETE9iamVjdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KFdURk1vdmUoYSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlckNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBl
cihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxl
V3JhcHBlckNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlckNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdy
YXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcihXVEZN
b3ZlKG9iaikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxh
YmxlV3JhcHBlcklzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGxDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbENhbGxlcj4o
c3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJs
ZVdyYXBwZXJJc051bGwiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlcklzTnVsbChXVEZNb3ZlKG9iaikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
WFBhdGhOU1Jlc29sdmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcj4oc3RhdGUsICJtZXRob2RX
aXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
WFBhdGhOU1Jlc29sdmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQ
YXRoTlNSZXNvbHZlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAicmVz
b2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIi
LCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKFdU
Rk1vdmUocmVzb2x2ZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxSZWNvcmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmQoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxsZXI+KHN0YXRlLCAibWV0
aG9kV2l0aE9wdGlvbmFsUmVjb3JkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29y
ZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gcmVjb3JkID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBz
dGQ6Om51bGxvcHQgOiBjb252ZXJ0PElETE51bGxhYmxlPElETFJlY29yZDxJRExET01TdHJpbmcs
IElETExvbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsUmVjb3JkKFdURk1vdmUocmVjb3JkKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC02NzUwLDE5ICs2NzQ4LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gY2FsbGJhY2sgPSBj
b252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxi
YWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7IH0pOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aENh
bGxiYWNrQXJnKGNhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJn
QW5kQ2FsbGJhY2tBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2Fs
bGJhY2tBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY3NzAsMzkgKzY3NjgsMzkg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxs
YmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0
ZSwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhOb25DYWxs
YmFja0FyZ0FuZENhbGxiYWNrQXJnIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmcoV1RGTW92ZShub25DYWxsYmFjayksIGNhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
Y2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVz
dENhbGxiYWNrSW50ZXJmYWNlPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwg
c2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoV1RGTW92ZShj
YWxsYmFjaykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0
aW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFy
ZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdD
YWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY4
MTAsMTkgKzY4MDgsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRN
dXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tG
dW5jdGlvbkFyZyhjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0Nh
bGxlcj4oc3RhdGUsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9u
QXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rp
b25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2Fs
bGJhY2tGdW5jdGlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNjgzMCw0MyAr
NjgyOCw0MyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxJRExMb25nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNU
ZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJv
cihzdGF0ZSwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBjYWxsYmFj
ay5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9u
YWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRp
b25hbEFyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlv
bmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxB
cmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRp
b25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2Jq
ZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmciKTsgfSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxsYmFj
a0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAi
Y2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRp
b25hbEFyZyIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhXVEZN
b3ZlKGNhbGxiYWNrKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxi
YWNrQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjg3NCw3NSArNjg3Miw3NSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RD
YWxsYmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIs
ICJUZXN0T2JqZWN0IiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBUZXN0T2JqOjpzdGF0aWNN
ZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2Qx
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRp
dGlvbmFsTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhv
ZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxN
ZXRob2QxQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsTWV0aG9kMSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigq
c3RhdGUsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5jb25kaXRpb25hbE1ldGhvZDEoKSk7CiB9CiAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b25kaXRpb25hbE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsTWV0aG9kMiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsTWV0aG9kMigpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2FsbGVyPihzdGF0
ZSwgImNvbmRpdGlvbmFsTWV0aG9kMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDNDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBs
LmNvbmRpdGlvbmFsTWV0aG9kMygpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY5NTAsMjEgKzY5NDgsMjEgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxU
ZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9h
ZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUoc3Ry
QXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkNhbGxlcj4o
c3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC02OTcyLDIxICs2OTcwLDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0p
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gbG9u
Z0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxp
bnQzMl90PigpIDogY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgxKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZChXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhFeGVj
U3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNjk5NCwxOSArNjk5
MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJnKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0
KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNENhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVk
TWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDE0LDE5
ICs3MDEyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShsb25nQXJnKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q1KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNUNhbGxlcj4oc3RhdGUsICJvdmVybG9h
ZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Q2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q1Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDM0
LDE5ICs3MDMyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxi
YWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRN
dXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2sucmVsZWFz
ZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDZDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNkNh
bGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q2Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2Q2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC03MDU0LDE5ICs3MDUyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbGlzdEFy
ZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPERPTVN0cmluZ0xpc3Q+Pj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgMCwgImxpc3RBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwg
IkRPTVN0cmluZ0xpc3QiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobGlzdEFyZykpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Q2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDdDYWxsZXI+KHN0YXRlLCAib3Zl
cmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NzA3NCwxOSArNzA3MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q4KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOChFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOENhbGxlcj4oc3RhdGUsICJvdmVybG9h
ZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4Q2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q4Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDk0
LDE5ICs3MDkyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVy
bG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKCpvYmpBcmcpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Q2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kOShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlDYWxsZXI+KHN0YXRlLCAib3Zl
cmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NzExNCwxOSArNzExMiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPERPTVdpbmRvdz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBb
XShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kIiwgIkRPTVdpbmRvdyIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoKndpbmRv
dyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDEwKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTAoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQ2FsbGVy
PihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEw
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNzEzNCwxOSArNzEzMiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJn
ID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMTEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXI+KHN0YXRlLCAi
b3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC03MTU0LDE5ICs3MTUyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0
PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNhbGxlcj4oc3RhdGUsICJvdmVybG9h
ZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTcx
NzQsMzAgKzcxNzIsMzAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxMyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0NhbGxlcj4oc3Rh
dGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
YmxvYkFyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPEJsb2I+Pigq
c3RhdGUsIDApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGJsb2JBcmdzLmFyZ3VtZW50cy52YWx1ZSgp
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTcyNDMs
MTQgKzcyNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMShFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFs
UGFyYW1ldGVyMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFy
YW1ldGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIx
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MjU4LDIxICs3MjU2LDIxIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRv
IG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
MSwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQ
YXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIoV1RGTW92ZShzdHJBcmcpLCBXVEZNb3ZlKG9iakFyZykpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMihF
eGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjIoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25h
bFBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1l
dGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFy
YW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzI4MCwxNCArNzI3OCwxNCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIGxvbmdBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzMxMiwxNCArNzMxMCwxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIGFyZ3NDb3VudCA8
IDEgPyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNo
aW5nVW5pb24xKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5p
b24xKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1l
dGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNzMyNywxOSArNzMyNSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZl
cnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhE
aXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNo
aW5nVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5p
b24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1l
dGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNzM0NywxMiArNzM0NSwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExM
b25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1Vu
aW9uKFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhEaXN0aW5ndWlzaGluZ1VuaW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rp
bmd1aXNoaW5nVW5pb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTczNzEsMTQgKzczNjksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
MkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9u
czFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMShFeGVjU3RhdGUqIHN0
YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNo
aW5nVW5pb25zMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlz
aGluZ1VuaW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGlu
Z1VuaW9uczFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGlu
Z3Vpc2hpbmdVbmlvbnMxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03Mzg2LDE5ICs3
Mzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGlu
Z1VuaW9ucyhXVEZNb3ZlKG9iamVjdE9yTm9kZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJE
aXN0aW5ndWlzaGluZ1VuaW9uczJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5p
b25zMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMy
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0
aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC03NDA2LDEyICs3NDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3RyaW5nLCBJRExM
b25nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdp
dGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoV1RGTW92ZSh2YWx1ZSkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyhFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc0MzIsMTQgKzc0MzAsMTQgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5n
dWlzaGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlz
aGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVyPihzdGF0ZSwgIm92
ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc0NDcsMjEgKzc0NDUsMjEgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBv
YmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURM
SW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9i
amVjdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAib2Jq
ZWN0IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGlu
Z1VuaW9uIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpLCAqb2JqZWN0KTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGlu
Z3Vpc2hpbmdVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vp
c2hpbmdVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcj4oc3RhdGUsICJv
dmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC03NDY5LDE0ICs3NDY3LDE0IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
b2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElE
TEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBu
b2RlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAibm9k
ZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbiIsICJUZXN0Tm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSksICpub2RlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc0OTIsMTQgKzc0OTAsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBhcmdzQ291bnQgPCAyID8gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdp
dGhOdWxsYWJsZVVuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjEoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGVVbmlvbjFDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZFdpdGhOdWxsYWJsZVVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzUw
NywxOSArNzUwNSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVz
dE5vZGU+Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51
bGxhYmxlVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoTnVsbGFibGVVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxh
YmxlVW5pb24yQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24iKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoTnVsbGFibGVVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc1
MjcsMTIgKzc1MjUsMTIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMTG9uZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oV1RGTW92ZShpbmRleCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC03NTUzLDMyICs3NTUxLDMyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdp
dGhPcHRpb25hbFVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxV
bmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQ2Fs
bGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24iKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0
aW9uYWxVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyB0cnVlIDogY29udmVydDxJRExVbmlvbjxJRExET01T
dHJpbmcsIElETEJvb2xlYW4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVy
bG9hZFdpdGhPcHRpb25hbFVuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlv
bjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bFVuaW9uMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uMkNhbGxlcj4oc3RhdGUsICJvdmVybG9hZFdpdGhPcHRpb25hbFVu
aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC03NTg2LDEyICs3NTg0LDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0
PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uKFdURk1v
dmUoaW5kZXgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNzYxMywxNCArNzYxMSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1
aXNoaW5nUGFyYW1ldGVyMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVy
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjEoRXhlY1N0YXRl
KiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9u
RGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0aE51bGxh
YmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKQEAgLTc2MjgsMjEgKzc2MjYsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmog
PSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1
aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBub2RlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVy
bG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKFdURk1vdmUob2JqKSwg
Km5vZGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlz
dGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJh
bWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMihFeGVj
U3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjIoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRXaXRo
TnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdp
dGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzY1MCwxNCArNzY0OCwxNCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IG5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9u
RGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hp
bmdQYXJhbWV0ZXIoV1RGTW92ZShub2RlKSwgV1RGTW92ZShpbmRleCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03Njc0LDM0ICs3NjcyLDM0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gYXJn
c0NvdW50IDwgMiA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8gYXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4o
VGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RGTW92ZShhcmcpKSkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExM
b25nPihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3ZlKGFyZykpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uQ2xhc3NNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RPYmo6OmNsYXNzTWV0aG9kMihzdGF0ZSkpOworICAgIHJldHVybiBKU1Rlc3RPYmo6OmNsYXNz
TWV0aG9kMihzdGF0ZSk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc3MDksMTUgKzc3MDcsMTUgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZDEoV1RGTW92ZShhcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNTdGF0ZSogc3RhdGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzcy
NSwxNSArNzcyMywxNSBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUodHlwZSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzc1MywxNCArNzc1MSwxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiB9CiAjZW5kaWYKIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NN
ZXRob2RXaXRoQ2xhbXBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENhbGxlcj4oc3RhdGUsICJjbGFzc01ldGhvZFdp
dGhDbGFtcCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
Nzc2OCwyMSArNzc2NiwyMSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8
SURMVW5zaWduZWRTaG9ydD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PElE
TFVuc2lnbmVkTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92
ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRo
b2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVyPihzdGF0ZSwgImNsYXNzTWV0aG9kV2l0aEVuZm9yY2VS
YW5nZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC03NzkwLDIxICs3Nzg4LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0
ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJn
c0xvbmcgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmNs
YXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUo
b2JqQXJnc0xvbmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRM
b25nU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25n
U2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25n
U2VxdWVuY2VDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTc4MTIsMTkgKzc4MTAsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1bnNpZ25lZExvbmdT
ZXF1ZW5jZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKFdU
Rk1vdmUodW5zaWduZWRMb25nU2VxdWVuY2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdBcnJheUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blN0cmluZ0FycmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJzdHJpbmdBcnJheUZ1bmN0
aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzgzMiwx
OCArNzgzMCwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpz
dGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmlu
Z0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21T
dHJpbmdMaXN0RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAiZG9tU3Ry
aW5nTGlzdEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTc4NTEsMTggKzc4NDksMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZXMgPSBjb252
ZXJ0PElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgInZhbHVlcyIs
ICJUZXN0T2JqZWN0IiwgImRvbVN0cmluZ0xpc3RGdW5jdGlvbiIsICJET01TdHJpbmdMaXN0Iik7
IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxET01TdHJp
bmdMaXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMpKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxE
T01TdHJpbmdMaXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVT
ZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlQ2Fs
bGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC03ODcwLDIxICs3ODY4LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlB
cmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoV1RGTW92ZShhcnJh
eUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWRDYWxsZXI+KHN0YXRlLCAiZ2V0RWxlbWVudEJ5SWQiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTc4OTIsMzMgKzc4OTAsMzMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBlbGVtZW50
SWQgPSBBdG9taWNTdHJpbmcoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0
YXRlKS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhzdGF0ZSkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxFbGVtZW50Pj4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUo
ZWxlbWVudElkKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pj4oKnN0
YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RG
TW92ZShlbGVtZW50SWQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdE
b2N1bWVudChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRDYWxsZXI+KHN0YXRlLCAiZ2V0U1ZHRG9j
dW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0
U1ZHRG9jdW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgq
c3RhdGUsIGltcGwuZ2V0U1ZHRG9jdW1lbnQoKSkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRl
cmZhY2U8U1ZHRG9jdW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgqc3RhdGUs
IGltcGwuZ2V0U1ZHRG9jdW1lbnQoKSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQxQ2FsbGVyPihzdGF0ZSwgImNvbnZlcnQxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC03OTI2LDE5ICs3OTI0LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBb
XShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0Iiwg
ImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGltcGwuY29udmVydDEoKnZhbHVlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQ2FsbGVyPihzdGF0ZSwgImNv
bnZlcnQyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQy
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03OTQ2LDE5ICs3OTQ0LDE5IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9k
ZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAwLCAidmFsdWUiLCAiVGVzdE9iamVjdCIsICJjb252ZXJ0MiIsICJU
ZXN0Tm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLmNvbnZlcnQyKFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29udmVydDMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVyPihzdGF0ZSwgImNvbnZlcnQz
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03OTY2LDE5ICs3OTY0LDE5IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY29udmVydDMo
V1RGTW92ZSh2YWx1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Q2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0
NChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29udmVydDRDYWxsZXI+KHN0YXRlLCAiY29udmVydDQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVy
dDRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTc5ODYsNjUgKzc5ODQsNjUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY29udmVydDQoV1RGTW92
ZSh2YWx1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQ
b2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBv
aW50RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAibXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50
RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8U1ZHUG9pbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJm
YWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
bXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25D
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRh
YmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxl
UG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
bW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyPihzdGF0ZSwgImltbXV0YWJsZVBvaW50RnVuY3Rp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25JbW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSk7CisgICAgcmV0
dXJuIHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Jh
bmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9y
YW5nZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3JhbmdlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyPihzdGF0ZSwgIm9yYW5nZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFu
Z2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLmJhbmFu
YSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5n
TWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2Qo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdN
ZXRob2RDYWxsZXI+KHN0YXRlLCAidmFyaWFkaWNTdHJpbmdNZXRob2QiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFy
aWFkaWNTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgwNTIsMjEgKzgwNTAsMjEgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHRh
aWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMRE9NU3RyaW5nPigqc3RhdGUsIDEpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudmFyaWFk
aWNTdHJpbmdNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsLmFyZ3VtZW50cy52YWx1
ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3Vi
bGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhv
ZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJs
ZU1ldGhvZENhbGxlcj4oc3RhdGUsICJ2YXJpYWRpY0RvdWJsZU1ldGhvZCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY0RvdWJsZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1l
dGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtODA3NCwyMSArODA3MiwyMSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50
czxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpzdGF0ZSwgMSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC52YXJpYWRpY0RvdWJsZU1ldGhvZChXVEZN
b3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwuYXJndW1lbnRzLnZhbHVlKCkpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRo
b2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXI+KHN0YXRlLCAidmFyaWFk
aWNOb2RlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZENhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTgwOTYsMjEgKzgwOTQsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJRExJbnRl
cmZhY2U8Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJoZWFkIiwgIlRlc3RPYmplY3QiLCAidmFyaWFk
aWNOb2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlhZGljQXJndW1lbnRzPElE
TEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnZhcmlhZGljTm9kZU1ldGhvZCgqaGVhZCwgV1RGTW92
ZSh0YWlsLmFyZ3VtZW50cy52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNVbmlvbk1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY1VuaW9uTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZhcmlhZGljVW5pb25NZXRob2RDYWxsZXI+KHN0YXRlLCAidmFyaWFkaWNVbmlvbk1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZh
cmlhZGljVW5pb25NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgxMTgsMjEg
KzgxMTYsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMVW5pb248SURM
SW50ZXJmYWNlPE5vZGU+LCBJRExET01TdHJpbmc+Pigqc3RhdGUsIDEpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudmFyaWFkaWNVbmlvbk1ldGhv
ZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwuYXJndW1lbnRzLnZhbHVlKCkpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25BbnkoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXI+KHN0YXRlLCAiYW55Iik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFu
eUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTgxNDAsNTMgKzgxMzgsNTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gYiA9IGNvbnZlcnQ8
SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmFueShXVEZNb3ZlKGEpLCBXVEZNb3ZlKGIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblBy
b21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4
ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFT
U0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2Us
IFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJu
IGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5Pigqc3Rh
dGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0YXRl
KiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxQcm9taXNlT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbkNhbGxlcj4oc3RhdGUsIFdURk1vdmUo
cHJvbWlzZSksICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbihXVEZNb3ZlKHByb21pc2UpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNl
PiYmLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21p
c2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1
bWVudFByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoRmxvYXRBcmd1bWVudChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
UHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5Pigqc3RhdGUpKTsKKyAg
ICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UsIFByb21pc2VFeGVjdXRp
b25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRo
RmxvYXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZShFeGVjU3Rh
dGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbFByb21pc2VPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRDYWxs
ZXI+KHN0YXRlLCBXVEZNb3ZlKHByb21pc2UpLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9h
dEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVu
dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9t
aXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04MTk0LDc3ICs4MTkyLDc3
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChXVEZN
b3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Citz
dGF0aWMgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VSVChz
dGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Q
cm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkpOworICAg
IHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2Nv
cGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2Vw
dGlvblByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9t
aXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVyPihzdGF0ZSwgV1RGTW92
ZShwcm9taXNlKSwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNl
cHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0
aW9uV2l0aEV4Y2VwdGlvbihXVEZNb3ZlKHByb21pc2UpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNl
KEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50
QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21p
c2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoT3B0aW9uYWxJbnRBcmd1bWVudFByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2lu
ZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJn
dW1lbnRQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKEV4
ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxQcm9taXNlT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Q2FsbGVyPihzdGF0ZSwg
V1RGTW92ZShwcm9taXNlKSwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1
bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1l
bnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElE
TExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50
QXJndW1lbnQoV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92
ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xKEV4ZWNTdGF0ZSogc3RhdGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZU92ZXJsb2FkZWRGdW5jdGlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQo
c3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMVBy
b21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKSk7CisgICAg
cmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6
OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQ
cm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMVByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxQcm9taXNlT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQ2FsbGVyPihzdGF0ZSwgV1RGTW92ZShwcm9taXNl
KSwgInRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJv
bWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04Mjcy
LDI3ICs4MjcwLDI3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9u
KFdURk1vdmUoYSksIFdURk1vdmUocHJvbWlzZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVk
RnVuY3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKK3N0
YXRpYyBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9h
ZGVkRnVuY3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJQcm9taXNlLCBQ
cm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkpOworICAgIHJldHVybiBj
YWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VP
dmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dP
bmx5Pigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZShF
eGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJs
b2FkZWRGdW5jdGlvbjJQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uMkNhbGxlcj4oc3RhdGUsIFdURk1vdmUocHJvbWlzZSksICJ0ZXN0
UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2Fk
ZWRGdW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtODMwMCwxMiArODI5
OCwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlcXVlc3QgPSBjb252ZXJ0PElETEludGVyZmFjZTxGZXRj
aFJlcXVlc3Q+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAicmVxdWVzdCIsICJUZXN0T2JqZWN0IiwgInRlc3RQ
cm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIiwgIkZldGNoUmVxdWVzdCIpOyB9KTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3Zl
cmxvYWRlZEZ1bmN0aW9uKCpyZXF1ZXN0LCBXVEZNb3ZlKHByb21pc2UpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC04MzIyLDYzICs4MzIwLDYzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Q
cm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Q
cm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGlj
UHJvbWlzZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
VGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6
V2luZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Qcm9taXNl
LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RT
dGF0aWNQcm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0YXRl
KiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBUZXN0T2JqOjp0ZXN0U3Rh
dGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0
YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVj
U3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5j
dGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldp
dGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9t
aXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkpOworICAgIHJl
dHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UsIFByb21pc2VFeGVjdXRp
b25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5j
dGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNl
KEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgVGVzdE9iajo6dGVzdFN0YXRpY1Byb21p
c2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbVByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJv
bWlzZUZ1bmN0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlz
ZT4oc3RhdGUsICJ0ZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0
b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VG
dW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbigqc3RhdGUpKTsKKyAg
ICByZXR1cm4gY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbigqc3RhdGUpOwog
fQogCiAjaWYgRU5BQkxFKENPTkRJVElPTjEpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zlcmxv
YWQxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
T3ZlcmxvYWQxQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVy
bG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgzODYsMjIgKzgzODQsMjIgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwu
Y29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENPTkRJVElPTjIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE92ZXJsb2FkMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zl
cmxvYWQyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsT3ZlcmxvYWQyQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxP
dmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg0MDksMTUgKzg0MDcsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY29u
ZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDT05ESVRJT04xKSB8fCBFTkFCTEUoQ09ORElUSU9OMikKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04NDM3LDE0ICs4NDM1LDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25k
aXRpb25hbE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVy
bG9hZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2Fs
bGVyPihzdGF0ZSwgInNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9u
YWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg0NTIsMjAgKzg0NTAs
MjAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwuc2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0cikpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKICNpZiBFTkFCTEUoQ09ORElUSU9OKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVy
bG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQyKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcj4oc3RhdGUs
ICJzaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQy
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04NDczLDE0ICs4NDcxLDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnNpbmdsZUNvbmRp
dGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
aW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJs
b2FkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04NDk3LDE0ICs4
NDk1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBy
ZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Q2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3RDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFj
aFNoYWRvd1Jvb3QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdENhbGxlcj4oc3RhdGUsICJh
dHRhY2hTaGFkb3dSb290Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
ODUxMiwxOSArODUxMCwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluaXQgPSBjb252ZXJ0PElETERpY3Rp
b25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLmF0dGFjaFNoYWRvd1Jvb3QoV1RGTW92ZShpbml0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlckNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJu
YWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRl
cm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJDYWxsZXI+KHN0YXRlLCAib3BlcmF0aW9uV2l0aEV4dGVy
bmFsRGljdGlvbmFyeVBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxE
aWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRl
cm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg1
MzIsMTkgKzg1MzAsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBkaWN0ID0gY29udmVydDxJRExEaWN0aW9u
YXJ5PERpY3Rpb25hcnlJbXBsTmFtZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIoV1RGTW92ZShkaWN0KSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFt
ZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFy
YW1ldGVyQ2FsbGVyPihzdGF0ZSwgImJ1ZmZlclNvdXJjZVBhcmFtZXRlciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25C
dWZmZXJTb3VyY2VQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFy
YW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04NTUyLDI3ICs4NTUwLDI3IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gZGF0YSA9IGNvbnZlcnQ8SURMQnVmZmVyU291cmNlPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5idWZmZXJTb3VyY2VQYXJhbWV0ZXIoV1RGTW92ZShkYXRh
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmlu
Z0NhbGxlcj4oc3RhdGUsICJ0b1N0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETFVTVlN0cmluZz4oKnN0YXRlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkp
KTsKKyAgICByZXR1cm4gdG9KUzxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwgaW1wbC5zdHJpbmdpZmll
ckF0dHJpYnV0ZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKQEAgLTg1OTMsMTAgKzg1OTEsMTAgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVCghdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7CiAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTY1LDcgKzY1LDcgQEAgcHJp
dmF0ZToKIAogdXNpbmcgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yID0g
SlNET01Db25zdHJ1Y3RvcjxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPjsKIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC03NSwxMiArNzUsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUJ1ZmZlciA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEFycmF5QnVmZmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImFycmF5
QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVm
ZmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZSgqYXJyYXlC
dWZmZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJ
bnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtOTAsMTIgKzkwLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlCdWZm
ZXJWaWV3ID0gY29udmVydDxJRExJbnRlcmZhY2U8QXJyYXlCdWZmZXJWaWV3Pj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51
bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczo6Y3JlYXRlKGFycmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEV4ZWNTdGF0
ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTEwNSwxMiArMTA1LDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0
SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYmxvYiA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPEJsb2I+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiYmxvYiIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyIsIG51bGxwdHIsICJCbG9iIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM6OmNyZWF0ZSgqYmxvYik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3Qp
KTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzNChFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjAsMTIgKzEyMCwxMiBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHN0cmluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3Qg
PSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxJ
RExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNShF
eGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xMzMsMTIgKzEzMywxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJU
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8gbG9uZ0FyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVu
dHM8SURMTG9uZz4oKnN0YXRlLCAwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpj
cmVhdGUoV1RGTW92ZShsb25nQXJncykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
c3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7Cisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUo
b2JqZWN0KSk7CiB9CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIyMiwyMiArMjIyLDIxIEBAIHZvaWQgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6ZGVzdHIKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjp+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGRvbU9iamVj
dCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKLWJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAKIHVz
aW5nIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvciA9
IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZT47CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzMsMTIg
KzczLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2Fz
dGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IHN0YXRlLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+OjpS
ZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPj4oKnN0YXRlLCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVj
dCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg4
LDEyICs4OCwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAotdGVtcGxhdGU8
PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTczLDIyICsxNzMsMjEgQEAgdm9pZCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcQogICAgIHRoaXNPYmplY3QtPkpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6On5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJv
dG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHJldmlz
aW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rp
b25OYW1lZEl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShKU0M6OkV4
ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJs
aWM6CkBAIC0xNjcsMjIgKzE2NywyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJyaWRlQnVp
bHRpbnMqPihzdGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE92
ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1By
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcnJpZGVCdWls
dGluc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RP
dmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNU
ZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odGhp
c1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTIwNywxNCArMjA2LDE0IEBAIEpTVmFsdWUgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29u
c3QKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0Nv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3Zl
cnJpZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T3ZlcnJpZGVCdWlsdGlucyosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0
aW9uTmFtZWRJdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90
b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUNhbGxlcj4oc3RhdGUs
ICJuYW1lZEl0ZW0iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTIyMiw4ICsyMjEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFt
ZSkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJl
dHVybiB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkpKTsKIH0KIAogYm9vbCBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyMTAxNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwyMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwog
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFi
bGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0
U3RyaW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRV
bnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKQEAgLTE0NSw5ICsxNDUsOSBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb246OmRlc3Ry
b3koSlNDOjpKCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVzdFNl
cmlhbGl6YXRpb24oKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlv
biogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdEZvckF0dHJpYnV0ZShF
eGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RTZXJpYWxpemF0aW9uKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpj
YXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJl
dHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2Vy
aWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdEZvck9w
ZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHRlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIEIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9u
Rmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJmaXJzdFN0cmlu
Z0F0dHJpYnV0ZSIpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW8KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlh
bGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsK
IH0KQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRV
bnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlv
blRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIik7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpbwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTIyMSw3ICsyMjEsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlv
bkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImZpZnRoTG9uZ0F0
dHJpYnV0ZSIpOwogfQpAQCAtMjM1LDIyICsyMzUsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlv
blByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXph
dGlvblByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFko
IWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb246
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlv
blByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRv
bU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI2MSw5ICsyNjAsOSBAQCBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTI4MCw5ICsyNzksOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yOTksOSArMjk4LDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRo
aXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25U
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzE4LDkgKzMxNyw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW8KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zMzcsOSArMzM2LDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRlIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM1OSw3ICszNTgsNyBAQCBKU1ZhbHVlIEpT
VGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxs
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiogdGhpc09iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CkBAIC0zODAsMTAgKzM3OSwxMCBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhCiAgICAgQVNTRVJUKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRl
VmFsdWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQ2FsbGVyPihzdGF0ZSwgInRvSlNPTiIpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJl
dmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwyMCArNDAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMK
IAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEpTQzo6RXhl
Y1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZh
bHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQ5LDkgKzE0
OSw5IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6On5KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRl
JiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNW
YWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0YXRlJiBz
dGF0ZSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRl
PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidmFsdWUiKTsKIH0KQEAgLTE3Nyw3ICsxNzcsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJyZWFkb25seVZhbHVlIik7CiB9CkBAIC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNh
Y2hlZFZhbHVlIik7CiB9CkBAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRz
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46
OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0c0dldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInBvcnRzIik7CiB9CkBAIC0yMjgsNyArMjI4LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRS
ZWFkb25seVZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2FjaGVkUmVhZG9ubHlWYWx1
ZSIpOwogfQpAQCAtMjQ1LDIyICsyNDUsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzEsOSArMjcwLDkgQEAgYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJ2YWx1ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1
ZSwgInZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTI5MCw5ICsyODksOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNhY2hlZFZhbHVlIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZh
bHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY2FjaGVkVmFsdWUiKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQpAQCAtMzEyLDE0ICszMTEsMTQgQEAgSlNWYWx1ZSBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhbGxP
cGVyYXRpb248anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJmdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
MzI3LDI0ICszMjYsMjQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLmZ1bmN0aW9uKFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSos
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVy
bmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
RnVuY3Rpb25SZXR1cm5pbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1
bmN0aW9uUmV0dXJuaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1
bmN0aW9uUmV0dXJuaW5nQ2FsbGVyPihzdGF0ZSwgImZ1bmN0aW9uUmV0dXJuaW5nIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9uUmV0dXJuaW5nKCkpKTsKKyAgICByZXR1cm4gdG9K
UzxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZnVuY3Rpb25SZXR1cm5pbmcoKSk7
CiB9CiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDM4ICs0MiwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbkZ1bmMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNl
cXVlbmNlT2ZOdWxsYWJsZXNBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVT
ZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U2VxdWVuY2VPZlVuaW9uc0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZyhK
U0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdTZXF1ZW5jZUZ1bmN0aW9uMihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNl
cXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblNldFNoYWRvdyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1
ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9m
VW5pb25zQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25BcmcoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25GdW5jV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxX
aXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVkZWZz
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFR5cGVkZWZzUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMjMs
NyArMTIzLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFR5cGVkZQogICAg
IHsgIlRlc3RTdWJPYmoiLCBSZWFkT25seSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yVGVzdFN1Yk9iaiksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRl
KiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTMzLDEzICsxMzMsMTMgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNvbnZl
cnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMSwgInRlc3RDYWxsYmFj
a0Z1bmN0aW9uIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOyB9KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHRlc3RDYWxsYmFja0ludGVyZmFj
ZSA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAyLCAi
dGVzdENhbGxiYWNrSW50ZXJmYWNlIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOyB9KTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9
IFRlc3RUeXBlZGVmczo6Y3JlYXRlKFdURk1vdmUoaGVsbG8pLCB0ZXN0Q2FsbGJhY2tGdW5jdGlv
bi5yZWxlYXNlTm9uTnVsbCgpLCB0ZXN0Q2FsbGJhY2tJbnRlcmZhY2UucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0VHlwZWRlZnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJm
YWNlPFRlc3RUeXBlZGVmcz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEZNb3ZlKG9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0VHlwZWRlZnND
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMjIzLDkgKzIyMyw5IEBAIHZvaWQgSlNU
ZXN0VHlwZWRlZnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RU
eXBlZGVmczo6fkpTVGVzdFR5cGVkZWZzKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dFR5cGVkZWZzKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FzdEZvckF0dHJpYnV0
ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RUeXBlZGVmcyogQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhc3RGb3JB
dHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHRoaXNW
YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFR5cGVkZWZzKiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQpA
QCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFR5cGVkZWZzKiBCaW5k
aW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9u
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZz
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExv
bmdMb25nQXR0ciIpOwogfQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Vuc2kKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxl
U2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1tdXRhYmxl
U2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiB9CkBAIC0yNjcsNyArMjY3LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlw
ZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CkBAIC0yODEsNyArMjgxLDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29ucwogCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7CiB9CkBAIC0yOTcsNyArMjk3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzQXR0cgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVm
cyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+
OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0zMTMs
NyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cgogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRy
aWJ1dGU8anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CkBA
IC0zMjksNyArMzI5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3Ry
aQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+
OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7
CiB9CkBAIC0zNDMsMjIgKzM0MywyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNTdHJpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPih0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0VHlwZWRlZnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zNjksOSArMzY4LDkgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4
ZWNTdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFs
dWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQpAQCAtMzg4LDkgKzM4Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1Vuc2kKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZz
SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVk
ZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDA3
LDkgKzQwNiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQyNiw5ICs0MjUsOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCkBAIC00NDUsOSArNDQ0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVk
ZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVk
ZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgdmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDY0LDkgKzQ2Myw5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmkKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKQEAgLTQ4NiwzMiArNDg1LDMyIEBAIEpTVmFsdWUgSlNUZXN0VHlwZWRlZnM6Omdl
dENvbnN0cnVjdG9yKFYKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyhFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25GdW5jQ2FsbGVyPihzdGF0ZSwgImZ1bmMiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5j
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8geCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElE
TFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblNldFNoYWRvdyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhbGxPcGVy
YXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0NhbGxlcj4oc3Rh
dGUsICJzZXRTaGFkb3ciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC01MTksMjcgKzUxOCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHdpZHRoID0gY29udmVydDxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gaGVpZ2h0
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGF1dG8gYmx1ciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBhdXRvIGNvbG9yID0gc3RhdGUtPmFyZ3VtZW50KDMpLmlzVW5kZWZp
bmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgzKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBh
bHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxm
bG9hdD4oKSA6IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLnNldFNoYWRvdyhXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQp
LCBXVEZNb3ZlKGJsdXIpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92ZShhbHBoYSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
U2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFNlcXVlbmNlQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxsZXI+KHN0YXRlLCAibWV0
aG9kV2l0aFNlcXVlbmNlQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTQ3LDE4ICs1NDYsMTggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMVW5zaWdu
ZWRMb25nTG9uZz4oaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFy
ZykpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJl
dHVybiB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwubWV0aG9kV2l0aFNlcXVlbmNlQXJn
KFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFy
Z0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5
cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcj4oc3Rh
dGUsICJudWxsYWJsZVNlcXVlbmNlQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5j
ZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NjYsMTkgKzU2NSwxOSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJ
RExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubnVsbGFibGVT
ZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVs
bGFibGVzQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyPihzdGF0ZSwgInNlcXVlbmNlT2ZOdWxs
YWJsZXNBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU4NiwxOSArNTg1LDE5IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
c2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmlu
Zz4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5zZXF1ZW5jZU9mTnVsbGFibGVz
QXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51
bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFi
bGVzQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVz
QXJnQ2FsbGVyPihzdGF0ZSwgIm51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTYwNiwxOSArNjA1LDE5IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
c2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETE51bGxhYmxl
PElETERPTVN0cmluZz4+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubnVsbGFi
bGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTZXF1ZW5jZU9mVW5pb25zQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRl
ZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJn
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyhFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9m
VW5pb25zQXJnQ2FsbGVyPihzdGF0ZSwgIm51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTYyNiwxOSArNjI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2Vx
dWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETFVuaW9uPElETERP
TVN0cmluZywgSURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnKFdURk1vdmUoc2VxdWVu
Y2VBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFy
Z0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblVuaW9uQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZ0NhbGxlcj4oc3Rh
dGUsICJ1bmlvbkFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25VbmlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC02NDYsMTkgKzY0NSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHVuaW9uQXJnID0gY29udmVydDxJRExV
bmlvbjxJRExET01TdHJpbmcsIElETExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
aW1wbC51bmlvbkFyZyhXVEZNb3ZlKHVuaW9uQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMq
LCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFt
cChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyPihzdGF0ZSwgImZ1
bmNXaXRoQ2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTY2NiwzNiArNjY1LDM2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8
SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDx1aW50NjRfdD4oKSA6IGNvbnZlcnQ8
SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZnVuY1dpdGhDbGFtcChXVEZNb3Zl
KGFyZzEpLCBXVEZNb3ZlKGFyZzIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0
YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyos
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11
dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0
YWJsZVBvaW50RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAiaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpzdGF0
ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0YWJsZVBvaW50RnVuY3Rp
b24oKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0YWJsZVBvaW50RnVuY3Rpb24o
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVu
Y2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
U3RyaW5nU2VxdWVuY2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJz
dHJpbmdTZXF1ZW5jZUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5j
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlv
bkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDMsMTggKzcwMiwxOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rp
b24oV1RGTW92ZSh2YWx1ZXMpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3Rh
dGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdT
ZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1Nl
cXVlbmNlRnVuY3Rpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24y
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlw
ZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdTZXF1ZW5jZUZ1bmN0aW9uMkNhbGxlcj4oc3RhdGUsICJzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9u
MiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC03MjIsMTggKzcyMSwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVl
cyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNl
cXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKFdURk1vdmUodmFsdWVz
KSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0
dXJuIHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIo
V1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1
aXJlc0luY2x1ZGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2Fs
bFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhbGxPcGVyYXRpb248anNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJ
bmNsdWRlQ2FsbGVyPihzdGF0ZSwgImNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGVDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJ
bmNsdWRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc0MSwyNCArNzQwLDI0
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETElu
dGVyZmFjZTxUZXN0RXZlbnRUYXJnZXQ+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwu
Y2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykp
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVy
biB0b0pTPElETEJvb2xlYW4+KGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1
ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyPihz
dGF0ZSwgIm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhj
ZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2Nv
cGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBib29s
IEpTVGVzdFR5cGVkZWZzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyMTAx
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsMTUgKzYwLDE1IEBAIHZvaWQgUnVudGlt
ZUFycmF5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxSdW50aW1lQXJy
YXkqPihjZWxsKS0+UnVudGltZUFycmF5Ojp+UnVudGltZUFycmF5KCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1bnRpbWVBcnJheTo6
bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PFJ1bnRpbWVBcnJheSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxSdW50
aW1lQXJyYXkqPih0aGlzVmFsdWUpOwogICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpKTsKKyAgICByZXR1cm4ganNO
dW1iZXIodGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpOwogfQogCiB2b2lkIFJ1bnRpbWVBcnJheTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMjEwMTY3KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAx
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04Myw3ICs4Myw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBS
dW50aW1lQXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIEJpbmRpbmdzQXJyYXkqIG1fYXJyYXk7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAyMTAx
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDE1ICs1NCwxNSBAQCB2b2lkIFJ1bnRp
bWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUgUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFJ1bnRpbWVN
ZXRob2QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxSdW50aW1lTWV0aG9kKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxSdW50aW1lTWV0aG9kKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
IXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbWV0
aG9kLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodGhpc09iamVjdC0+
bV9tZXRob2QtPm51bVBhcmFtZXRlcnMoKSk7CiB9CiAKIGJvb2wgUnVudGltZU1ldGhvZDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAtNzYsNyArNzYsNyBA
QCBib29sIFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIElu
dGVybmFsRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbAogICAgIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVNZXRo
b2QqPihleGVjLT5qc0NhbGxlZSgpKTsKIAogICAgIGlmICghbWV0aG9kLT5tZXRob2QoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlOwogCkBA
IC05Myw3ICs5Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwK
ICAgICAgICAgUnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVPYmplY3QqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICAgICAgaW5zdGFuY2UgPSBydW50
aW1lT2JqZWN0LT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CiAgICAgICAgIGlmICghaW5zdGFuY2Up
IAotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSdW50aW1lT2JqZWN0Ojp0aHJv
d0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICAgICAgcmV0dXJuIFJ1
bnRpbWVPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBDYWxsaW5nIGEgcnVudGltZSBvYmplY3Qgb2YgYSBwbHVnaW4g
ZWxlbWVudD8KICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhKU0hUTUxFbGVtZW50Ojpp
bmZvKCkpKQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kKTsKICAgICBpbnN0YW5jZS0+ZW5k
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIENhbGxUeXBlIFJ1bnRpbWVNZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhv
ZC5oCShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9t
ZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgQmluZGluZ3M6Ok1ldGhvZCogbV9t
ZXRob2Q7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
CShyZXZpc2lvbiAyMTAxNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOC0yMDA5LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MiwxNiArNjIsMTYgQEAgdm9pZCBSdW50aW1lT2JqZWN0OjppbnZhbGlkYXRlKCkKICAgICBtX2lu
c3RhbmNlID0gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVudGltZU9iamVjdDo6ZmFs
bGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmZh
bGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBSdW50aW1lT2Jq
ZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2Jq
ZWN0Kj4odGhpc1ZhbHVlKTsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09i
ai0+bV9pbnN0YW5jZTsKIAogICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAKICAg
ICBpbnN0YW5jZS0+YmVnaW4oKTsKIApAQCAtODAsMTkgKzgwLDE5IEBAIEVuY29kZWRKU1ZhbHVl
IFJ1bnRpbWVPYmplY3Q6OmZhbGxiYWNrT2IKIAogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAg
ICAgICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpmaWVsZEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUgUnVudGltZU9iamVjdDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsg
ICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1
bnRpbWVPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgUnVudGltZU9i
amVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4odGhpc1ZhbHVlKTsKICAgICBS
ZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09iai0+bV9pbnN0YW5jZTsKIAogICAgIGlm
ICghaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlk
QWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFj
Y2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgRW5jb2RlZEpTVmFsdWUgUnVudGltZU9iamVjdDo6ZmllbGRH
ZXR0ZQogICAgIAogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAgIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIFJ1bnRpbWVPYmplY3Q6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNPYmogPSBqc0Nh
c3Q8UnVudGltZU9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0
YW5jZSA9IHRoaXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNj
b3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29w
ZSk7CiAgICAgCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjptZXRob2RHZXR0CiAKICAgICBpbnN0YW5jZS0+
ZW5kKCk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZCk7
CisgICAgcmV0dXJuIG1ldGhvZDsKIH0KIAogYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlICpleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0yMjIsMTQgKzIyMiwxNCBAQCBK
U1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmpzQ2Fs
bGVlKCktPmluaGVyaXRzKFJ1bnRpbWVPYmplY3Q6OmluZm8oKSkpOwogICAgIFJlZlB0cjxJbnN0
YW5jZT4gaW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdCo+KGV4ZWMtPmpzQ2FsbGVl
KCkpLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYyk7CiAg
ICAgaW5zdGFuY2UtPmVuZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsVHlwZSBSdW50aW1lT2JqZWN0OjpnZXRDYWxs
RGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTI0Niw3ICsyNDYsNyBA
QCBDYWxsVHlwZSBSdW50aW1lT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlCiAgICAgcmV0dXJuIENh
bGxUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUnVudGltZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+anNDYWxsZWUoKTsKICAgICBBU1NFUlQo
Y29uc3RydWN0b3ItPmluaGVyaXRzKFJ1bnRpbWVPYmplY3Q6OmluZm8oKSkpOwpAQCAtMjU3LDcg
KzI1Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgCiAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQuaXNPYmplY3QoKSA/IGpzQ2FzdDxKU09iamVjdCo+KHJlc3Vs
dC5hc0NlbGwoKSkgOiBjb25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIHJlc3VsdC5pc09iamVjdCgp
ID8ganNDYXN0PEpTT2JqZWN0Kj4ocmVzdWx0LmFzQ2VsbCgpKSA6IGNvbnN0cnVjdG9yOwogfQog
CiBDb25zdHJ1Y3RUeXBlIFJ1bnRpbWVPYmplY3Q6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBj
ZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgtMjAwOSwgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTc4LDkgKzc4LDkgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZmFsbGJhY2tPYmpl
Y3RHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIGZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBtZXRob2RHZXR0
ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBmaWVsZEdldHRlcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIG1ldGhvZEdldHRlcihFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgUmVmUHRyPEluc3RhbmNlPiBt
X2luc3RhbmNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVu
dGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1
bnRpbWUubW0JKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDEzLCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1
dChKU0NlbGwqLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbE9iakNGYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIE9iamNJbnN0YW5jZSogb2Jq
Y0luc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxPYmpDSW5zdGFuY2UoKTsKIAog
ICAgIGlmICghb2JqY0luc3RhbmNlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJ1
bnRpbWVPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAg
ICAgIHJldHVybiBSdW50aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgCiAgICAgb2JqY0luc3RhbmNlLT5iZWdpbigpOwogCkBAIC0yNzMsNyArMjcz
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgICAgICAg
ICAgCiAgICAgb2JqY0luc3RhbmNlLT5lbmQoKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsVHlwZSBPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRh
KQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMTY3KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDEtMDMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUgdXNlIG9mIEVu
Y29kZWRKU1ZhbHVlLCBhbmQgdXNlIEpTVmFsdWUgaW5zdGVhZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjY1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBNZXRob2QuY3BwOgorICAgICAgICAoV2ViS2l0OjpjYWxsTWV0aG9kKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmNhbGxOUEpTT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6Y29uc3RydWN0V2l0
aENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0
ZXIpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjptZXRob2RHZXR0ZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisKIDIwMTYtMTIt
MjUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUHJv
cGFnYXRlIHRoZSBzb3VyY2Ugb3JpZ2luIGFzIG11Y2ggYXMgcG9zc2libGUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE1ldGhvZC5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgSlNOUE1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCAKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxNZXRob2QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbAogICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoSlNOUE9iamVjdDo6aW5mbygpKSkg
ewogICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3QqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKIAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TlBPYmplY3QtPmNhbGxNZXRob2QoZXhlYywganNOUE1ldGhvZC0+bnBJZGVudGlmaWVyKCkpKTsK
KyAgICAgICAgcmV0dXJuIGpzTlBPYmplY3QtPmNhbGxNZXRob2QoZXhlYywganNOUE1ldGhvZC0+
bnBJZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDE2NykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBKU1ZhbHVlIEpT
TlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTlBKU09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxOUEpTT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+anNDYWxsZWUo
KTsKICAgICBBU1NFUlQob2JqZWN0LT5pbmhlcml0cyhKU05QT2JqZWN0OjppbmZvKCkpKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNDYXN0PEpTTlBPYmplY3QqPihvYmplY3QpLT5j
YWxsT2JqZWN0KGV4ZWMpKTsKKyAgICByZXR1cm4ganNDYXN0PEpTTlBPYmplY3QqPihvYmplY3Qp
LT5jYWxsT2JqZWN0KGV4ZWMpOwogfQogCiBKU0M6OkNhbGxUeXBlIEpTTlBPYmplY3Q6OmdldENh
bGxEYXRhKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTI1
NSwxMiArMjU1LDEyIEBAIEpTQzo6Q2FsbFR5cGUgSlNOUE9iamVjdDo6Z2V0Q2FsbERhdGEoSlMK
ICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+anNDYWxs
ZWUoKTsKICAgICBBU1NFUlQoY29uc3RydWN0b3ItPmluaGVyaXRzKEpTTlBPYmplY3Q6OmluZm8o
KSkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8SlNOUE9iamVjdCo+KGNv
bnN0cnVjdG9yKS0+Y2FsbENvbnN0cnVjdG9yKGV4ZWMpKTsKKyAgICByZXR1cm4ganNDYXN0PEpT
TlBPYmplY3QqPihjb25zdHJ1Y3RvciktPmNhbGxDb25zdHJ1Y3RvcihleGVjKTsKIH0KIAogQ29u
c3RydWN0VHlwZSBKU05QT2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTQ1OCwxOSArNDU4LDE5IEBAIHZvaWQgSlNO
UE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICBucG5NZW1GcmVlKGlkZW50aWZp
ZXJzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTTlBPYmplY3Qq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNOUE9iamVjdCogdGhpc09iaiA9
IGpzQ2FzdDxKU05QT2JqZWN0Kj4odGhpc1ZhbHVlKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmosIGluZm8oKSk7CiAgICAgCiAgICAgaWYgKCF0aGlzT2JqLT5tX25wT2Jq
ZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vy
cm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJv
cihleGVjLCBzY29wZSk7CiAKICAgICBpZiAoIXRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+
Z2V0UHJvcGVydHkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgTlBWYXJpYW50IHJlc3Vs
dDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwpAQCAtNDg2LDcgKzQ4Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGUKICAgICAgICAgTlBJZGVudGlm
aWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgogICAgICAgICBp
ZiAoIW5wSWRlbnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAg
ICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHko
dGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAgICAgCkBA
IC00OTQsMzAgKzQ5NCwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdl
dHRlCiAgICAgfQogCiAgICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSB0aGlzT2JqLT5tX29iamVjdE1hcC0+Y29u
dmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgcmVz
dWx0KTsKICAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShwcm9wZXJ0eVZhbHVlKTsKKyAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBKU05QT2JqZWN0OjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIEpTTlBPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU05QT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpT
TlBPYmplY3QqPih0aGlzVmFsdWUpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iaiwgaW5mbygpKTsKICAgICAKICAgICBpZiAoIXRoaXNPYmotPm1fbnBPYmplY3QpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywg
c2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNj
b3BlKTsKIAogICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9t
SWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMg
c3ltYm9sLgogICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTTlBNZXRob2Q6OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxP
YmplY3QoKSwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbnBJZGVudGlmaWVyKSk7CisgICAg
cmV0dXJuIEpTTlBNZXRob2Q6OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwg
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbnBJZGVudGlmaWVyKTsKIH0KIAogSlNPYmplY3Qq
IEpTTlBPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhy
b3dTY29wZSYgc2NvcGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDIxMDE2NykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTk0LDggKzk0LDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlKTsKIAotICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIHByb3BlcnR5R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIG1ldGhvZEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHByb3Bl
cnR5R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBtZXRob2RHZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAogICAgIE5QUnVudGltZU9iamVjdE1hcCogbV9vYmplY3RNYXA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297951</attachid>
            <date>2017-01-03 14:13:27 -0800</date>
            <delta_ts>2017-01-03 15:51:59 -0800</delta_ts>
            <desc>proposed patch: rebased.</desc>
            <filename>bug-166658.patch</filename>
            <type>text/plain</type>
            <size>1622523</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMiBA
QAorMjAxNy0wMS0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVkdWNlIHRoZSB1c2Ugb2YgRW5jb2RlZEpTVmFsdWUsIGFuZCB1c2UgSlNWYWx1ZSBpbnN0ZWFk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3Rp
bmcgY29kZSB1c2VzIEVuY29kZWRKU1ZhbHVlIGZvciBwYXNzaW5nIEpTVmFsdWVzIGluIGFuZCBv
dXQgb2YgaG9zdCBmdW5jdGlvbnMuCisgICAgICAgIEhvd2V2ZXIsIGl0IGRvZXMgbm90IHNlZW0g
dGhhdCB0aGlzIGlzIG5lY2Vzc2FyeSBpbiBtb3N0IGNhc2VzLiAgU3BlY2lmaWNhbGx5LAorICAg
ICAgICBOYXRpdmVGdW5jdGlvbiwgR2V0VmFsdWVGdW5jLCBhbmQgUHV0VmFsdWVGdW5jIGNhbiBh
bGwgdXNlIEpTVmFsdWUgd2l0aCBubworICAgICAgICBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMu
ICBVc2luZyBKU1ZhbHVlIGRpcmVjdGx5IChpbnN0ZWFkIG9mIEVuY29kZWRKU1ZhbHVlKSBhbHNv
CisgICAgICAgIGltcHJvdmVzIHR5cGUgc2FmZXR5LCBhbmQgcmVkdWNlcyB0aGUgbmVlZCB0byBt
YXJzaGFsIHZhbHVlcyBiYWNrIGFuZCBmb3J0aCB1c2luZworICAgICAgICBKU1ZhbHVlOjplbmNv
ZGUoKSBhbmQgSlNWYWx1ZTo6ZGVjb2RlKCkuICBUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgZWFz
eSB0byByZWFkCisgICAgICAgIGFuZCB3cml0ZSwgd2l0aCBubyBwZXJmb3JtYW5jZSBsb3NzLgor
CisgICAgICAgIFRoZSAyIHByaW1hcnkgcmVhc29uIGZvciBjb2RlIHRvIHN0aWxsIHVzZSBFbmNv
ZGVkSlNWYWx1ZSBhcmU6CisgICAgICAgIDEuIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgQyBsaW5r
YWdlIChlLmcuIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25zKS4KKyAgICAgICAgMi4gYXMgYW4gZWxl
bWVudCBzdG9yYWdlIHR5cGUgd2hlcmUgdXNpbmcgRW5jb2RlZEpTVmFsdWUgYWxsb3dzIHVzIHRv
IHVzZSB0aGUKKyAgICAgICAgICAgdHJpdmlhbCBjb25zdHJ1Y3RvciBmb3IgaW50NjRfdC4KKwor
ICAgICAgICBBbHNvIGRlbGV0ZWQgc29tZSB1bnVzZWQgY29kZS4KKworICAgICAgICBOb3RlOiB0
aGlzIHBhdGNoIGlzIG5vdCBleGhhdXN0aXZlIGluIHJlbW92aW5nIGFsbCB1bm5lY2Vzc2FyeSB1
c2VzIG9mCisgICAgICAgIEVuY29kZWRKU1ZhbHVlLiAgSXQgbWVyZWx5IHRyaWVzIHRvIHJlZHVj
ZSBpdCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGggbWluaW1hbAorICAgICAgICBlZmZvcnQuCisK
KyAgICAgICAgUGVyZm9ybWFuY2UgaXMgbmV1dHJhbCBvbiB0aGUgSlNDIGJlbmNobWFya3MuCisK
KyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpBUElD
YWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tGdW5jdGlv
bjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Y29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpjYWxsKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZnRsL0ZUTEdl
bmVyYXRlZEZ1bmN0aW9uLmg6CisgICAgICAgICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVBdHRyaWJ1dGVFdmFsdWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rp
b25Jc0hUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0
aW9uV2Vha01hcEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUpOgorICAgICAgICAoSW5zcGVjdG9yOjpq
c0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXRl
cmF0b3JFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
RnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgICogaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRo
U2NvcGVFeHRlbnNpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVQcm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVMaW5lKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25OYW1l
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU2Nv
cGVDaGFpbik6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZVRoaXNPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZy
YW1lSXNUYWlsRGVsZXRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKFdURjo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpS
dW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChXVEY6OkRPTUpJVEdldHRlcjo6
Y3VzdG9tR2V0dGVyKToKKyAgICAgICAgKFdURjo6RE9NSklUR2V0dGVyQ29tcGxleDo6ZnVuY3Rp
b25FbmFibGVFeGNlcHRpb24pOgorICAgICAgICAoV1RGOjpET01KSVRHZXR0ZXJDb21wbGV4Ojpj
dXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpET01KSVRGdW5jdGlvbk9iamVjdDo6c2FmZUZ1
bmN0aW9uKToKKyAgICAgICAgKHByaW50SW50ZXJuYWwpOgorICAgICAgICAoZnVuY3Rpb25Qcmlu
dFN0ZE91dCk6CisgICAgICAgIChmdW5jdGlvblByaW50U3RkRXJyKToKKyAgICAgICAgKGZ1bmN0
aW9uRHVtcENhbGxGcmFtZSk6CisgICAgICAgIChmdW5jdGlvbkRlYnVnKToKKyAgICAgICAgKGZ1
bmN0aW9uRGVzY3JpYmUpOgorICAgICAgICAoZnVuY3Rpb25EZXNjcmliZUFycmF5KToKKyAgICAg
ICAgKGZ1bmN0aW9uU2xlZXBTZWNvbmRzKToKKyAgICAgICAgKGZ1bmN0aW9uSlNDU3RhY2spOgor
ICAgICAgICAoZnVuY3Rpb25DcmVhdGVSb290KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRWxl
bWVudCk6CisgICAgICAgIChmdW5jdGlvbkdldEVsZW1lbnQpOgorICAgICAgICAoZnVuY3Rpb25T
ZXRFbGVtZW50Um9vdCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdCk6Cisg
ICAgICAgIChmdW5jdGlvbkdldEhpZGRlblZhbHVlKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlk
ZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAgIChmdW5j
dGlvbkNyZWF0ZVJ1bnRpbWVBcnJheSk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUltcHVyZUdl
dHRlcik6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdCk6CisgICAg
ICAgIChmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25D
cmVhdGVET01KSVRHZXR0ZXJPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01KSVRH
ZXR0ZXJDb21wbGV4T2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rp
b25PYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSk6Cisg
ICAgICAgIChmdW5jdGlvbkdDQW5kU3dlZXApOgorICAgICAgICAoZnVuY3Rpb25GdWxsR0MpOgor
ICAgICAgICAoZnVuY3Rpb25FZGVuR0MpOgorICAgICAgICAoZnVuY3Rpb25Gb3JjZUdDU2xvd1Bh
dGhzKToKKyAgICAgICAgKGZ1bmN0aW9uSGVhcFNpemUpOgorICAgICAgICAoZnVuY3Rpb25BZGRy
ZXNzT2YpOgorICAgICAgICAoZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoZnVu
Y3Rpb25WZXJzaW9uKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9u
UnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxv
YWRTdHJpbmcpOgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlv
bkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncyk6CisgICAg
ICAgIChmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyk6CisgICAgICAgIChmdW5jdGlvblNoYWRv
d0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3cpOgorICAgICAgICAoZnVuY3Rpb25HZXRSYW5k
b21TZWVkKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5j
dGlvbklzUm9wZSk6CisgICAgICAgIChmdW5jdGlvbkNhbGxlclNvdXJjZU9yaWdpbik6CisgICAg
ICAgIChmdW5jdGlvblJlYWRsaW5lKToKKyAgICAgICAgKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOgor
ICAgICAgICAoZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9u
Tm9ERkcpOgorICAgICAgICAoZnVuY3Rpb25Ob0ZUTCk6CisgICAgICAgIChmdW5jdGlvbk5vT1NS
RXhpdEZ1enppbmcpOgorICAgICAgICAoZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToK
KyAgICAgICAgKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk6CisgICAgICAgIChmdW5jdGlv
bkpTQ09wdGlvbnMpOgorICAgICAgICAoZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQp
OgorICAgICAgICAoZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKToKKyAgICAgICAgKGZ1bmN0
aW9uRmFpbE5leHROZXdDb2RlQmxvY2spOgorICAgICAgICAoZnVuY3Rpb25RdWl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uQWJvcnQpOgorICAgICAgICAoZnVuY3Rpb25GYWxzZTEpOgorICAgICAgICAo
ZnVuY3Rpb25GYWxzZTIpOgorICAgICAgICAoZnVuY3Rpb25VbmRlZmluZWQxKToKKyAgICAgICAg
KGZ1bmN0aW9uVW5kZWZpbmVkMik6CisgICAgICAgIChmdW5jdGlvbklzSW50MzIpOgorICAgICAg
ICAoZnVuY3Rpb25JZGVudGl0eSk6CisgICAgICAgIChmdW5jdGlvbkVmZmVjdGZ1bDQyKToKKyAg
ICAgICAgKGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyKToKKyAgICAgICAgKGZ1bmN0aW9uSGFzQ3Vz
dG9tUHJvcGVydGllcyk6CisgICAgICAgIChmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxl
cyk6CisgICAgICAgIChmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbik6CisgICAgICAgIChm
dW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAoZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4
ZWN1dGlvblJhbmdlcyk6CisgICAgICAgIChmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZCk6
CisgICAgICAgIChmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRpb25Db3VudCk6CisgICAgICAgIChm
dW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoZnVuY3Rpb25EcmFpbk1pY3Jv
dGFza3MpOgorICAgICAgICAoZnVuY3Rpb25JczMyQml0UGxhdGZvcm0pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkTW9kdWxlKToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbik6CisgICAg
ICAgIChmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvbkNoZWNr
TW9kdWxlU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5n
UHJvZmlsZXIpOgorICAgICAgICAoZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAoZnVuY3Rpb25F
bnN1cmVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJvZmls
ZXIpOgorICAgICAgICAoZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMpOgorICAg
ICAgICAoZnVuY3Rpb25NYXhBcmd1bWVudHMpOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1v
ZHVsZUZ1bmN0aW9ucyk6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENh
bGwpOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEFycmF5Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OmFycmF5Q29uc3RydWN0b3JQcml2YXRlRnVuY0lzQXJyYXlTbG93KToKKyAgICAgICAg
KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1Bv
cCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jUmV2ZXJzZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6Y29uY2F0QXBwZW5kT25l
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQXBwZW5kTWVtY3B5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9Bc3luY0Z1bmN0
aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsQXN5bmNGdW5jdGlvbkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0F0b21pY3NPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjph
dG9taWNzRnVuY0FkZCk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jQW5kKToKKyAgICAgICAg
KEpTQzo6YXRvbWljc0Z1bmNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjphdG9taWNz
RnVuY0V4Y2hhbmdlKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNJc0xvY2tGcmVlKToKKyAg
ICAgICAgKEpTQzo6YXRvbWljc0Z1bmNMb2FkKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNP
cik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jU3RvcmUpOgorICAgICAgICAoSlNDOjphdG9t
aWNzRnVuY1N1Yik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2FpdCk6CisgICAgICAgIChK
U0M6OmF0b21pY3NGdW5jV2FrZSk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jWG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsQm9vbGVh
bkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpi
b29sZWFuUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNvbnNv
bGVMb2dXaXRoTGV2ZWwpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRGVidWcpOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRXJyb3IpOgorICAgICAgICAoSlNDOjpjb25z
b2xlUHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0luZm8pOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jV2Fybik6CisgICAgICAgIChKU0M6OmNvbnNv
bGVQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNEaXIpOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRGlyWE1MKToKKyAgICAgICAgKEpTQzo6Y29u
c29sZVByb3RvRnVuY1RhYmxlKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1RyYWNl
KToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0Fzc2VydCk6CisgICAgICAgIChKU0M6
OmNvbnNvbGVQcm90b0Z1bmNDb3VudCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNQ
cm9maWxlKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Byb2ZpbGVFbmQpOgorICAg
ICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgIChK
U0M6OmNvbnNvbGVQcm90b0Z1bmNUaW1lKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVu
Y1RpbWVFbmQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1wKToKKyAg
ICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0dyb3VwKToKKyAgICAgICAgKEpTQzo6Y29uc29s
ZVByb3RvRnVuY0dyb3VwQ29sbGFwc2VkKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVu
Y0dyb3VwRW5kKToKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxDdXN0b21TZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToK
KyAgICAgICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNUb1VUQ1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0
ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2wpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVh
cik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNH
ZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01p
bnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRV
VENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VGltZSk6CisgICAgICAgIChK
U0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVG
cm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWlu
dXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldERhdGUpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENN
b250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcik6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAgKiBydW50aW1lL0Rh
dGVQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxG
dW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjplc1NwZWNJc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDoKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yLmg6CisgICAgICAgIChKU0M6OnRocm93Vk1FcnJvcik6CisgICAgICAg
IChKU0M6OnRocm93Vk1UeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd1ZNUmFuZ2VFcnJv
cik6CisgICAgICAgIChKU0M6OlN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6Y29uc3RydWN0
VGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNhbGxUaHJvd1R5cGVFcnJvcik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEZ1bmN0aW9uQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAg
ICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5j
dGlvblByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICog
cnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwOgorICAgICAgICAoSlND
OjppbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2cpOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRs
Q29sbGF0b3IpOgorICAgICAgICAoSlNDOjpjYWxsSW50bENvbGxhdG9yKToKKyAgICAgICAgKEpT
Qzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAg
ICAgKiBydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Oklu
dGxDb2xsYXRvckZ1bmNDb21wYXJlKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90
eXBlR2V0dGVyQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvclByb3RvdHlwZUZ1
bmNSZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3Jt
YXQpOgorICAgICAgICAoSlNDOjpjYWxsSW50bERhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSk6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SW50bE51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OmNhbGxJ
bnRsTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNG
b3JtYXROdW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0
dGVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdFByb3RvdHlwZUZ1bmNS
ZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OmFycmF5QnVmZmVyRnVuY0lzVmlldyk6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1
bmNTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpib3Vu
ZEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OmlzQm91bmRGdW5jdGlvbik6CisgICAgICAgIChKU0M6Omhhc0luc3RhbmNlQm91bmRG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlZEpTVW5kZWZpbmVk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldERhdGEpOgorICAgICAgICAoSlNDOjpzZXREYXRh
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZlcik6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6ZGF0YVZp
ZXdQcm90b0dldHRlckJ5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y0dldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KToKKyAg
ICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMik6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jR2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y0dldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNTZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQx
Nik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIpOgorICAgICAgICAo
SlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMik6CisgICAg
ICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCk6CisgICAgICAgICogcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlldyk6
CisgICAgICAgIChKU0M6OmNhbGxHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRlcmVkVHlwZWRBcnJheVR5
cGVFcnJvcik6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmND
b3B5V2l0aGluKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
SW5jbHVkZXMpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJ
bmRleE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9p
bik6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRl
eE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5j
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJG
dW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0
ZXJGdW5jQnl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJpdmF0ZUZ1bmNTb3J0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2
YXRlRnVuY1N1YmFycmF5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6bWFrZUJvdW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpo
YXNPd25MZW5ndGhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OmdldFRlbXBsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6ZW5xdWV1ZUpvYik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAg
ICAgKEpTQzo6Z2xvYmFsRnVuY1BhcnNlSW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1Bh
cnNlRmxvYXQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNFbmNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9u
ZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNVbmVzY2FwZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJv
cik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxl
ZUFuZENhbGxlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b0dldHRlcik6CisgICAg
ICAgIChKU0M6Omdsb2JhbEZ1bmNQcm90b1NldHRlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1
bmNCdWlsdGluTG9nKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
Lmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0UHJvbWlzZSk6CisgICAgICAgICogcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1vZHVsZU5hbWVzcGFjZU9i
amVjdFN5bWJvbEl0ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpydW5TdGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZik6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKEpTQzo6Y2Fs
bFByb21pc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OnByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0VHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1
bmNJc1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY0xlbmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNHZXRP
cmlnaW5hbENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY1NvcnQpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldCk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik6CisgICAgICAg
IChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAgICAoSlNDOjp0
eXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6dHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQ
cm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1
bmNCdWZmZXIpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxl
bmd0aCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9m
ZnNldCk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZSk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlND
Ojp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5nVGFnKToKKyAgICAgICAgKiBy
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL01h
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbE1hcCk6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdE1hcCk6CisgICAgICAgICogcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQpOgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5j
Q2xlYXIpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlND
OjptYXBQcm90b0Z1bmNHZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNIYXMpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNT
aXplKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jVmFsdWVzKToKKyAgICAgICAgKEpTQzo6
bWFwUHJvdG9GdW5jRW50cmllcyk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0tleXMpOgor
ICAgICAgICAoSlNDOjpwcml2YXRlRnVuY01hcEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBl
Lmg6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0
aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAg
ICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5j
QVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBVGFuMik6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NsejMyKToK
KyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNFeHApOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jSHlwb3QpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTG9n
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNS
b3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaWduKToKKyAgICAgICAgKEpTQzo6
bWF0aFByb3RvRnVuY1Npbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTcXJ0KToKKyAg
ICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Rhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNJTXVsKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FDb3NoKToKKyAgICAgICAgKEpT
Qzo6bWF0aFByb3RvRnVuY0FTaW5oKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW5o
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NicnQpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jQ29zaCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHBtMSk6CisgICAg
ICAgIChKU0M6Om1hdGhQcm90b0Z1bmNGcm91bmQpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9G
dW5jTG9nMXApOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTG9nMTApOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jTG9nMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW5o
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1RhbmgpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jVHJ1bmMpOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2Fk
ZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVy
UHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6
bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRl
clByb3RvdHlwZUZldGNoKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlSW5z
dGFudGlhdGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL051bGxHZXR0ZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OmNhbGxSZXR1cm5VbmRlZmluZWQpOgorICAgICAgICAqIHJ1bnRpbWUvTnVsbFNldHRlckZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFJldHVyblVuZGVmaW5lZCk6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdp
dGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlcik6CisgICAg
ICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yRnVuY0lzU2FmZUludGVnZXIpOgorICAgICAgICAq
IHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9G
dW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRml4ZWQp
OgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgIChK
U0M6OmludGVnZXJWYWx1ZVRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdpdGhPYmplY3RDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChKU0M6OmNhbGxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Om9iamVj
dENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1
Y3RvclNldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RGVzY3JpcHRvcnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5U3ltYm9scyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yS2V5
cyk6CisgICAgICAgIChKU0M6Om93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMpOgorICAgICAgICAo
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JDcmVhdGUpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgor
ICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9i
amVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpvYmplY3RD
b25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zy
b3plbik6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJcyk6CisgICAgICAgICogcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9i
amVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdl
dHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAg
ICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9i
amVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVu
Y1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpjdXN0b21BY2Nlc3NvckdldHRlcik6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjptYWtlUmV2b2NhYmxlUHJveHkpOgorICAg
ICAgICAoSlNDOjpwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9yVGhyb3dFcnJvcik6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFByb3h5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y2FsbFByb3h5KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAg
ICAgIChKU0M6OnBlcmZvcm1Qcm94eUNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9Qcm94
eVJldm9rZS5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eVJldm9rZSk6CisgICAgICAg
ICogcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZmxlY3RP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0Q29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6cmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6cmVm
bGVjdE9iamVjdEVudW1lcmF0ZSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RHZXQpOgor
ICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6
cmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RP
d25LZXlzKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNpb25zKToK
KyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFNldCk6CisgICAgICAgIChKU0M6OnJlZmxlY3RP
YmplY3RTZXRQcm90b3R5cGVPZik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKToKKyAgICAgICAg
KEpTQzo6cmVnRXhwQ29uc3RydWN0b3JJbnB1dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0
Y2gpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbik6CisgICAgICAg
IChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdF
eHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0
cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGlu
ZSk6CisgICAgICAgIChKU0M6OmVzU3BlY1JlZ0V4cENyZWF0ZSk6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNhbGxSZWdFeHBD
b25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwT2Jq
ZWN0U2V0TGFzdEluZGV4U3RyaWN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0U2V0TGFz
dEluZGV4Tm9uU3RyaWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1Rlc3RGYXN0KToKKyAgICAgICAgKEpTQzo6
cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY01hdGNo
RmFzdCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAo
SlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3Rv
R2V0dGVyR2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNl
KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxpbmUpOgorICAgICAgICAo
SlNDOjpyZWdFeHBQcm90b0dldHRlclN0aWNreSk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3Rv
R2V0dGVyVW5pY29kZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlclNvdXJjZSk6CisgICAgICAgIChKU0M6OnJl
Z0V4cFByb3RvRnVuY1NlYXJjaEZhc3QpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNT
cGxpdEZhc3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxTZXQpOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0
b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNO
ZXh0KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OnNldFByb3RvRnVuY0FkZCk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0NsZWFyKToKKyAg
ICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jRGVsZXRlKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9G
dW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6
OnNldFByb3RvRnVuY1ZhbHVlcyk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0VudHJpZXMp
OgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
cHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0UHJvdG90
eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21Db2Rl
UG9pbnQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgor
ICAgICAgICAoSlNDOjpjYWxsU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVtb3ZlVXNpbmdSZWdFeHBTZWFy
Y2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2gpOgorICAgICAgICAo
SlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIpOgorICAg
ICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAg
ICAgIChKU0M6Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNDaGFyQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ29kZVBvaW50QXQpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0
cik6CisgICAgICAgIChKU0M6OmJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBl
ckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6dG9Mb2NhbGVDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
VG9Mb2NhbGVMb3dlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvY2Fs
ZVVwcGVyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jQmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNJdGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9G
dW5jU3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RhcnRzV2l0aCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0VuZHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nSW5jbHVk
ZXNJbXBsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAg
ICAoSlNDOjpidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTm9y
bWFsaXplKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsU3ltYm9s
KToKKyAgICAgICAgKEpTQzo6c3ltYm9sQ29uc3RydWN0b3JGb3IpOgorICAgICAgICAoSlNDOjpz
eW1ib2xDb25zdHJ1Y3RvcktleUZvcik6CisgICAgICAgICogcnVudGltZS9TeW1ib2xQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
IChKU0M6OnN5bWJvbFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01h
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYWtNYXApOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RXZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKToKKyAgICAgICAg
KEpTQzo6cHJvdG9GdW5jV2Vha01hcEdldCk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtN
YXBIYXMpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwU2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWFrU2V0
KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2Vha1NldCk6CisgICAgICAgICogcnVudGltZS9X
ZWFrU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha1NldERlbGV0
ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXRIYXMpOgorICAgICAgICAoSlNDOjpw
cm90b0Z1bmNXZWFrU2V0QWRkKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmFzaCk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uREZHVHJ1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uTExpbnRUcnVlKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25KSVRUcnVlKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HQyk6CisgICAg
ICAgIChKU0M6OmZ1bmN0aW9uRWRlbkdDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Db2RlQmxv
Y2tGb3JGcmFtZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25QcmludFNvdXJjZUZvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
UHJpbnRCeXRlQ29kZUZvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnQpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvblByaW50Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Q
cmludFN0YWNrKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25WYWx1ZSk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uR2V0UElEKToKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwOgorICAg
ICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6d2ViQXNz
ZW1ibHlWYWxpZGF0ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUxpbmtFcnJvcik6
CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5TGlua0Vycm9yKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNz
ZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjp3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3Nl
bWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlGdW5j
dGlvblZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlGdW5jdGlvbkNvbXBpbGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IpOgor
ICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcik6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3Nl
bWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3cpOgorICAgICAgICAoSlND
Ojp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1i
bHlUYWJsZVByb3RvRnVuY1NldCk6CisKIDIwMTctMDEtMDMgIEpGIEJhc3RpZW4gIDxqZmJhc3Rp
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY2hlY2sgYW5kIHRl
c3QgaW4tY2FsbCAvIG91dC1jYWxsIHZhbHVlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4
LCAyMDEyLTIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTItMjAxMywgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdy
YWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzc2LDE4ICszNzYs
MTggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCisgICAgc3RhdGljIEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgICAgICBDdXN0b21HZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFt
aWNDYXN0PEN1c3RvbUdldHRlcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICAg
ICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxDdXN0b21HZXR0ZXIq
Pih0aGlzVmFsdWUpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgIGJvb2wgc2hvdWxkVGhy
b3cgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgInNob3VsZFRocm93IikpKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAgIGlm
IChzaG91bGRUaHJvdykKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigxMDApKTsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDEwMCk7CiAgICAgfQogfTsKIApAQCAtNDg0LDE1ICs0
ODQsMTUgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxSdW50aW1lQXJyYXkqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
ICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8UnVudGltZUFycmF5
Kj4odGhpc1ZhbHVlKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcih0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgVmVj
dG9yPGludD4gbV92ZWN0b3I7CkBAIC02NjksMTUgKzY2OSwxNSBAQCBwcml2YXRlOgogICAgICAg
ICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBSZWFkT25seSB8IEN1c3RvbUFj
Y2Vzc29yKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CisgICAgc3RhdGljIEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgICAgICBET01KSVROb2RlKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2Rl
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgICAgICBET01KSVROb2RlKiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2RlKj4odGhpc1ZhbHVlKTsKICAgICAgICAg
aWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNP
YmplY3QtPnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPnZh
bHVlKCkpOwogICAgIH0KIH07CiAKQEAgLTc2OCwyNyArNzY4LDI3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiZW5hYmxlRXhjZXB0aW9uIiksIDAsIGZ1bmN0aW9uRW5hYmxlRXhj
ZXB0aW9uLCBOb0ludHJpbnNpYywgMCk7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
KQorICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAgICAgYXV0byogb2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgICAg
ICBpZiAob2JqZWN0KQogICAgICAgICAgICAgb2JqZWN0LT5tX2VuYWJsZUV4Y2VwdGlvbiA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogICAgIHsKICAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PERPTUpJVE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PERPTUpJVE5vZGUqPih0aGlzVmFsdWUpOwogICAg
ICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7Ci0gICAgICAgIGlmIChhdXRvKiBkb21qaXRHZXR0ZXJDb21wbGV4ID0g
anNEeW5hbWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpKSB7CisgICAgICAgIGlmIChhdXRvKiBkb21qaXRHZXR0ZXJDb21wbGV4ID0ganNEeW5h
bWljQ2FzdDxET01KSVRHZXR0ZXJDb21wbGV4Kj4odGhpc1ZhbHVlKSkgewogICAgICAgICAgICAg
aWYgKGRvbWppdEdldHRlckNvbXBsZXgtPm1fZW5hYmxlRXhjZXB0aW9uKQotICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiRE9NSklUR2V0dGVyQ29tcGxleCBzbG93IGNh
bGwgZXhjZXB0aW9uIikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkRPTUpJVEdldHRl
ckNvbXBsZXggc2xvdyBjYWxsIGV4Y2VwdGlvbiIpKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKSk7CisgICAg
ICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKTsKICAgICB9CiAKICAgICBi
b29sIG1fZW5hYmxlRXhjZXB0aW9uIHsgZmFsc2UgfTsKQEAgLTgxOCw3ICs4MTgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2FmZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNhZmVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MjYsNyArODI2LDcgQEAgcHVibGljOgog
ICAgICAgICBET01KSVROb2RlKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2Rl
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+dmFsdWUoKSkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIodGhpc09iamVjdC0+dmFsdWUoKSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKEpJVCkKQEAgLTkwNywxMDkgKzkwNywxMDkgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFJvbwogCiBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsKIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVQcm94eShFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlUnVudGltZUFycmF5KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVJbXB1cmVHZXR0ZXIoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9i
amVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQ3JlYXRlRE9NSklUTm9kZU9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyT2JqZWN0KEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25D
cmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRGdW5jdGlvbk9iamVj
dChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlR2xvYmFsT2JqZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxl
Z2F0ZShFeGVjU3RhdGUqKTsKLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXRFbGVtZW50Um9vdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUm9vdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVudChFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0RWxl
bWVudChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRIaWRkZW5WYWx1ZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByaW50U3RkT3V0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TbGVlcFNlY29uZHMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3ZWVwKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GdWxsR0MoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRm9y
Y2VHQ1Nsb3dQYXRocyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uSGVhcFNpemUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFkZHJlc3NPZihFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0R2V0dGVyU2V0dGVyKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0
ZVJ1bnRpbWVBcnJheShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVJbXB1cmVHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9tR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVP
YmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlRE9NSklUR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckNvbXBsZXhPYmplY3QoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklU
RnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVHbG9iYWxPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhl
Y1N0YXRlKik7CisKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRFbGVt
ZW50Um9vdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25DcmVhdGVSb290KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uR2V0RWxlbWVudChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVTaW1wbGVPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRT
dGRPdXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJpbnRTdGRFcnIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRGVzY3JpYmUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRGVzY3JpYmVBcnJheShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDU3RhY2soRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GdWxsR0MoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWRlbkdDKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZvcmNlR0NTbG93UGF0aHMoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcFNpemUoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWRkcmVzc09m
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdl
dHRlclNldHRlcihFeGVjU3RhdGUqKTsKICNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3Rh
dGUqKTsKICNlbmRpZgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25WZXJzaW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJ1blN0cmluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFN0cmluZyhFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZpbGUoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNo
ZWNrU3ludGF4KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5ldmVySW5saW5lRnVuY3Rpb24oRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5v
REZHKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Ob0ZUTChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVt
YmVyT2ZERkdDb21waWxlcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVvcHRpbWl6YXRpb25SZXRyeUNvdW50KEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25U
cmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVjU3RhdGUqKTsKLXN0
YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUXVpdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UxKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTIo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blVuZGVmaW5lZDEoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblVuZGVmaW5lZDIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzSW50MzIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVmZmVjdGZ1bDQyKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JZGVudGl0eShF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TWFrZU1hc3F1ZXJhZGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJp
YWJsZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxv
Y2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1
dGlvbkNvdW50KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EcmFpbk1pY3JvdGFza3MoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzMzJCaXRQ
bGF0Zm9ybShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNT
YW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJT
dGF0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJ1blN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZpbGUoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTmV2ZXJJbmxpbmVG
dW5jdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob0RGRyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob0ZUTChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Ob09TUkV4aXRGdXp6aW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NPcHRpb25zKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSop
Oworc3RhdGljIE5PX1JFVFVSTl9XSVRIX1ZBTFVFIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblF1aXQoRXhlY1N0YXRlKik7CitzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblVuZGVmaW5lZDEoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVkMihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Jc0ludDMyKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVmZmVjdGZ1bDQyKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklkZW50aXR5KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2VNYXNx
dWVyYWRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJu
VHlwZUZvcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1
dGlvbkNvdW50KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkTW9kdWxlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9kdWxlU3lu
dGF4KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBs
YXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVy
U3RhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU3RhcnRT
YW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2Zp
bGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNh
bXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyhFeGVjU3RhdGUqKTsKICNlbmRpZgogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMo
RXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9k
dWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdf
RkxBR1MpCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNh
bXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyhF
eGVjU3RhdGUqKTsKICNlbmRpZgogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblNoYWRvd0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJl
ZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
SXNSb3BlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0aW9uc09uU3RhY2soRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzUm9wZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmln
aW4oRXhlY1N0YXRlKik7CiAKIHN0cnVjdCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3RyaWN0
TW9kZSB7CkBAIC0xNTUzLDcgKzE1NTMsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMCiB9CiAKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBGSUxFKiBvdXQpCitzdGF0aWMgSlNWYWx1ZSBwcmludEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTU2Miw3ICsx
NTYyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwoRXhlYwogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlmICh2YWx1ZS5p
c1N0cmluZygpICYmIFdURjo6ZXF1YWwoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKS5pbXBs
KCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpCiAgICAgICAgICAgICB0ZXN0MjYyQXN5
bmNQYXNzZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKQEAgLTE1
NzEsNyArMTU3MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWMK
ICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAgICAgYXV0byB2aWV3V2l0aFN0cmlu
ZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52aWV3V2l0aFVu
ZGVybHlpbmdTdHJpbmcoKmV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgaWYgKGZwcmludGYob3V0LCAiJXMiLCB2aWV3V2l0aFN0cmluZy52aWV3
LnV0ZjgoKS5kYXRhKCkpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CkBAIC0x
NTc5LDU1ICsxNTc5LDU1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4
ZWMKICAgICBmcHV0YygnXG4nLCBvdXQpOwogZmFpbDoKICAgICBmZmx1c2gob3V0KTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRT
dGRPdXQoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBwcmludEludGVybmFsKGV4ZWMsIHN0ZG91
dCk7IH0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihF
eGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50SW50ZXJuYWwoZXhlYywgc3RkZXJyKTsgfQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRPdXQoRXhlY1N0YXRlKiBleGVj
KSB7IHJldHVybiBwcmludEludGVybmFsKGV4ZWMsIHN0ZG91dCk7IH0KK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJp
bnRJbnRlcm5hbChleGVjLCBzdGRlcnIpOyB9CiAKICNpZm5kZWYgTkRFQlVHCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IGV4ZWMtPnZtKCku
dG9wVk1FbnRyeUZyYW1lOwogICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxs
ZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOwogICAgIGlmIChjYWxsZXJGcmFtZSkKICAgICAgICAg
ZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJGcmFtZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGVidWcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8gdmlld1dpdGhT
dHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5
aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZw
cmludGYoc3RkZXJyLCAiLS0+ICVzXG4iLCB2aWV3V2l0aFN0cmluZy52aWV3LnV0ZjgoKS5kYXRh
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlQXJyYXko
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2Fz
dDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgQVNDSUlM
aXRlcmFsKCI8bm90IG9iamVjdD4iKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCI8QnV0dGVyZmx5OiAiLCBSYXdQb2ludGVy
KG9iamVjdC0+YnV0dGVyZmx5KCkpLCAiOyBwdWJsaWMgbGVuZ3RoOiAiLCBvYmplY3QtPmdldEFy
cmF5TGVuZ3RoKCksICI7IHZlY3RvciBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0VmVjdG9yTGVuZ3Ro
KCksICI+IikpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBBU0NJ
SUxpdGVyYWwoIjxub3Qgb2JqZWN0PiIpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIHRvU3RyaW5nKCI8QnV0dGVyZmx5OiAiLCBSYXdQb2ludGVyKG9iamVjdC0+YnV0dGVy
Zmx5KCkpLCAiOyBwdWJsaWMgbGVuZ3RoOiAiLCBvYmplY3QtPmdldEFycmF5TGVuZ3RoKCksICI7
IHZlY3RvciBsZW5ndGg6ICIsIG9iamVjdC0+Z2V0VmVjdG9yTGVuZ3RoKCksICI+IikpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2xlZXBTZWNvbmRzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNsZWVwU2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAxKQog
ICAgICAgICBzbGVlcChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAogY2xhc3MgRnVuY3Rpb25KU0NTdGFja0Z1bmN0b3IgewpAQCAtMTY0Nyw3ICsx
NjQ3LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmdCdWlsZGVyJiBtX3RyYWNlOwogfTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHRyYWNlOwogICAgIHRyYWNlLmFwcGVuZExpdGVyYWwo
Ii0tPiBTdGFjayB0cmFjZTpcbiIpOwpAQCAtMTY1NSwxNiArMTY1NSwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDCiAgICAgRnVuY3Rpb25KU0NTdGFja0Z1bmN0
b3IgZnVuY3Rvcih0cmFjZSk7CiAgICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVzIiwgdHJhY2UudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRl
Um9vdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVh
dGVSb290KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFJvb3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gUm9vdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVFbGVtZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwpAQCAtMTY3MiwzNyArMTY3MiwzNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQ3JlCiAKICAgICBSb290KiByb290ID0ganNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+
YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQgd2l0aG91dCBhIFJvb3QuIikpKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShFbGVtZW50OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgcm9vdCkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBF
bGVtZW50IHdpdGhvdXQgYSBSb290LiIpKSk7CisgICAgcmV0dXJuIEVsZW1lbnQ6OmNyZWF0ZSh2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCByb290KTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0RWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1p
Y0Nhc3Q8Um9vdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIXJvb3QpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIEVsZW1lbnQqIHJlc3VsdCA9IHJvb3QtPmVsZW1lbnQoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IHJlc3VsdCA6IGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBqc0R5bmFtaWNDYXN0PEVsZW1lbnQqPihleGVjLT5hcmd1bWVudCgwKSk7
CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KGV4ZWMtPmFyZ3VtZW50KDEp
KTsKICAgICBpZiAoZWxlbWVudCAmJiByb290KQogICAgICAgICBlbGVtZW50LT5zZXRSb290KGV4
ZWMtPnZtKCksIHJvb3QpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVTaW1wbGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFNpbXBsZU9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBTaW1wbGVPYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwpAQCAtMTcxMSwxMiArMTcxMSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR2V0CiAgICAgU2ltcGxlT2JqZWN0KiBzaW1wbGVPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PFNpbXBsZU9iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIXNp
bXBsZU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiSW52YWxpZCB1c2Ugb2YgZ2V0SGlkZGVuVmFsdWUgdGVzdCBmdW5jdGlvbiIpKTsK
LSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2ltcGxlT2JqZWN0LT5oaWRkZW5WYWx1
ZSgpKTsKKyAgICByZXR1cm4gc2ltcGxlT2JqZWN0LT5oaWRkZW5WYWx1ZSgpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwpAQCAtMTcyNSwzMyArMTcyNSwzMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAgICAgU2ltcGxlT2JqZWN0KiBzaW1wbGVPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFNpbXBsZU9iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAo
VU5MSUtFTFkoIXNpbXBsZU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCB1c2Ugb2Ygc2V0SGlkZGVuVmFsdWUgdGVzdCBm
dW5jdGlvbiIpKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsK
ICAgICBzaW1wbGVPYmplY3QtPnNldEhpZGRlblZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0
YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNPYmplY3QqIGpz
VGFyZ2V0ID0gYXNPYmplY3QodGFyZ2V0LmFzQ2VsbCgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGpzVGFyZ2V0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSwgSW1wdXJlUHJv
eHlUeXBlKTsKICAgICBKU1Byb3h5KiBwcm94eSA9IEpTUHJveHk6OmNyZWF0ZShleGVjLT52bSgp
LCBzdHJ1Y3R1cmUsIGpzVGFyZ2V0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3h5
KTsKKyAgICByZXR1cm4gcHJveHk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSdW50aW1lQXJyYXkqIGFycmF5ID0g
UnVudGltZUFycmF5OjpjcmVhdGUoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
cnJheSk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ3JlYXRlSW1wdXJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUltcHVyZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjAsNTAgKzE3NjAsNTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogICAgICAgICBkZWxlZ2F0ZSA9IGFzT2JqZWN0KHRh
cmdldC5hc0NlbGwoKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbXB1cmVHZXR0ZXI6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGpzTnVsbCgpKTsKICAgICBJbXB1cmVHZXR0ZXIqIHJlc3VsdCA9IEltcHVyZUdldHRlcjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgZGVsZWdhdGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQ3VzdG9tR2V0dGVyT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRl
ck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDdXN0b21HZXR0ZXI6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKICAg
ICBDdXN0b21HZXR0ZXIqIHJlc3VsdCA9IEN1c3RvbUdldHRlcjo6Y3JlYXRlKGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25D
cmVhdGVET01KSVROb2RlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
RE9NSklUTm9kZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgRE9NSklUR2V0dGVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgRE9NSklUR2V0dGVy
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBqc051bGwoKSkpKTsKICAgICBET01KSVROb2RlKiByZXN1bHQgPSBET01KSVROb2RlOjpjcmVh
dGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJPYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gRE9NSklUR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7CiAgICAgRE9NSklUR2V0
dGVyKiByZXN1bHQgPSBET01KSVRHZXR0ZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklU
R2V0dGVyQ29tcGxleE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IERPTUpJVEdldHRlckNvbXBsZXg6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKICAgICBET01KSVRHZXR0ZXJD
b21wbGV4KiByZXN1bHQgPSBET01KSVRHZXR0ZXJDb21wbGV4OjpjcmVhdGUoZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklU
RnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gRE9NSklURnVuY3Rpb25PYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGpzTnVsbCgpKTsKICAgICBET01KSVRGdW5jdGlvbk9iamVjdCogcmVzdWx0ID0gRE9NSklURnVu
Y3Rpb25PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CkBAIC0xODExLDc3ICsxODExLDc2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TZXQKIAogICAgIEpTVmFsdWUgYmFzZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlm
ICghYmFzZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGRl
bGVnYXRlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFkZWxlZ2F0ZS5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBJbXB1cmVHZXR0ZXIqIGltcHVyZUdldHRlciA9
IGpzRHluYW1pY0Nhc3Q8SW1wdXJlR2V0dGVyKj4oYXNPYmplY3QoYmFzZS5hc0NlbGwoKSkpOwog
ICAgIGlmIChVTkxJS0VMWSghaW1wdXJlR2V0dGVyKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJhcmd1bWVudCBpcyBub3QgYW4gSW1wdXJlR2V0
dGVyIikpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAgICAgaW1wdXJlR2V0dGVyLT5zZXREZWxlZ2F0ZSh2bSwgYXNPYmplY3Qo
ZGVsZWdhdGUuYXNDZWxsKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3ZWVwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxH
YXJiYWdlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihleGVjLT5oZWFw
KCktPnNpemVBZnRlckxhc3RGdWxsQ29sbGVjdGlvbigpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0
U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Rpb24oKSkpOwor
ICAgIHJldHVybiBqc051bWJlcihleGVjLT5oZWFwKCktPnNpemVBZnRlckxhc3RGdWxsQ29sbGVj
dGlvbigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5H
QyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0Mo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGV4
ZWMtPmhlYXAoKS0+Y29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEVk
ZW5Db2xsZWN0aW9uKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXpl
QWZ0ZXJMYXN0RWRlbkNvbGxlY3Rpb24oKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Gb3JjZUdDU2xvd1BhdGhzKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Gb3JjZUdDU2xvd1BhdGhzKEV4ZWNTdGF0ZSopCiB7CiAgICAgLy8g
SXQncyBiZXN0IGZvciB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBjYWxsZWQgaW4gdGhlIAog
ICAgIC8vIEpTIHByb2dyYW0gc28gdGhlIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBiZWZvcmUgd2Ug
SklULgogICAgIE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSA9IHRydWU7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZSgpKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZSgpKTsKIH0KIAogLy8gVGhpcyBmdW5j
dGlvbiBpcyBub3QgZ2VuZXJhbGx5IHZlcnkgaGVscGZ1bCBpbiA2NC1iaXQgY29kZSBhcyB0aGUg
dGFnIGFuZCBwYXlsb2FkCiAvLyBzaGFyZSBhIHJlZ2lzdGVyLiBCdXQgaW4gMzItYml0IEpJVGVk
IGNvZGUgdGhlIHRhZyBtYXkgbm90IGJlIGNoZWNrZWQgaWYgYW4KIC8vIG9wdGltaXphdGlvbiBy
ZW1vdmVzIHR5cGUgY2hlY2tpbmcgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIGluID09PS4KLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25BZGRyZXNzT2YoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWRkcmVzc09mKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF2
YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgLy8gTmVlZCB0byBjYXN0
IHRvIHVpbnQ2NF90IHNvIGJpdHdpc2VfY2FzdCB3aWxsIHBsYXkgYWxvbmcuCiAgICAgdWludDY0
X3QgYXNOdW1iZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc0NlbGwoKSk7
Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYXNOdW1iZXIpKSk7Ci0gICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgIHJldHVybiBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihhc051bWJlcikp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdl
dHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uR2V0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBleGVjLT5hcmd1
bWVudCgxKTsKICAgICBpZiAoIXByb3BlcnR5LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAgIHZhbHVlLmdldFByb3BlcnR5U2xvdChleGVj
LCBhc1N0cmluZyhwcm9wZXJ0eSktPnRvSWRlbnRpZmllcihleGVjKSwgc2xvdCk7CkBAIC0xODky
LDI2ICsxODkxLDI2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
ICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSopCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSopCiB7CiAgICAgLy8gV2UgbmVl
ZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1vemlsbGEgSlMgdGVz
dHMgYnV0IGZvciBub3cKICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSBkbyBhbnkgdmVyc2lvbi1z
cGVjaWZpYyBoYW5kbGluZwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0
cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAg
ICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIp
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwogCiAgICAg
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4o
KSk7CiAKQEAgLTE5MjksMTkgKzE5MjgsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblJ1bgogCiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc2NvcGUsIGV4Y2VwdGlvbik7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSkpOworICAgIHJldHVybiBqc051bWJl
cihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUnVuU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJ1blN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOwogCkBAIC0xOTU2
LDIyICsxOTU1LDIyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
IAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgc2NvcGUudGhyb3dFeGNlcHRpb24oZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
ICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gZ2xvYmFsT2JqZWN0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
b2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNo
U2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICAKQEAg
LTE5NzksMzcgKzE5NzgsMzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGV2YWx1YXRpb25FeGNlcHRpb24pOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG1ha2VTb3VyY2Uoc291cmNlQ29kZSwgZXhlYy0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1Zh
bHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9u
KQogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXZhbHVhdGlvbkV4Y2VwdGlv
bik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmlsZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkRmlsZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgYm9vbCBpc0JpbmFyeSA9IGZhbHNlOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gZXhlYy0+YXJndW1l
bnQoMSkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBpZiAodHlwZSAhPSAiYmluYXJ5IikKICAgICAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJFeHBlY3RlZCAnYmluYXJ5JyBhcyBzZWNvbmQg
YXJndW1lbnQuIik7CiAgICAgICAgIGlzQmluYXJ5ID0gdHJ1ZTsKQEAgLTIwMjAsMjYgKzIwMTks
MjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKTsK
IAogICAgIGlmICghaXNCaW5hcnkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihjb250ZW50KSkpOworICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihjb250ZW50KSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVy
ZShUeXBlVWludDgpOwogICAgIGF1dG8gbGVuZ3RoID0gY29udGVudC5zaXplKCk7CiAgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNyZWF0ZVVpbnQ4VHlwZWRBcnJheShleGVjLCBzdHJ1Y3R1cmUsIEFy
cmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMoY29udGVudC5yZWxlYXNlQnVmZmVyKCkubGVha1B0
cigpLCBsZW5ndGgsIFtdICh2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9KSwgMCwgbGVuZ3RoKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dU
RlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFZlY3Rv
cjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0o
ZmlsZU5hbWUsIHNjcmlwdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291
bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVu
IGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKQEAgLTIwNTIsNzYgKzIwNTEsNzYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZQogCiAgICAgaWYgKCF2YWxpZFN5bnRheCkK
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHN5bnRheEV4Y2VwdGlvbik7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1T
KCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKIH0K
IAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkg
ewogICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49
IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OnNldEZsYWco
ZmxhZyk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAg
IHJldHVybiBqc051bGwoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNsZWFyU2FtcGxpbmdGbGFncyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewog
ICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49IDEp
ICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OmNsZWFyRmxhZyhm
bGFnKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAg
cmV0dXJuIGpzTnVsbCgpOwogfQogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25T
dGFjayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT52bSgpLnNoYWRvd0NoaWNrZW4oKS5mdW5jdGlvbnNPblN0YWNrKGV4ZWMpKTsKKyAgICByZXR1
cm4gZXhlYy0+dm0oKS5zaGFkb3dDaGlja2VuKCkuZnVuY3Rpb25zT25TdGFjayhleGVjKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZE5vdFRocm93KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBleGVjLT52bSgpLnNldEdsb2JhbENvbnN0UmVkZWNs
YXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbSgpLnNlZWQoKSkpOworICAgIHJldHVybiBqc051
bWJlcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndlYWtSYW5kb20oKS5zZWVkKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSYW5kb21T
ZWVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIHNlZWQg
PSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbSgp
LnNldFNlZWQoc2VlZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbklzUm9wZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Jc1JvcGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgYXJn
dW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWFyZ3VtZW50LmlzU3RyaW5nKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIGltcGwg
PSBhc1N0cmluZyhhcmd1bWVudCktPnRyeUdldFZhbHVlSW1wbCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKCFpbXBsKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbighaW1w
bCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJTb3Vy
Y2VPcmlnaW4oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNhbGxlclNvdXJjZU9yaWdpbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFNvdXJjZU9yaWdp
biBzb3VyY2VPcmlnaW4gPSBzdGF0ZS0+Y2FsbGVyU291cmNlT3JpZ2luKCk7CiAgICAgaWYgKHNv
dXJjZU9yaWdpbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhzdGF0ZSwgc291cmNl
T3JpZ2luLnN0cmluZygpKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4g
anNTdHJpbmcoc3RhdGUsIHNvdXJjZU9yaWdpbi5zdHJpbmcoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKICAgICBpbnQgYzsKQEAgLTIxMzIsNDcgKzIxMzEs
NDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgICAgICBs
aW5lLmFwcGVuZChjKTsKICAgICB9CiAgICAgbGluZS5hcHBlbmQoJ1wwJyk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBsaW5lLmRhdGEoKSkpOworICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBsaW5lLmRhdGEoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25QcmVjaXNlVGltZShFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJlY2lzZVRpbWUoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGN1cnJlbnRUaW1lKCkpKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIoY3VycmVudFRpbWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbk5ldmVySW5saW5lRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0TmV2ZXJJbmxpbmUoZXhlYykpOworICAgIHJl
dHVybiBzZXROZXZlcklubGluZShleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbk5vREZHKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk5vREZHKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHNldE5ldmVyT3B0aW1pemUoZXhlYykpOworICAgIHJldHVybiBzZXROZXZlck9wdGlt
aXplKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9G
VEwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmFyZ3VtZW50KDApKSkgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAg
ICAgICAgIGV4ZWN1dGFibGUtPnNldE5ldmVyRlRMT3B0aW1pemUodHJ1ZSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5v
T1NSRXhpdEZ1enppbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uTm9PU1JFeGl0RnV6emluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzZXRDYW5ub3RVc2VPU1JFeGl0RnV6emluZyhleGVjKSk7CisgICAgcmV0
dXJuIHNldENhbm5vdFVzZU9TUkV4aXRGdXp6aW5nKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9wdGlt
aXplTmV4dEludm9jYXRpb24oZXhlYykpOworICAgIHJldHVybiBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVt
YmVyT2ZERkdDb21waWxlcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBpbGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlck9mREZHQ29tcGlsZXMoZXhlYykpOworICAgIHJldHVy
biBudW1iZXJPZkRGR0NvbXBpbGVzKGV4ZWMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZVR5cGU+CkBAIC0yMTg0LDEwOCArMjE4MywxMDggQEAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19mdW5kYW1lbgogICAgIG9wdGlvbnNPYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnRp
ZmllciwgSlNWYWx1ZSh2YWx1ZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25KU0NPcHRpb25zKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCog
b3B0aW9uc09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogI2RlZmluZSBGT1Jf
RUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBk
ZXNjcmlwdGlvbl8pIFwKICAgICBhZGRPcHRpb24oZXhlYy0+dm0oKSwgb3B0aW9uc09iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1lXygpKTsK
ICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9O
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvcHRpb25zT2JqZWN0KTsKKyAgICByZXR1cm4g
b3B0aW9uc09iamVjdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGJsb2NrID0gZ2V0U29tZUJhc2VsaW5lQ29kZUJs
b2NrRm9yRnVuY3Rpb24oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghYmxvY2spCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpOworICAgICAgICByZXR1cm4g
anNOdW1iZXIoMCk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihi
bG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSkpOworICAgIHJldHVybiBqc051bWJl
cihibG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZmZXIo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTm90IGVub3Vn
aCBhcmd1bWVudHMiKSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRz
IikpKTsKICAgICAKICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpT
QXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiRXhwZWN0ZWQgYW4gYXJyYXkgYnVmZmVyIikp
KSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJFeHBlY3RlZCBhbiBhcnJheSBidWZmZXIiKSkpOwogICAg
IAogICAgIEFycmF5QnVmZmVyQ29udGVudHMgZHVtbXlDb250ZW50czsKICAgICBidWZmZXItPmlt
cGwoKS0+dHJhbnNmZXJUbyhkdW1teUNvbnRlbnRzKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxv
Y2soRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFpbE5l
eHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjKQogewogICAgIGV4ZWMtPnZtKCkuc2V0RmFp
bE5leHROZXdDb2RlQmxvY2soKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqKQogewogICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNT
KTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAgICAgLy8gV2l0aG91dCB0aGlzLCBWaXN1YWwgU3R1
ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1
ZS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogI2VuZGlmCiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQWJvcnQoRXhlY1N0YXRlKikKIHsKICAgICBDUkFTSCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UxKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsgfQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkZhbHNlMihFeGVjU3RhdGUqKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGZhbHNlKSk7IH0KK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhbHNl
MShFeGVjU3RhdGUqKSB7IHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOyB9CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25GYWxzZTIoRXhlY1N0YXRlKikgeyByZXR1cm4ganNCb29sZWFuKGZh
bHNlKTsgfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVk
MShFeGVjU3RhdGUqKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IH0K
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmluZWQyKEV4ZWNTdGF0
ZSopIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgfQotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzSW50MzIoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVkMShFeGVjU3RhdGUqKSB7IHJldHVy
biBqc1VuZGVmaW5lZCgpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmlu
ZWQyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbklzSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYg
KCFleGVjLT5hcmd1bWVudChpKS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihmYWxzZSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uSWRlbnRpdHkoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZXhlYy0+YXJndW1lbnQoMCkpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25JZGVudGl0eShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPmFyZ3Vt
ZW50KDApOyB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZmZlY3Rm
dWw0MihFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWZmZWN0ZnVs
NDIoRXhlY1N0YXRlKikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDQy
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKDQyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbk1ha2VNYXNxdWVyYWRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoTWFzcXVlcmFkZXI6OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gTWFzcXVlcmFk
ZXI6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQ3VzdG9tUHJvcGVydGll
cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0
b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzT2JqZWN0KHZhbHVlKS0+aGFzQ3VzdG9tUHJv
cGVydGllcygpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihhc09iamVjdCh2YWx1ZSktPmhhc0N1c3RvbVBy
b3BlcnRpZXMoKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFR5cGVzRm9y
QWxsVmFyaWFibGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBleGVjLT52bSgpLmR1bXBUeXBl
UHJvZmlsZXJEYXRhKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVy
KCkpOwogICAgIGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KEFTQ0lJTGl0ZXJhbCgianNjIFRlc3RpbmcgQVBJOiBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVz
c2lvbiIpKTsKQEAgLTIzMDAsMTAgKzIyOTksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkZpbgogICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2Uo
KS5zdGFydE9mZnNldCgpKTsKICAgICAKICAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZt
KCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIGV4ZWMtPnZtKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNPTlBh
cnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAgICByZXR1cm4gSlNPTlBhcnNlKGV4ZWMsIGpzb25T
dHJpbmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJu
VHlwZUZvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVj
LT52bSgpLnR5cGVQcm9maWxlcigpKTsKICAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rp
b25SZXR1cm5UeXBlRm9yIikpOwpAQCAtMjMxNCwxNyArMjMxMywxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBleGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Np
b25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sIG9m
ZnNldCwgZXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZXhlYy0+dm0oKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmluZykpOworICAgIHJldHVybiBK
U09OUGFyc2UoZXhlYywganNvblN0cmluZyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlv
blJhbmdlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0o
KS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwogICAgIGV4ZWMtPnZtKCkuY29udHJvbEZsb3dQcm9m
aWxlcigpLT5kdW1wRGF0YSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmNvbnRyb2xG
bG93UHJvZmlsZXIoKSk7CiAKQEAgLTIzMzksMTAgKzIzMzgsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhcwogICAgIGludCBvZmZzZXQgPSBzb3VyY2VDb2RlVGV4
dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwog
ICAgIAogICAgIGJvb2wgaGFzRXhlY3V0ZWQgPSBleGVjLT52bSgpLmNvbnRyb2xGbG93UHJvZmls
ZXIoKS0+aGFzQmFzaWNCbG9ja0F0VGV4dE9mZnNldEJlZW5FeGVjdXRlZChvZmZzZXQsIGV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIGV4ZWMtPnZtKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGhhc0V4ZWN1dGVkKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihoYXNFeGVj
dXRlZCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25CYXNpY0Js
b2NrRXhlY3V0aW9uQ291bnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIoKSk7CiAKQEAg
LTIzNTcsODcgKzIzNTYsODcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkJhcwogICAgIGludCBvZmZzZXQgPSBzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBl
eGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwogICAgIAogICAgIHNpemVfdCBleGVj
dXRpb25Db3VudCA9IGV4ZWMtPnZtKCkuY29udHJvbEZsb3dQcm9maWxlcigpLT5iYXNpY0Jsb2Nr
RXhlY3V0aW9uQ291bnRBdFRleHRPZmZzZXQob2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgp
LCBleGVjLT52bSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoZXhlY3V0
aW9uQ291bnQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShleGVjdXRpb25Db3VudCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4
ZWNTdGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25G
dXp6KEV4ZWNTdGF0ZSopCiB7CiAgICAgT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpID0gdHJ1
ZTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkRyYWluTWljcm90YXNrcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgZXhlYy0+
dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSXMzMkJpdFBsYXRmb3JtKEV4ZWNTdGF0ZSopCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JczMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKikKIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShK
U0M6OkpTVmFsdWU6OkpTRmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShKU0M6OkpTVmFsdWU6
OkpTRmFsc2UpOwogI2Vsc2UKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlND
OjpKU1ZhbHVlOjpKU1RydWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpT
VHJ1ZSk7CiAjZW5kaWYKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJp
bmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAg
aWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkp
KTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpT
SW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGZp
bGVOYW1lKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBl
cnJvcjsKICAgICBKU0Z1bmN0aW9uKiBlcnJvckhhbmRsZXIgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMSwgU3RyaW5nKCksIFsm
XShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAgICAgZXJyb3IgPSBleGVjLT5hcmd1bWVudCgwKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfSk7CiAKICAgICBwcm9taXNlLT50aGVuKGV4ZWMs
IG51bGxwdHIsIGVycm9ySGFuZGxlcik7CiAgICAgdm0uZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAg
aWYgKGVycm9yKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBlcnJvcikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJy
b3IpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVCdWlsdGluKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxIHx8ICFleGVj
LT5hcmd1bWVudCgwKS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0
cmluZyBmdW5jdGlvblRleHQgPSBhc1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSktPnZhbHVlKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4dCwgeyB9KTsKICAgICBKU0Z1bmN0
aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBjcmVhdGVC
dWlsdGluRXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdCktPmxpbmsodm0sIHNvdXJjZSksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmMpOworICAgIHJldHVybiBmdW5jOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlR2xvYmFsT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0
ZUdsb2JhbE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBH
bG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5n
PigpKSk7CisgICAgcmV0dXJuIEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9kdWxl
U3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3Vy
Y2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAgICBzdG9wV2F0
Y2guc3RhcnQoKTsKQEAgLTI0NDcsMjAgKzI0NDYsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKICAgICBpZiAoIXZh
bGlkU3ludGF4KQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIHRvU3RyaW5nKCJTeW50YXhFcnJvcjogIiwgZXJyb3IubWVzc2FnZSgp
LCAiOiIsIGVycm9yLmxpbmUoKSkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0b1N0cmluZygiU3lu
dGF4RXJyb3I6ICIsIGVycm9yLm1lc3NhZ2UoKSwgIjoiLCBlcnJvci5saW5lKCkpKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9m
aWxlcihFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxhdGZvcm1T
dXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKikKIHsKICNpZiBFTkFCTEUoU0FNUExJ
TkdfUFJPRklMRVIpCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTQzo6SlNW
YWx1ZTo6SlNUcnVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU1RydWUp
OwogI2Vsc2UKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNDOjpKU1ZhbHVl
OjpKU0ZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU0ZhbHNlKTsK
ICNlbmRpZgogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJh
dGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMjQ3MCw1MyAr
MjQ2OSw1MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuCiAgICAg
c25hcHNob3RCdWlsZGVyLmJ1aWxkU25hcHNob3QoKTsKIAogICAgIFN0cmluZyBqc29uU3RyaW5n
ID0gc25hcHNob3RCdWlsZGVyLmpzb24oKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXNldFN1cGVyU2FtcGxlclN0YXRlKEV4ZWNT
dGF0ZSopCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXNldFN1cGVyU2FtcGxlclN0
YXRlKEV4ZWNTdGF0ZSopCiB7CiAgICAgcmVzZXRTdXBlclNhbXBsZXJTdGF0ZSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbnN1cmVB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYg
KEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1l
bnQoMCkpKQogICAgICAgICAgICAgb2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0o
KSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1By
b2ZpbGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblN0
YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU2FtcGxpbmdQcm9m
aWxlciYgc2FtcGxpbmdQcm9maWxlciA9IGV4ZWMtPnZtKCkuZW5zdXJlU2FtcGxpbmdQcm9maWxl
cihXVEY6OlN0b3B3YXRjaDo6Y3JlYXRlKCkpOwogICAgIHNhbXBsaW5nUHJvZmlsZXIubm90aWNl
Q3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAgICAgc2FtcGxpbmdQcm9maWxl
ci5zdGFydCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2Vz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghdm0uc2FtcGxpbmdQ
cm9maWxlcigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlNhbXBsaW5nIHBy
b2ZpbGVyIHdhcyBuZXZlciBzdGFydGVkIikpKSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJTYW1wbGlu
ZyBwcm9maWxlciB3YXMgbmV2ZXIgc3RhcnRlZCIpKSk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHZtLnNhbXBsaW5nUHJvZmlsZXIoKS0+c3RhY2tUcmFjZXNBc0pTT04oKTsKLSAgICBFbmNv
ZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25T
dHJpbmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5n
KTsKICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWF4QXJndW1lbnRzKEV4ZWNTdGF0ZSopCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKikKIHsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKSk7
CisgICAgcmV0dXJuIGpzTnVtYmVyKEpTQzo6bWF4QXJndW1lbnRzKTsKIH0KIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKQEAgLTI2MTEsNyArMjYxMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGNhbGxX
YXNtRnVuY3Rpb24oVk0qIHZtLCAKIAogLy8gdGVzdFdhc21Nb2R1bGUoSlNBcnJheUJ1ZmZlclZp
ZXcgc291cmNlLCBudW1iZXIgZnVuY3Rpb25Db3VudCwgLi4uW1tXYXNtVmFsdWUsIFtXYXNtVmFs
dWVdXV0pIHdoZXJlIHRoZSBpdGggY29weSBvZiBbW3Jlc3VsdCwgW2FyZ3NdXV0gaXMgYSBsaXN0
CiAvLyBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpdGggd2FzbSBmdW5jdGlvbiBh
cyB3ZWxsIGFzIHRoZSBleHBlY3RlZCByZXN1bHQuIFdhc21WYWx1ZSBpcyBhbiBvYmplY3Qgd2l0
aCAidHlwZSIgYW5kICJ2YWx1ZSIgcHJvcGVydGllcy4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRlc3RXYXNtTW9kdWxl
RnVuY3Rpb25zKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI2ODEsNyArMjY4
MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAg
fQogICAgIH0KIAotICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFQkxZKQpAQCAtMjkx
NCwxMiArMjkxMywxMiBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3Qq
CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bGZpbGxIYW5kbGVyID0gSlNOYXRpdmVTdGRG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJiwgaXNMYXN0
RmlsZV0oRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24o
aXNMYXN0RmlsZSwgZmFsc2UsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIHJlamVjdEhhbmRsZXIgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsmLCBpc0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMp
IHsKICAgICAgICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihpc0xhc3RGaWxlLCB0cnVlLCBleGVj
LT5hcmd1bWVudCgwKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBwcm9taXNlLT50aGVuKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBmdWxmaWxsSGFuZGxlciwgcmVqZWN0SGFuZGxlcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNp
b24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTMgKzM2LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBzdHJ1Y3QgQVBJQ2FsbGJhY2tGdW5jdGlvbiB7CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0
ZSopOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdChFeGVjU3RhdGUqKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoRXhlY1N0YXRl
Kik7CiAKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjcsMTMgKzY3LDEzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKIAogICAgIC8vIHJlc3VsdCBtdXN0IGJlIGEgdmFs
aWQgSlNWYWx1ZS4KICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgcmVzdWx0KSk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgcmVzdWx0KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0
aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTcsMTUg
Kzk3LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKICAgICAg
ICAgfQogICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgLy8gcmVzdWx0
IG11c3QgYmUgYSB2YWxpZCBKU1ZhbHVlLgogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gdG9KUyhyZXN1
bHQpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmpl
Y3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+
Y2xhc3NSZWYoKSwgMCkpKTsKKyAgICByZXR1cm4gdG9KUyhKU09iamVjdE1ha2UoY3R4LCBqc0Nh
c3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5jbGFzc1JlZigpLCAwKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjI0LDEyICsyMjQsMTIgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1Zh
bHVlKTsKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChFbmNv
ZGVkSlNWYWx1ZSk7CiAgCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbChFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3QoRXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0KEV4ZWNTdGF0ZSopOwogICAgCiAgICAgSlNWYWx1ZSBnZXRTdGF0aWNWYWx1ZShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzdGF0aWNG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
LSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3RhdGljRnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSBjYWxsYmFja0dldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTQ2FsbGJhY2tPYmplY3REYXRhPiBtX2NhbGxi
YWNrT2JqZWN0RGF0YTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEwMjQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNDIxLDcgKzQyMSw3IEBAIENvbnN0cnVjdFR5cGUgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjoKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLUVuY29kZWRK
U1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpjb25zdHJ1Y3QoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDQ1LDEyICs0NDUsMTIgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gZ2V0Q29uc3Ry
dWN0RGF0YSBzaG91bGQgcHJldmVudCB1cyBmcm9tIHJlYWNoaW5nIGhlcmUKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxh
dGUgPGNsYXNzIFBhcmVudD4KQEAgLTQ5NCw3ICs0OTQsNyBAQCBDYWxsVHlwZSBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldENhCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNhbGwoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNhbGwoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNTE4LDEyICs1MTgsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlND
YWxsYmFja09iamVjdDxQYXJlbnQ+OgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9K
UyhleGVjLCBleGNlcHRpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gZ2V0Q2FsbERhdGEgc2hv
dWxkIHByZXZlbnQgdXMgZnJvbSByZWFjaGluZyBoZXJlCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CkBAIC02MjYsNyArNjI2LDcgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldFN0YQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotRW5jb2RlZEpTVmFsdWUg
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjM2LDcgKzYzNiw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKICAgICAvLyBDaGVjayBmb3IgY2FjaGVkIG9yIG92
ZXJyaWRlIHByb3BlcnR5LgogICAgIFByb3BlcnR5U2xvdCBzbG90Mih0aGlzT2JqLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBpZiAoUGFyZW50Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90MikpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvdDIuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHJldHVybiBzbG90Mi5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpOwogCiAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsK
ICAgICAgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqLT5jbGFzc1JlZigpOyBq
c0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKQEAgLTY0NSwxOCArNjQ1
LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKICAgICAgICAg
ICAgICAgICAgICAgaWYgKEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsQXNGdW5j
dGlvbiA9IGVudHJ5LT5jYWxsQXNGdW5jdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpc09iai0+Z2xv
YmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXNPYmotPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmli
dXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG8p
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlN0YXRpYyBmdW5jdGlvbiBw
cm9wZXJ0eSBkZWZpbmVkIHdpdGggTlVMTCBjYWxsQXNGdW5jdGlvbiBjYWxsYmFjay4iKSkpKTsK
KyAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiU3RhdGljIGZ1bmN0aW9uIHByb3BlcnR5IGRlZmluZWQg
d2l0aCBOVUxMIGNhbGxBc0Z1bmN0aW9uIGNhbGxiYWNrLiIpKSk7CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBQYXJlbnQ+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNh
bGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NzksMTUgKzY3OSwx
NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCB2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImhhc1By
b3BlcnR5IGNhbGxiYWNrIHJldHVybmVkIHRydWUgZm9yIGEgcHJvcGVydHkgdGhhdCBkb2Vzbid0
IGV4aXN0LiIpKSkpOworICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJoYXNQcm9wZXJ0eSBjYWxsYmFj
ayByZXR1cm5lZCB0cnVlIGZvciBhIHByb3BlcnR5IHRoYXQgZG9lc24ndCBleGlzdC4iKSkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExNDEsOCArMTE0MSw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc29tZSBzcGFjZSBo
ZXJlLgogICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCi0gICAg
ICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAg
ICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyAgICAgICAgICAgIC8vIGdl
dHRlcjogSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSk7CiAg
ICAgICAgICAgICAvLyBDdXN0b20gdmFsdWVzIGFyZSBwYXNzZWQgdGhlIHNsb3RCYXNlICh0aGUg
cHJvcGVydHkgaG9sZGVyKSwgY3VzdG9tIGFjY2Vzc29ycyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1
bGUgKHJlY2lldmVyKS4KICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJl
bmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0b20gYWNjZXNzb3JzLgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODAxNApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
MTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODM4LDcgKzgzOCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAgICAgCiAgICAgaWYgKCFiYXNlLmluaGVy
aXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50
LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09
ICFpbnB1dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5l
cmF0ZWRGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi10eXBlZGVmIEVuY29kZWRK
U1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU1ZhbHVl
ICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNTdGF0ZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4
LDIwICszOCwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0
aW9uRnVuY3Rpb25EZXRhaWxzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVy
bmFsUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0
cnVjdG9yTmFtZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0
aW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2Ny
aXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlw
ZUZ1bmN0aW9uV2Vha01hcEVudHJpZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vh
a1NldFNpemUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVk
U2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXRlcmF0b3JFbnRyaWVzKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlw
ZUZ1bmN0aW9uU3VidHlwZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uRGV0YWlscyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyhFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGVGdW5jdGlvbkludGVybmFsQ29uc3RydWN0b3JOYW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
SXNIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFs
dWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrTWFwU2l6ZShFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvbldlYWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrU2V0RW50cmllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlv
bkl0ZXJhdG9yRW50cmllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3Bl
RXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9z
dFByb3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwogCiBjb25zdCBDbGFzc0lu
Zm8gSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkluamVjdGVkU2Ny
aXB0SG9zdCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUpIH07CiAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKU0luamVj
dGVkU2NyaXB0SG9zdFByb3RvdHlwZTo6ZmluaQogICAgIEpTQ19OQVRJVkVfR0VUVEVSKCJldmFs
dWF0ZSIsIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlQXR0cmlidXRlRXZhbHVhdGUsIERv
bnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlQXR0cmlidXRlRXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
QXR0cmlidXRlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODcs
MTAgKzg3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAg
ICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZXZhbHVh
dGUoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5ldmFsdWF0ZShleGVjKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlw
ZUZ1bmN0aW9uSW50ZXJuYWxDb25zdHJ1Y3Rvck5hbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRl
cm5hbENvbnN0cnVjdG9yTmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
MDAsMTAgKzEwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
CiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmlu
dGVybmFsQ29uc3RydWN0b3JOYW1lKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+aW50
ZXJuYWxDb25zdHJ1Y3Rvck5hbWUoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbklzSFRNTEFsbENvbGxl
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExMywxMCArMTEzLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXNIVE1MQWxsQ29sbGVjdGlvbihleGVjKSk7CisgICAg
cmV0dXJuIGNhc3RlZFRoaXMtPmlzSFRNTEFsbENvbGxlY3Rpb24oZXhlYyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvblByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNiwxMCArMTI2LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRo
aXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+cHJveHlUYXJnZXRWYWx1ZShleGVj
KSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnByb3h5VGFyZ2V0VmFsdWUoZXhlYyk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGVGdW5jdGlvbldlYWtNYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTM5LDEwICsxMzksMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT53ZWFrTWFwU2l6ZShleGVjKSk7CisgICAg
cmV0dXJuIGNhc3RlZFRoaXMtPndlYWtNYXBTaXplKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFr
TWFwRW50cmllcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1MiwxMCArMTUyLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+d2Vha01hcEVudHJpZXMoZXhlYykpOworICAgIHJldHVy
biBjYXN0ZWRUaGlzLT53ZWFrTWFwRW50cmllcyhleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1Nl
dFNpemUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrU2V0U2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xNjUsMTAgKzE2NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPndlYWtTZXRTaXplKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhp
cy0+d2Vha1NldFNpemUoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRFbnRyaWVzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTc4LDEwICsxNzgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT53ZWFrU2V0RW50cmllcyhleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPndl
YWtTZXRFbnRyaWVzKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JdGVyYXRvckVudHJpZXMoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25JdGVyYXRvckVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTkxLDEwICsxOTEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5pdGVyYXRvckVudHJpZXMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5p
dGVyYXRvckVudHJpZXMoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0
ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVk
U2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjA0LDEwICsyMDQsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lv
bihleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5z
aW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRT
Y3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25TdWJ0eXBlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3Vi
dHlwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMTcsMTAgKzIxNywxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0
ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1YnR5cGUoZXhlYykpOwor
ICAgIHJldHVybiBjYXN0ZWRUaGlzLT5zdWJ0eXBlKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25GdW5j
dGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjMwLDEwICsyMzAsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5mdW5jdGlvbkRldGFpbHMoZXhlYykpOworICAgIHJl
dHVybiBjYXN0ZWRUaGlzLT5mdW5jdGlvbkRldGFpbHMoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkdl
dEludGVybmFsUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVy
dGllcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNDMsNyArMjQzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVk
VGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5nZXRJbnRlcm5hbFByb3BlcnRpZXMo
ZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE5ICszNywxOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIC8vIEZ1bmN0aW9ucy4KLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1
bmN0aW9uRXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVG
dW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRl
V2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRp
b25zKEV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzLgotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0
Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVMaW5lKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rp
b25OYW1lKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU2NvcGVDaGFpbihFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0
dHJpYnV0ZVRoaXNPYmplY3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUeXBlKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZy
YW1lSXNUYWlsRGVsZXRlZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVT
b3VyY2VJRChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZh
U2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGluZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJh
bWVBdHRyaWJ1dGVGdW5jdGlvbk5hbWUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZVRoaXNPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVR5cGUoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUlzVGFpbERl
bGV0ZWQoRXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0phdmFTY3JpcHRDYWxsRnJh
bWVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkphdmFTY3JpcHRDYWxsRnJhbWUiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZSkgfTsKIApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZTo6ZmluCiAgICAgSlNDX05BVElWRV9HRVRURVIoImlzVGFpbERlbGV0ZWQiLCBqc0phdmFT
Y3JpcHRDYWxsRnJhbWVJc1RhaWxEZWxldGVkLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5
cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlv
bkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTgzLDEwICs4MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2
YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVk
VGhpcy0+ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25T
Y29wZURlc2NyaXB0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NiwxMCArOTYsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcAogICAgIGlmICghY2FzdGVkVGhpcykK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zY29wZURlc2NyaXB0aW9ucyhleGVjKSk7
CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnNjb3BlRGVzY3JpcHRpb25zKGV4ZWMpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0
ZUNhbGxlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTEwOSwxMCArMTA5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNK
YXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+Y2FsbGVyKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+Y2FsbGVyKGV4ZWMp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZVNvdXJjZUlEKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVTb3VyY2VJRChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xMjIsMTAgKzEyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPnNvdXJjZUlEKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhp
cy0+c291cmNlSUQoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNK
YXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGluZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGluZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmxpbmUoZXhlYykpOworICAgIHJldHVybiBjYXN0
ZWRUaGlzLT5saW5lKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNvbHVtbihFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0OCwxMCArMTQ4LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y29sdW1uKGV4ZWMpKTsKKyAgICByZXR1
cm4gY2FzdGVkVGhpcy0+Y29sdW1uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0
cmlidXRlRnVuY3Rpb25OYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2
MSwxMCArMTYxLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAK
ICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZnVu
Y3Rpb25OYW1lKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+ZnVuY3Rpb25OYW1lKGV4
ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxG
cmFtZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTc0LDEwICsxNzQsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcAogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zY29wZUNoYWluKGV4ZWMpKTsKKyAgICByZXR1cm4g
Y2FzdGVkVGhpcy0+c2NvcGVDaGFpbihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUaGlzT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRy
aWJ1dGVUaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE4Nywx
MCArMTg3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXAKICAg
ICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGhpc09i
amVjdChleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnRoaXNPYmplY3QoZXhlYyk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0
cmlidXRlVHlwZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZh
U2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlVHlwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0yMDAsMTAgKzIwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3Rl
ZFRoaXMtPnR5cGUoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT50eXBlKGV4ZWMpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUlz
VGFpbERlbGV0ZWQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2
YVNjcmlwdENhbGxGcmFtZUlzVGFpbERlbGV0ZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMjEzLDcgKzIxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNK
YXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+aXNUYWlsRGVsZXRlZChleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmlzVGFp
bERlbGV0ZWQoZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0Miwx
MCArMTQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBk
ZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tUeXBlKTsKICAgICAgICAgc3RhdGljIEpTU3RyaW5n
KiBzdGFja1RyYWNlQXNTdHJpbmcoVk0mLCBjb25zdCBWZWN0b3I8U3RhY2tGcmFtZT4mKTsKIAot
ICAgICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7Ci0gICAg
ICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRXJy
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgxOSw3ICs4MTksNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRs
ZUhvc3RDYWxsCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6SG9zdCkgewogICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAg
ICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAg
ICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAgICAgdm0tPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSk7CiAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKQEAgLTg0OCw3ICs4NDgsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5U
eXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZTo6SG9zdCkgewogICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
Q2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwotICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgIHZtLT5ob3N0
Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMzUsNyArMTIz
NSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpIb3N0KSB7CiAgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2Fs
bGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5ob3N0Q2Fs
bFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKSk7CisgICAgICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29k
ZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSk7CiAgICAgICAgIH0KQEAgLTEyNTgsNyArMTI1
OCw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICBpZiAo
Y29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpIb3N0KSB7CiAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxl
ZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5ob3N0Q2FsbFJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKKyAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpOwogCiAgICAgICAgIExMSU5UX0NBTExfUkVU
VVJOKGV4ZWNDYWxsZWUsIGV4ZWNDYWxsZWUsIExMSW50OjpnZXRDb2RlUHRyKGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS9jbG9vcC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS9jbG9vcC5yYgkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20vY2xvb3AucmIJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMjYsNyArMTEyNiw3IEBA
IGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICMgaGF2ZSBhIGZpeGVkIHByb3RvdHlwZSBvZiAx
IGFyZ3M6IHRoZSBwYXNzZWQgRXhlY1N0YXRlLgogICAgICAgICB3aGVuICJjbG9vcENhbGxOYXRp
dmUiCiAgICAgICAgICAgICAkYXNtLnB1dGMgIm5hdGl2ZUZ1bmMgPSAje29wZXJhbmRzWzBdLmNs
VmFsdWUoOm5hdGl2ZUZ1bmMpfTsiCi0gICAgICAgICAgICAkYXNtLnB1dGMgImZ1bmN0aW9uUmV0
dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobmF0aXZlRnVuYyh0MC5leGVjU3RhdGUpKTsiCisg
ICAgICAgICAgICAkYXNtLnB1dGMgImZ1bmN0aW9uUmV0dXJuVmFsdWUgPSBuYXRpdmVGdW5jKHQw
LmV4ZWNTdGF0ZSk7IgogICAgICAgICAgICAgJGFzbS5wdXRjICIjaWYgVVNFKEpTVkFMVUUzMl82
NCkiCiAgICAgICAgICAgICAkYXNtLnB1dGMgIiAgICB0MS5pID0gZnVuY3Rpb25SZXR1cm5WYWx1
ZS50YWcoKTsiCiAgICAgICAgICAgICAkYXNtLnB1dGMgIiAgICB0MC5pID0gZnVuY3Rpb25SZXR1
cm5WYWx1ZS5wYXlsb2FkKCk7IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0y
MDA4LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAbnlwb3AuY29tKQogICoKQEAgLTk0LDEwICs5NCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUgY29uc3RydWN0QXJyYXlXaXRoCiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIG51
bGxwdHIsIGdsb2JhbE9iamVjdCwgYXJncywgbmV3VGFyZ2V0KTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4
ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1
aXJrKGV4ZWMsIGFyZ3MsIGV4ZWMtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBhcmdzLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAK
IENvbnN0cnVjdFR5cGUgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTA2LDEwICsxMDYsMTAgQEAgQ29u
c3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdAogICAgIHJldHVybiBDb25zdHJ1
Y3RUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
cmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RB
cnJheVdpdGhTaXplUXVpcmsoZXhlYywgYXJncywgSlNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBhcmdzLCBKU1ZhbHVlKCkpOwogfQogCiBD
YWxsVHlwZSBBcnJheUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCkBAIC0xNTAsMTUgKzE1MCwxNSBAQCBib29sIGlzQXJyYXlTbG93KEV4ZWNTdGF0
ZSogZXhlYywgUHJveHlPCiAKIC8vIEVTNiA3LjIuMgogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtaXNhcnJheQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5U2xvdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheVNsb3co
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0
Kj4oZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihpc0FycmF5U2xvd0lubGluZShleGVjLCBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpc0FycmF5U2xv
d0lubGluZShleGVjLCBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVj
dG9yUHJpdmF0ZUZ1bmNJc0FycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JQcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oanNEeW5hbWljQ2FzdDxBcnJheUNvbnN0cnVjdG9yKj4oZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEFycmF5Q29u
c3RydWN0b3IqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMSwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIw
MTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAKIEpTVmFsdWUgY29uc3RydWN0
QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbGVuZ3RoLCBKU1ZhbHVlIHByb3RvdHlwZSA9IEpTVmFs
dWUoKSk7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclBy
aXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5U2xvdyhFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9yUHJpdmF0ZUZ1
bmNJc0FycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheVNsb3coRXhlY1N0YXRlKik7CiBib29s
IGlzQXJyYXlTbG93KEV4ZWNTdGF0ZSosIFByb3h5T2JqZWN0KiBhcmd1bWVudCk7CiAKIC8vIEVT
NiA3LjIuMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA5LCAyMDExLCAyMDEzLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNy0yMDA5LCAyMDExLCAyMDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChh
cEBueXBvcC5jb20pCiAgKgpAQCAtNDgsMTcgKzQ4LDE3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jSm9pbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNQb3AoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNT
dGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4
T2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSopOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQXJyYXlQcm90b3R5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCkBAIC0zODIsNyArMzgyLDcgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIAogICAgIH0KIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTM5MCwxMSArMzkwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKIAogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmpl
Y3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAK
ICAgICAvLyAyLiBMZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQgImpvaW4iLgogICAgIEpTVmFs
dWUgZnVuY3Rpb24gPSBKU1ZhbHVlKHRoaXNPYmplY3QpLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5qb2luKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMy4g
SWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhlbiBsZXQgZnVuYyBiZSB0aGUgc3RhbmRh
cmQgYnVpbHQtaW4gbWV0aG9kIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKDE1LjIuNC4yKS4K
ICAgICBib29sIGN1c3RvbUpvaW5DYXNlID0gZmFsc2U7CkBAIC00MDcsMTMgKzQwNywxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoVU5MSUtF
TFkoY3VzdG9tSm9pbkNhc2UpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJbb2Jq
ZWN0ICIsIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Y2xhc3NOYW1lKHRoaXNPYmplY3Qp
LCAiXSIpKTsKKyAgICAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltv
YmplY3QgIiwgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5jbGFzc05hbWUodGhpc09iamVj
dCksICJdIik7CiAgICAgfQogCiAgICAgLy8gNC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mIGZ1bmMgcHJvdmlkaW5nIGFycmF5IGFz
IHRoZSB0aGlzIHZhbHVlIGFuZCBhbiBlbXB0eSBhcmd1bWVudHMgbGlzdC4KICAgICBpZiAoIWlz
SlNBcnJheSh0aGlzT2JqZWN0KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKSB7CiAgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVtcHR5TGlz
dCgpKSk7CisgICAgICAgIHJldHVybiBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXNPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgICB9CiAKICAgICBBU1NF
UlQoaXNKU0FycmF5KHRoaXNWYWx1ZSkpOwpAQCAtNDI0LDg2ICs0MjQsODYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5
UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVhcmx5
UmV0dXJuVmFsdWU7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVu
Z3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRo
aXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICBpZiAoIWVsZW1lbnQpIHsK
ICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfQogICAgICAg
ICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKKyAgICByZXR1cm4gam9pbmVy
LmpvaW4oKmV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVj
a2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwg
Y2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJu
VmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJu
VmFsdWU7CiAKICAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVu
Z3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAjaWYgRU5BQkxFKElOVEwp
CiAgICAgQXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3Qt
PmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAg
IGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25l
KSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogI2Vsc2Ug
Ly8gIUVOQUJMRShJTlRMKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVj
LCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlm
IChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBlbGVtZW50LmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsK
ICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICBl
bGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIHN0cmluZ0pvaW5lci5h
cHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQogCiAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMp
KTsKKyAgICByZXR1cm4gc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2YWx1ZSkKQEAgLTY2Miw3ICs2NjIsNyBAQCBnZW5lcmFs
Q2FzZToKICAgICByZXR1cm4gam9pbmVyLmpvaW4oc3RhdGUpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTY3MSwxNiArNjcxLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBBU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZ
KCF0aGlzT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywg
dGhpc09iamVjdCk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVh
cmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNo
ZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGVhcmx5UmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gZWFybHlSZXR1cm5WYWx1ZTsKIAog
ICAgIC8vIDIuIExldCBsZW4gYmUgPyBUb0xlbmd0aCg/IEdldChPLCAibGVuZ3RoIikpLgogICAg
IGRvdWJsZSBsZW5ndGggPSB0b0xlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMy4gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5l
ZCwgbGV0IHNlcGFyYXRvciBiZSB0aGUgc2luZ2xlLWVsZW1lbnQgU3RyaW5nICIsIi4KICAgICBK
U1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02OTEsMzkgKzY5
MSwzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAg
ICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwog
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0
aCk7CiAgICAgICAgICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyhleGVjLCBjb21tYSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2Vw
YXJhdG9yLCBsZW5ndGg2NCkpOworICAgICAgICAgICAgcmV0dXJuIHNsb3dKb2luKCpleGVjLCB0
aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpOwogICAgICAgICB9CiAKICAgICAgICAg
dW5zaWduZWQgdW5zaWduZWRMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKTsK
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4odW5zaWduZWRMZW5ndGgpID09IGxl
bmd0aCk7CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGZhc3RKb2luKCpleGVjLCB0aGlzT2JqZWN0LCB7ICZjb21tYSwgMSB9LCB1bnNp
Z25lZExlbmd0aCkpOworICAgICAgICByZXR1cm4gZmFzdEpvaW4oKmV4ZWMsIHRoaXNPYmplY3Qs
IHsgJmNvbW1hLCAxIH0sIHVuc2lnbmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICAvLyA0LiBMZXQg
c2VwIGJlID8gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3Ig
PSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB8fCAhY2FuVXNlRmFzdEpvaW4odGhpc09iamVjdCkpKSB7CiAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAg
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0aDY0KSA9PSBsZW5ndGgpOwog
CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzbG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7Cisg
ICAgICAgIHJldHVybiBzbG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxl
bmd0aDY0KTsKICAgICB9CiAKICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0ganNTZXBhcmF0b3It
PnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGZhc3RKb2luKCpleGVjLCB0aGlzT2JqZWN0LCB2aWV3V2l0aFN0cmluZy52aWV3LCBsZW5n
dGgpKTsKKyAgICByZXR1cm4gZmFzdEpvaW4oKmV4ZWMsIHRoaXNPYmplY3QsIHZpZXdXaXRoU3Ry
aW5nLnZpZXcsIGxlbmd0aCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTczMiwz
NiArNzMyLDM2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
ICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5wb3Ao
ZXhlYykpOworICAgICAgICByZXR1cm4gYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoZXhlYyk7CiAg
ICAgfQogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7
CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChV
TkxJS0VMWSghdGhpc09iaikpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKGxlbmd0
aCA9PSAwKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcHV0TGVuZ3RoKGV4
ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgbGVuZ3Ro
IC0gMSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBib29sIHN1Y2Nlc3Mg
PSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2Jq
LCBleGVjLCBsZW5ndGggLSAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGpz
TnVtYmVyKGxlbmd0aCAtIDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03
NzEsMTUgKzc3MSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzVmFsdWUpOwogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGFycmF5LT5wdXNoKGV4ZWMsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihh
cnJheS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFycmF5LT5sZW5ndGgo
KSk7CiAgICAgfQogICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5n
dGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBleGVjLT5hcmd1bWVudENvdW50KCk7IG4rKykgewog
ICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdzsgd2hlcmUgc2FmZSB3ZSBjYW4g
ZG8gYSBmYXN0IHB1dCBieSBpbmRleC4KQEAgLTc5MCwxNiArNzkwLDE2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBKU1ZhbHVlKHN0YXRpY19j
YXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJp
bmcoZXhlYykpOwogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5wdXQodGhp
c09iaiwgZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xv
dCk7CiAgICAgICAgIH0KLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIAogICAgIEpTVmFsdWUgbmV3TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxl
bmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBuZXdM
ZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKKyAgICByZXR1
cm4gbmV3TGVuZ3RoOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgw
NywxMCArODA3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRp
b24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhp
bmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAt
ODIyLDcgKzgyMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgaWYgKGNvbnRhaW5zSG9sZShkYXRhLCBsZW5ndGgpICYmIGhvbGVzTXVzdEZvcndh
cmRUb1Byb3RvdHlwZSgqZXhlYywgdGhpc09iamVjdCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgc3RkOjpyZXZlcnNlKGRhdGEsIGRhdGEgKyBsZW5ndGgpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gdGhpc09iamVjdDsK
ICAgICB9CiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGF1
dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKQEAgLTgzMiw3ICs4MzIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlm
IChjb250YWluc0hvbGUoZGF0YSwgbGVuZ3RoKSAmJiBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5
cGUoKmV4ZWMsIHRoaXNPYmplY3QpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHN0ZDo6
cmV2ZXJzZShkYXRhLCBkYXRhICsgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aGlzT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Q7CiAgICAgfQogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgYXV0byYg
c3RvcmFnZSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CkBAIC04
NDIsNyArODQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8gZGF0YSA9IHN0b3JhZ2UudmVjdG9yKCku
ZGF0YSgpOwogICAgICAgICBzdGQ6OnJldmVyc2UoZGF0YSwgZGF0YSArIGxlbmd0aCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdCk7CisgICAgICAgIHJldHVybiB0
aGlzT2JqZWN0OwogICAgIH0KICAgICB9CiAKQEAgLTg1MCw3NSArODUwLDc1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2lnbmVkIGxvd2Vy
ID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWduZWQgdXBwZXIg
PSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgICAgICBKU1ZhbHVlIGxvd2VyVmFsdWU7CiAgICAgICAgIGlmIChs
b3dlckV4aXN0cykgewogICAgICAgICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChl
eGVjLCBsb3dlcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+
aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJF
eGlzdHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywg
dXBwZXIpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB0aGlz
T2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGxvd2VyLCB1cHBlclZhbHVlLCB0cnVlKTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGxvd2VyKTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJv
cikpOwotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxp
bmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUsIHRydWUpOwotICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgdXBwZXIpOwotICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNj
ZXNzKSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNPYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCku
dG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNj
b3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmop
KQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwg
anNOdW1iZXIobGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEpT
VmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoZXhlYywgMCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+
KGV4ZWMsIHRoaXNPYmosIDAsIDEsIDAsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0
aGlzT2JqLCBqc051bWJlcihsZW5ndGggLSAxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Ly8gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20vZG9jcy9tYW51YWxzL2pzL2NsaWVudC9q
c3JlZi9hcnJheS5odG0jMTE5MzcxMyBvciAxNS40LjQuMTAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwpAQCAtOTI2LDI2ICs5MjYsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQot
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBK
U09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhp
c09iaiwgZW5kIC0gYmVnaW4pOwogICAgIC8vIFdlIGNhbiBvbmx5IGdldCBhbiBleGNlcHRpb24g
aWYgd2UgY2FsbCBzb21lIHVzZXIgZnVuY3Rpb24uCiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6
RXhjZXB0aW9uKSk7CiAgICAgaWYgKFVOTElLRUxZKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBib29sIG9rVG9Eb0Zhc3RQYXRo
ID0gc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0
aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYgbGVuZ3RoID09IGdldExlbmd0aChleGVjLCB0aGlz
T2JqKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChMSUtFTFkob2tU
b0RvRmFzdFBhdGgpKSB7CiAgICAgICAgIGlmIChKU0FycmF5KiByZXN1bHQgPSBhc0FycmF5KHRo
aXNPYmopLT5mYXN0U2xpY2UoKmV4ZWMsIGJlZ2luLCBlbmQgLSBiZWdpbikpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIEpTT2JqZWN0KiByZXN1bHQ7CkBAIC05NTMsMjQgKzk1MywyNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3Vs
dCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgIGVsc2UgewogICAgICAgICByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGVuZCAtIGJlZ2luKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbiA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CiAg
ICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKHYpIHsKICAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdiwgMCwgUHV0RGlyZWN0SW5k
ZXhTaG91bGRUaHJvdyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHNldExl
bmd0aChleGVjLCB2bSwgcmVzdWx0LCBuKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8v
IDE1LjQuNC4xMgogCkBAIC05ODAsMzggKzk4MCwzOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJU
KCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhp
c09iaikpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpIHsKICAgICAgICAgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2Jq
ZWN0Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShleGVjLCB0aGlzT2Jq
LCAwKTsKICAgICAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1
bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgICAg
IGlmIChVTkxJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1
bHQ6OkV4Y2VwdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgSlNPYmplY3QqIHJlc3VsdDsKICAgICAg
ICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3Jl
YXRlZE9iamVjdCkKICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBzZXRMZW5ndGgoZXhlYywgdm0sIHJlc3VsdCwg
MCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgICAgIHNldExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwgbGVuZ3Ro
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBhY3R1YWxEZWxldGVDb3VudCA9IGxl
bmd0aCAtIGFjdHVhbFN0YXJ0OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7
CiAgICAgICAgIGRvdWJsZSBkZWxldGVDb3VudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgICAgIGlmIChkZWxldGVDb3VudCA8IDApCiAgICAgICAgICAgICBhY3R1YWxEZWxldGVD
b3VudCA9IDA7CiAgICAgICAgIGVsc2UgaWYgKGRlbGV0ZUNvdW50ID4gbGVuZ3RoIC0gYWN0dWFs
U3RhcnQpCkBAIC0xMDIzLDExICsxMDIzLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNP
YmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNP
YmosIGFjdHVhbERlbGV0ZUNvdW50KTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9
PSAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRp
b24pKTsKICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVz
dWx0OjpFeGNlcHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IG51bGxwdHI7CiAgICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNSZXN1bHQu
Zmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRo
aXNPYmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkKICAg
ICAgICAgcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpleGVjLCBhY3R1YWxT
dGFydCwgYWN0dWFsRGVsZXRlQ291bnQpOwogCkBAIC0xMDM3LDIwICsxMDM3LDIwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyArK2spIHsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
ICsgYWN0dWFsU3RhcnQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXRCeUlu
ZGV4SW5saW5lKGV4ZWMsIGssIHYsIHRydWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBhY3R1YWxEZWxldGVD
b3VudCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYWN0dWFs
RGVsZXRlQ291bnQ7ICsraykgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3Bl
cnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBhY3R1YWxTdGFydCk7Ci0gICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleCh2bSwgaywgdik7CkBAIC0xMDYxLDIyICsxMDYx
LDIyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB1bnNp
Z25lZCBpdGVtQ291bnQgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIs
IDApOwogICAgIGlmIChpdGVtQ291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkgewogICAgICAgICBz
aGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBhY3R1YWxT
dGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlIGlmIChpdGVtQ291bnQgPiBh
Y3R1YWxEZWxldGVDb3VudCkgewogICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRG
b3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGFjdHVhbFN0YXJ0LCBhY3R1YWxEZWxldGVDb3VudCwg
aXRlbUNvdW50LCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGl0ZW1Db3VudDsgKytrKSB7
CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgayArIGFjdHVhbFN0YXJ0
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrICsgMiksIHRydWUpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgCiAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgIHNldExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwgbGVuZ3RoIC0gYWN0dWFsRGVsZXRl
Q291bnQgKyBpdGVtQ291bnQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTEwODUsMjYgKzEwODUsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4
Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAg
ICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hp
ZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJ
bmRleElubGluZShleGVjLCBrLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGxlbmd0aCArIG5yQXJncyk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwgcmVzdWx0KTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMTEzLDI2ICsxMTEzLDI2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYg
KFVOTElLRUxZKCF0aGlzT2JqKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMs
IHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVu
Z3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSBlID0g
Z2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBl
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTE0MSwxMCArMTE0MSwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3Qo
ZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAg
IGlmIChVTkxJS0VMWSghdGhpc09iaikpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgp
OworICAgICAgICByZXR1cm4geyB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChl
eGVjLCB0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8ICFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3Ro
IC0gMTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKQEAgLTExNTMsNyAr
MTE1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgaWYgKGZyb21Eb3VibGUgPCAwKSB7CiAgICAgICAgICAgICBmcm9tRG91YmxlICs9IGxlbmd0
aDsKICAgICAgICAgICAgIGlmIChmcm9tRG91YmxlIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKC0xKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJvbURvdWJsZSA8IGxlbmd0
aCkKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUp
OwpAQCAtMTE2MywxNSArMTE2MywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgZG8gewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0
aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICgh
ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1
YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9IHdoaWxl
IChpbmRleC0tKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsK
KyAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogfQogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMo
RXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0
T2Zmc2V0LCBKU0FycmF5KiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKQEAgLTExOTks
NyArMTE5OSw3IEBAIHN0YXRpYyBib29sIG1vdmVFbGVtZW50cyhFeGVjU3RhdGUqIGV4ZWMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbmNhdEFwcGVuZE9u
ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogZmlyc3QsIEpTVmFsdWUgc2Vjb25k
KQorc3RhdGljIEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBKU0FycmF5KiBmaXJzdCwgSlNWYWx1ZSBzZWNvbmQpCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xMjE2LDI1ICsxMjE2LDI1IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBjb25jYXRBcHBlbmRPbmUoRXgKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0
cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKHR5cGUpOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9
IEpTQXJyYXk6OmNyZWF0ZSh2bSwgcmVzdWx0U3RydWN0dXJlLCBmaXJzdEFycmF5U2l6ZSArIDEp
OwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IHJlc3VsdC0+
YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92
ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAsIGZpcnN0LCBmaXJzdEFycmF5U2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlyc3RBcnJheVNpemUsIHNlY29u
ZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiAKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2
YXRlRnVuY0NvbmNhdE1lbWNweShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CkBAIC0xMjQ2LDEzICsxMjQ2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b1AKICAgICAvLyBoYXMgaW5kZXhlZCBhY2Nlc3NvcnMgdGhlbiBvbmUg
b2YgdGhvc2UgYWNjZXNzb3JzIG1pZ2h0IGNoYW5nZSB0aGUgdmFsdWUgb2YgU3ltYm9sLmlzQ29u
Y2F0U3ByZWFkYWJsZQogICAgIC8vIG9uIHRoZSBzZWNvbmQgYXJndW1lbnQuCiAgICAgaWYgKFVO
TElLRUxZKHNob3VsZFVzZVNsb3dQdXQoZmlyc3RBcnJheS0+aW5kZXhpbmdUeXBlKCkpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBq
c051bGwoKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHNwZWNpZXMgY29uc3RydWN0
b3IgaGVyZSBzaW5jZSBjaGVja2luZyBpdCBpbiB0aGUgSlMgd3JhcHBlciBpcyB0b28gZXhwZW5z
aXZlIGZvciB0aGUgbm9uLW9wdGltaXppbmcgdGllcnMuCiAgICAgYm9vbCBpc1ZhbGlkID0gc3Bl
Y2llc1dhdGNocG9pbnRzVmFsaWQoZXhlYywgZmlyc3RBcnJheSk7CiAgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSB8fCAhaXNWYWxpZCk7CiAgICAgaWYgKFVOTElLRUxZKCFpc1ZhbGlkKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAogICAgIEpTVmFsdWUgc2Vjb25kID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSk7CiAgICAgaWYgKCFpc0pTQXJyYXkoc2Vjb25kKSkgewpAQCAtMTI3MiwyNCArMTI3Miwy
NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAgICAgSW5kZXhp
bmdUeXBlIHR5cGUgPSBmaXJzdEFycmF5LT5tZXJnZUluZGV4aW5nVHlwZUZvckNvcHlpbmcoc2Vj
b25kVHlwZSk7CiAgICAgaWYgKHR5cGUgPT0gTm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZh
c3RDb3B5KHZtLCBzZWNvbmRBcnJheSkgfHwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNp
emUgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vj
b25kQXJyYXlTaXplKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKTsKICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSA9PSBzdWNjZXNzKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKLSAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJz
dEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFycmF5U2l6ZSk7CiAgICAgICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
c3VjY2VzcykpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogcmVzdWx0
U3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24odHlwZSk7CiAgICAgSlNBcnJheSogcmVzdWx0
ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgcmVzdWx0U3RydWN0dXJlLCBm
aXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNj
b3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OwogICAgIAogICAgIGlmICh0eXBlID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICBkb3Vi
bGUqIGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRh
KCk7CkBAIC0xMzA3LDEwICsxMzA3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b1AKICAgICB9CiAKICAgICByZXN1bHQtPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNM
ZW5ndGgoZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweShFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5j
QXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1l
bnRDb3VudCgpID09IDMpOwogCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAgICAgaWYgKCFyZXN1bHRBcnJheS0+YXBwZW5kTWVt
Y3B5KGV4ZWMsIHZtLCBzdGFydEluZGV4LCBvdGhlckFycmF5KSkKICAgICAgICAgbW92ZUVsZW1l
bnRzKGV4ZWMsIHZtLCByZXN1bHRBcnJheSwgc3RhcnRJbmRleCwgb3RoZXJBcnJheSwgb3RoZXJB
cnJheS0+bGVuZ3RoKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMTEsIDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjcsOSArNjcsOSBAQCBwcml2YXRlOgogICAg
IFNwZWNpZXNXYXRjaHBvaW50U3RhdHVzIG1fc3BlY2llc1dhdGNocG9pbnRTdGF0dXMgeyBTcGVj
aWVzV2F0Y2hwb2ludFN0YXR1czo6VW5pbml0aWFsaXplZCB9OwogfTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1ZhbHVlcyhFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQ29u
Y2F0TWVtY3B5KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvUHJpdmF0ZUZ1bmNBcHBlbmRNZW1jcHkoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1ZhbHVlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHkoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQXBwZW5kTWVtY3B5
KEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxp
YS5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsMTYgKzUxLDE2IEBA
IHZvaWQgQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmUKICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigx
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0
cnVjdGlvbk1vZGU6OkFzeW5jKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMs
IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFy
Z3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmMpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RB
c3luY0Z1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3Qg
YXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9u
KGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0
KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmMpKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpBc3lu
Yyk7CiB9CiAKIENhbGxUeXBlIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEo
SlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUxLDcgKzUxLDcgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KAogICAgIG1hY3JvKHhvciwgWG9yLCAzKQogCiAjZGVmaW5lIERFQ0xBUkVfRlVOQ19QUk9UTyhs
b3dlck5hbWUsIHVwcGVyTmFtZSwgY291bnQpICAgICAgICAgICAgICAgICBcCi0gICAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUoRXhlY1N0YXRl
Kik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jICMjIHVwcGVyTmFtZShF
eGVjU3RhdGUqKTsKIEZPUl9FQUNIX0FUT01JQ1NfRlVOQyhERUNMQVJFX0ZVTkNfUFJPVE8pCiAj
dW5kZWYgREVDTEFSRV9GVU5DX1BST1RPCiAKQEAgLTg4LDE5ICs4OCwxOSBAQCB2b2lkIEF0b21p
Y3NPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiBuYW1lc3BhY2UgewogCiB0ZW1wbGF0ZTx1
bnNpZ25lZCBudW1FeHRyYUFyZ3MsIHR5cGVuYW1lIEFkYXB0b3IsIHR5cGVuYW1lIEZ1bmM+Ci1F
bmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJnc0Nhc2UoRXhlY1N0YXRlKiBleGVj
LCBUaHJvd1Njb3BlJiBzY29wZSwgSlNBcnJheUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3LCB1
bnNpZ25lZCBhY2Nlc3NJbmRleCwgY29uc3QgRnVuYyYgZnVuYykKK0pTVmFsdWUgYXRvbWljT3Bl
cmF0aW9uV2l0aEFyZ3NDYXNlKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEpT
QXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldywgdW5zaWduZWQgYWNjZXNzSW5kZXgsIGNv
bnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4q
IHR5cGVkQXJyYXkgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qPih0
eXBlZEFycmF5Vmlldyk7CiAgICAgCiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBleHRyYUFy
Z3NbbnVtRXh0cmFBcmdzICsgMV07IC8vIEFkZCAxIHRvIGF2b2lkIDAgc2l6ZSBhcnJheSBlcnJv
ciBpbiBWUy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmdzOyArK2kp
IHsKICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDIgKyBpKS50b0ludDMy
KGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICBleHRyYUFyZ3NbaV0gPSBBZGFwdG9yOjp0b05hdGl2ZUZyb21JbnQzMih2
YWx1ZSk7CiAgICAgfQogCiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSByZXN1bHQgPSBmdW5j
KHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJbmRleCwgZXh0cmFBcmdzKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1ZShyZXN1bHQpKTsKKyAg
ICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKHJlc3VsdCk7CiB9CiAKIHVuc2lnbmVkIHZhbGlk
YXRlZEFjY2Vzc0luZGV4KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5QnVmZmVyVmll
dyogdHlwZWRBcnJheVZpZXcpCkBAIC0xMjcsNyArMTI3LDcgQEAgdW5zaWduZWQgdmFsaWRhdGVk
QWNjZXNzSW5kZXgoVk0mIHZtLCBFeAogfQogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1FeHRyYUFy
Z3MsIHR5cGVuYW1lIEZ1bmM+Ci1FbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJn
cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZ1bmMmIGZ1bmMpCitKU1ZhbHVlIGF0b21pY09wZXJh
dGlvbldpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25X
aXRoQXJncyhFCiAgICAgSlNWYWx1ZSB0eXBlZEFycmF5VmFsdWUgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBpZiAoIXR5cGVkQXJyYXlWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUeXBlZCBhcnJheSBhcmd1bWVudCBt
dXN0IGJlIGEgY2VsbC4iKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIEpTQ2VsbCog
dHlwZWRBcnJheUNlbGwgPSB0eXBlZEFycmF5VmFsdWUuYXNDZWxsKCk7CkBAIC0xNTEsMTcgKzE1
MSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhFCiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlR5cGVkIGFycmF5IGFyZ3VtZW50IG11c3QgYmUgYW4gSW50OEFycmF5
LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgb3IgVWlu
dDMyQXJyYXkuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4odHlw
ZWRBcnJheUNlbGwpOwogICAgIGlmICghdHlwZWRBcnJheVZpZXctPmlzU2hhcmVkKCkpIHsKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJy
YXkgYXJndW1lbnQgbXVzdCB3cmFwIGEgU2hhcmVkQXJyYXlCdWZmZXIuIikpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBhY2Nlc3NJbmRleCA9IHZhbGlkYXRlZEFjY2Vz
c0luZGV4KHZtLCBleGVjLCB0eXBlZEFycmF5Vmlldyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNh
c2UgSW50OEFycmF5VHlwZToKQEAgLTE3OCwxMyArMTc4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIGF0
b21pY09wZXJhdGlvbldpdGhBcmdzKEUKICAgICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldp
dGhBcmdzQ2FzZTxudW1FeHRyYUFyZ3MsIFVpbnQzMkFkYXB0b3I+KGV4ZWMsIHNjb3BlLCB0eXBl
ZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIH0KIAog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXRvbWljc0Z1bmNBZGQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0
b21pY3NGdW5jQWRkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0
aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBhdXRv
KiBhcmdzKSB7CkBAIC0xOTIsNyArMTkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuY0FuZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXRvbWljc0Z1bmNBbmQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhdG9taWNP
cGVyYXRpb25XaXRoQXJnczwxPigKICAgICAgICAgZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0
IGF1dG8qIGFyZ3MpIHsKQEAgLTIwMCw3ICsyMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGF0b21pY3NGdW5jQ29tcGFyZUV4Y2hhbmdlKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0NvbXBhcmVFeGNoYW5nZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzPDI+KAogICAgICAg
ICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykgewpAQCAtMjA4LDcgKzIw
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAg
fSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNFeGNoYW5n
ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNFeGNo
YW5nZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhB
cmdzPDE+KAogICAgICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykg
ewpAQCAtMjE2LDEzICsyMTYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9t
aWNzRnVuYwogICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
dG9taWNzRnVuY0lzTG9ja0ZyZWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGF0b21pY3NGdW5jSXNMb2NrRnJlZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBpbnQzMl90IHNpemUgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBi
b29sIHJlc3VsdDsKICAgICBzd2l0Y2ggKHNpemUpIHsKQEAgLTIzNSwxMCArMjM1LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihyZXN1bHQpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNMb2FkKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0xvYWQoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwwPigKICAgICAgICAg
ZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0IGF1dG8qKSB7CkBAIC0yNDYsNyArMjQ2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY09yKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY09yKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4
ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0yNTQsNyArMjU0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1N0b3JlKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1N0b3JlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4oCiAg
ICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0yNjQs
NyArMjY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAg
ICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1N1
YihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdWIo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwx
PigKICAgICAgICAgZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKQEAg
LTI3Miw3ICsyNzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5j
CiAgICAgICAgIH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NG
dW5jV2FpdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1
bmNXYWl0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI4MCwyOCArMjgwLDI4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICBKU0ludDMy
QXJyYXkqIHR5cGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTSW50MzJBcnJheSo+KGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoIXR5cGVkQXJyYXkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBt
dXN0IGJlIGFuIEludDMyQXJyYXkuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBp
ZiAoIXR5cGVkQXJyYXktPmlzU2hhcmVkKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IHdy
YXAgYSBTaGFyZWRBcnJheUJ1ZmZlci4iKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgdW5z
aWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJbmRleCh2bSwgZXhlYywgdHlwZWRB
cnJheSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IAogICAgIGludDMyX3QqIHB0ciA9IHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJ
bmRleDsKICAgICAKICAgICBpbnQzMl90IGV4cGVjdGVkVmFsdWUgPSBleGVjLT5hcmd1bWVudCgy
KS50b0ludDMyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAKICAgICBkb3VibGUgdGltZW91dEluTWlsbGlzZWNvbmRzID0gZXhlYy0+YXJn
dW1lbnQoMykudG9OdW1iZXIoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIAogICAgIGlmICghdm0ubV90eXBlZEFycmF5Q29udHJvbGxlci0+
aXNBdG9taWNzV2FpdEFsbG93ZWRPbkN1cnJlbnRUaHJlYWQoKSkgewogICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBdG9taWNzLndhaXQgY2Fubm90IGJl
IGNhbGxlZCBmcm9tIHRoZSBjdXJyZW50IHRocmVhZC4iKSk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
ICAgIAogICAgIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGlt
ZW91dEluTWlsbGlzZWNvbmRzKTsKQEAgLTMzOSwxMCArMzM5LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgcmVzdWx0U3RyaW5nID0gInRpbWVk
LW91dCI7CiAgICAgZWxzZQogICAgICAgICByZXN1bHRTdHJpbmcgPSAib2siOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKHJlc3VsdFN0cmlu
ZykpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKHJlc3VsdFN0cmlu
ZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNXYWtlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM1MCwxNiArMzUwLDE2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICBKU0ludDMyQXJyYXkqIHR5
cGVkQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTSW50MzJBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBpZiAoIXR5cGVkQXJyYXkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IGJlIGFu
IEludDMyQXJyYXkuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBpZiAoIXR5cGVk
QXJyYXktPmlzU2hhcmVkKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IHdyYXAgYSBTaGFy
ZWRBcnJheUJ1ZmZlci4iKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWNj
ZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJbmRleCh2bSwgZXhlYywgdHlwZWRBcnJheSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAgIGlu
dDMyX3QqIHB0ciA9IHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJbmRleDsKICAg
ICAKQEAgLTM2NywxNCArMzY3LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRv
bWljc0Z1bmMKICAgICB1bnNpZ25lZCBjb3VudCA9IFVJTlRfTUFYOwogICAgIGlmICghY291bnRW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGludDMyX3QgY291bnRJbnQgPSBjb3VudFZh
bHVlLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGNvdW50ID0gc3RkOjptYXgoMCwgY291bnRJbnQpOwog
ICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoUGFya2luZ0xvdDo6
dW5wYXJrQ291bnQocHRyLCBjb3VudCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoUGFya2luZ0xv
dDo6dW5wYXJrQ291bnQocHRyLCBjb3VudCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jWG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuY1hvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21p
Y09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAgICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29u
c3QgYXV0byogYXJncykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDYsMTYgKzQ2LDE2IEBAIHZvaWQgQm9vbGVhbkNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIH0KIAogLy8gRUNNQSAxNS42LjIKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RX
aXRoQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIGJvb2xlYW4gPSBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFu
KGV4ZWMpKTsKICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVh
bk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZSh2bSwgYm9vbGVhblN0
cnVjdHVyZSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBib29sZWFuKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CisgICAgcmV0dXJuIG9iajsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTY1LDkgKzY1LDkgQEAgQ29uc3RydWN0VHlw
ZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbgogfQogCiAvLyBFQ01BIDE1LjYuMQotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihleGVjKSkpOworICAgIHJldHVy
biBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAogQ2Fs
bFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDExLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBi
b29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsK
IAogfQogCkBAIC02NSwzOCArNjUsMzggQEAgdm9pZCBCb29sZWFuUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25z
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7
CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKSk7CisgICAgICAg
IHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCk7CiAKICAgICBpZiAodGhpc1Zh
bHVlID09IGpzQm9vbGVhbih0cnVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLnRydWVTdHJpbmcoKTsKIAogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKEJvb2xl
YW5PYmplY3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKIAogICAgIGlmIChhc0Jvb2xlYW5PYmplY3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxW
YWx1ZSgpID09IGpzQm9vbGVhbihmYWxzZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodm0tPnNtYWxsU3RyaW5ncy5mYWxzZVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5z
bWFsbFN0cmluZ3MuZmFsc2VTdHJpbmcoKTsKIAogICAgIEFTU0VSVChhc0Jvb2xlYW5PYmplY3Qo
dGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpID09IGpzQm9vbGVhbih0cnVlKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKSk7CisgICAg
cmV0dXJuIHZtLT5zbWFsbFN0cmluZ3MudHJ1ZVN0cmluZygpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0o
KSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAo
dGhpc1ZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
aXNWYWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzVmFsdWU7CiAKICAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cyhCb29sZWFuT2JqZWN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFz
Qm9vbGVhbk9iamVjdCh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkpOworICAgIHJldHVybiBh
c0Jvb2xlYW5PYmplY3QodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
aAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fs
bERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIENhbGxUeXBl
IDogdW5zaWduZWQgewogICAgIEpTCiB9OwogCi10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKU0Nf
SE9TVF9DQUxMICpOYXRpdmVGdW5jdGlvbikoRXhlY1N0YXRlKik7Cit0eXBlZGVmIEpTVmFsdWUg
KEpTQ19IT1NUX0NBTEwgKk5hdGl2ZUZ1bmN0aW9uKShFeGVjU3RhdGUqKTsKIAogc3RydWN0IENh
bGxEYXRhIHsKICAgICB1bmlvbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiwyNyArMzYsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShDb25zb2xlT2JqZWN0KTsKIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RlYnVnKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVBy
b3RvRnVuY0xvZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNJbmZvKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1dhcm4oRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQ2xlYXIoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJv
dG9GdW5jRGlyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY0RpclhNTChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWJsZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNBc3NlcnQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQ291bnQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQ
cm9maWxlRW5kKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNUaW1lRW5kKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1RpbWVTdGFtcChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cChFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91
cENvbGxhcHNlZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cEVuZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RlYnVnKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRXJyb3IoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNMb2coRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNJbmZv
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9G
dW5jV2FybihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jRGlyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyWE1MKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFibGUoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Fzc2VydChF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVu
Y0NvdW50KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xl
UHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVFbmQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVu
Y1RpbWVFbmQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNv
bGVQcm90b0Z1bmNUaW1lU3RhbXAoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dyb3VwQ29sbGFwc2VkKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBFbmQo
RXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBDb25zb2xlT2JqZWN0OjpzX2luZm8gPSB7
ICJDb25zb2xlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShDb25zb2xl
T2JqZWN0KSB9OwogCkBAIC0xMDQsMTg3ICsxMDQsMTg3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWQKICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zb2xlTG9nV2l0aExldmVsKEV4ZWNTdGF0
ZSogZXhlYywgTWVzc2FnZUxldmVsIGxldmVsKQorc3RhdGljIEpTVmFsdWUgY29uc29sZUxvZ1dp
dGhMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT5sb2dXaXRoTGV2ZWwo
ZXhlYywgV1RGTW92ZShhcmd1bWVudHMpLCBsZXZlbCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RlYnVnKEV4
ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY0RlYnVnKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhM
ZXZlbChleGVjLCBNZXNzYWdlTGV2ZWw6OkRlYnVnKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhMZXZlbChleGVjLCBNZXNz
YWdlTGV2ZWw6OkVycm9yKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjKQogewogICAg
IHJldHVybiBjb25zb2xlTG9nV2l0aExldmVsKGV4ZWMsIE1lc3NhZ2VMZXZlbDo6TG9nKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0lu
Zm8oRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xl
UHJvdG9GdW5jSW5mbyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGNvbnNvbGVMb2dX
aXRoTGV2ZWwoZXhlYywgTWVzc2FnZUxldmVsOjpJbmZvKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1dhcm4oRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jV2FybihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoZXhlYywgTWVz
c2FnZUxldmVsOjpXYXJuaW5nKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBjbGllbnQtPmNsZWFyKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNEaXIoRXhlY1N0
YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
RGlyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVu
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVj
LCAwKSk7CiAgICAgY2xpZW50LT5kaXIoZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xl
UHJvdG9GdW5jRGlyWE1MKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY0RpclhNTChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29u
c29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xl
Q2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpj
cmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+ZGlyWE1MKGV4ZWMs
IFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RhYmxlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7
CiAgICAgY2xpZW50LT50YWJsZShleGVjLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90
b0Z1bmNUcmFjZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNUcmFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNs
aWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50
KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVT
Y3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+dHJhY2UoZXhlYywgV1RGTW92
ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Fzc2VydChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGll
bnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYm9vbCBjb25kaXRpb24gPSBleGVjLT5h
cmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGlmIChjb25kaXRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVh
dGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMSkpOwogICAgIGNsaWVudC0+YXNzZXJ0aW9uKGV4ZWMs
IFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NvdW50KEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NvdW50KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVu
dHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7
CiAgICAgY2xpZW50LT5jb3VudChleGVjLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90
b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAg
aWYgKCFhcmdzQ291bnQpIHsKICAgICAgICAgY2xpZW50LT5wcm9maWxlKGV4ZWMsIFN0cmluZygp
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRs
ZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGNsaWVudC0+
cHJvZmlsZShleGVjLCB0aXRsZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVFbmQoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJv
ZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVu
dCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7
CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgc2l6ZV90IGFy
Z3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoIWFyZ3NDb3VudCkgewog
ICAgICAgICBjbGllbnQtPnByb2ZpbGVFbmQoZXhlYywgU3RyaW5nKCkpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgY2xpZW50LT5wcm9maWxlRW5kKGV4ZWMs
IHRpdGxlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNu
YXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50
KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsK
ICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBzaXplX3QgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmICghYXJnc0NvdW50KSB7CiAg
ICAgICAgIGNsaWVudC0+dGFrZUhlYXBTbmFwc2hvdChleGVjLCBTdHJpbmcoKSk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBjbGllbnQtPnRha2VIZWFwU25h
cHNob3QoZXhlYywgdGl0bGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgdmFs
dWVPckRlZmF1bHRMYWJlbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBA
IC0yOTQsODggKzI5NCw4OCBAQCBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJp
bmcoCiAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1l
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGll
bnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBp
ZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdGl0bGU7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHRpdGxlID0gQVNDSUlM
aXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAgICAgIHRpdGxlID0gdmFsdWVPckRl
ZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAogICAgIGNsaWVudC0+dGltZShleGVj
LCB0aXRsZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVFbmQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHRpdGxlOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICB0aXRsZSA9ICBBU0NJSUxpdGVyYWwoImRl
ZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUgPSB2YWx1ZU9yRGVmYXVsdExhYmVs
U3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAgICAgY2xpZW50LT50aW1lRW5kKGV4ZWMsIHRpdGxl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1wKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVTdGFtcChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVu
dHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVu
dC0+dGltZVN0YW1wKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dy
b3VwKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY0dyb3VwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xpZW50KiBj
bGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAg
ICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFy
Z3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT5ncm91cChleGVjLCBXVEZNb3ZlKGFyZ3Vt
ZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cENvbGxhcHNlZChFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cENvbGxhcHNl
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywg
MCkpOwogICAgIGNsaWVudC0+Z3JvdXBDb2xsYXBzZWQoZXhlYywgV1RGTW92ZShhcmd1bWVudHMp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jR3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBFbmQoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsIDApKTsKICAgICBjbGllbnQt
Pmdyb3VwRW5kKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
dXN0b21HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdldHRlclNldHRl
cjo6c19pbgogYm9vbCBjYWxsQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgQ3VzdG9tR2V0
dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNzb3IsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChzZXR0ZXIpOwotICAgIGJv
b2wgcmVzdWx0ID0gc2V0dGVyKGV4ZWMsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBKU1Zh
bHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICBib29sIHJlc3VsdCA9IHNldHRlcihleGVjLCB0aGlz
VmFsdWUsIHZhbHVlKTsKICAgICAvLyBBbHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBz
ZXR0ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgogICAgIGlm
IChpc0FjY2Vzc29yKQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwOCwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01Miw4ICs1Miw4IEBA
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUGFyc2UoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVj
U3RhdGUqKTsKIAogfQogCkBAIC0xNzQsMTAgKzE3NCwxMCBAQCBKU09iamVjdCogY29uc3RydWN0
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKHZt
LCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CiB9CiAgICAgCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aERhdGVDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RGF0ZShleGVjLCBhc0ludGVybmFsRnVuY3Rp
b24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBleGVjLT5uZXdUYXJnZXQoKSwg
YXJncykpOworICAgIHJldHVybiBjb25zdHJ1Y3REYXRlKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGV4ZWMtPm5ld1RhcmdldCgpLCBh
cmdzKTsKIH0KIAogQ29uc3RydWN0VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTE4NywxMiArMTg3
LDEyIEBAIENvbnN0cnVjdFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDb25zdHIKIH0KIAogLy8g
RUNNQSAxNS45LjIKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRl
KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbERhdGUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgR3JlZ29y
aWFuRGF0ZVRpbWUgdHM7CiAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKHZtLCBjdXJyZW50VGlt
ZU1TKCksIFdURjo6TG9jYWxUaW1lLCB0cyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBmb3JtYXREYXRlVGltZSh0cywgRGF0ZVRpbWVGb3JtYXRE
YXRlQW5kVGltZSwgZmFsc2UpKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0s
IGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBmYWxzZSkpOwog
fQogCiBDYWxsVHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJiBjYWxsRGF0YSkKQEAgLTIwMSwyOCArMjAxLDI4IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoSlMKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFN0cmluZyBkYXRlU3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUodm0sIGRhdGVT
dHIpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4g
anNOdW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAjaWYgIUVOQUJMRShXRUJfUkVQTEFZKQog
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihOT1JNQUxfT1JfREVURVJNSU5JU1RJQ19GVU5DVElPTihqc0N1cnJlbnRU
aW1lKCksIGRldGVybWluaXN0aWNDdXJyZW50VGltZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpKSkpOworICAgIHJldHVybiBqc051bWJlcihOT1JNQUxfT1JfREVURVJNSU5JU1RJQ19GVU5D
VElPTihqc0N1cnJlbnRUaW1lKCksIGRldGVybWluaXN0aWNDdXJyZW50VGltZShleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVVUQyhFeGVjU3RhdGUqIGV4ZWMpIAorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVVVEMo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGRvdWJsZSBtcyA9IG1pbGxpc2Vjb25kc0Zyb21Db21w
b25lbnRzKGV4ZWMsIEFyZ0xpc3QoZXhlYyksIFdURjo6VVRDVGltZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcih0aW1lQ2xpcChtcykpKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIodGltZUNsaXAobXMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
MjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01Nyw2ICs1Nyw2IEBAIHByaXZhdGU6
CiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVOb3coRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIx
MDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC03Miw1MCArNzIs
NTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVh
cihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldEhvdXJzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRp
bWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
WWVhcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldERhdGUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Nl
dE1vbnRoKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENIb3Vy
cyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRZZWFyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVRpbWVTdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVENTdHJp
bmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb0lTT1N0cmluZyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW9udGgoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZ
ZWFyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRV
VENIb3VycyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRl
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENG
dWxsWWVhcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0VVRDSG91cnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9M
b2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKik7CiAKIH0K
IApAQCAtMzE4LDcgKzMxOCw3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXQKIAogI2VuZGlmIC8vIE9TKERBUldJTikgJiYgVVNFKENGKQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVUaW1lRm9y
bWF0IGZvcm1hdCwgYm9vbCBhc1VUQ1ZhcmlhbnQpCitzdGF0aWMgSlNWYWx1ZSBmb3JtYXRlRGF0
ZUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZVRpbWVGb3JtYXQgZm9ybWF0LCBib29sIGFz
VVRDVmFyaWFudCkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAt
MzMxLDkgKzMzMSw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBmb3JtYXRlRGF0ZUluc3RhbmMK
ICAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKICAgICAg
ICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVn
b3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBEYXRlIikpKSk7Cisg
ICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiSW52YWxpZCBEYXRlIikpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGVUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgZm9y
bWF0LCBhc1VUQ1ZhcmlhbnQpKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCBmb3JtYXREYXRlVGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJpYW50
KSk7CiB9CiAKIC8vIENvbnZlcnRzIGEgbGlzdCBvZiBhcmd1bWVudHMgc2VudCB0byBhIERhdGUg
bWVtYmVyIGZ1bmN0aW9uIGludG8gbWlsbGlzZWNvbmRzLCB1cGRhdGluZwpAQCAtNTA5LDE5ICs1
MDksMTkgQEAgdm9pZCBEYXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogCiAvLyBG
dW5jdGlvbnMKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1Zhcmlh
bnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9ybWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRlVGlt
ZUZvcm1hdERhdGVBbmRUaW1lLCBhc1VUQ1ZhcmlhbnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBjb25zdCBib29sIGFzVVRDVmFyaWFudCA9IHRydWU7CiAgICAgcmV0dXJu
IGZvcm1hdGVEYXRlSW5zdGFuY2UoZXhlYywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwgYXNV
VENWYXJpYW50KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9JU09TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0lTT1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMo
ZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBEYXRlIikpKSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBEYXRlIikpKTsKICAgICAvLyBNYXhpbXVt
IGFtb3VudCBvZiBzcGFjZSB3ZSBuZWVkIGluIGJ1ZmZlcjogNyAobWF4LiBkaWdpdHMgaW4geWVh
cikgKyAyICogNSAoMiBjaGFyYWN0ZXJzIGVhY2ggZm9yIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0
ZSwgc2Vjb25kKSArIDQgKC4gKyAzIGRpZ2l0cyBmb3IgbWlsbGlzZWNvbmRzKQogICAgIC8vIDYg
Zm9yIGZvcm1hdHRpbmcgYW5kIG9uZSBmb3IgbnVsbCB0ZXJtaW5hdGlvbiA9IDI4LiBXZSBhZGQg
b25lIGV4dHJhIGNoYXJhY3RlciB0byBhbGxvdyB1cyB0byBmb3JjZSBudWxsIHRlcm1pbmF0aW9u
LgogICAgIGNoYXIgYnVmZmVyWzI4XTsKQEAgLTU1MSwyNCArNTUxLDI0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIEFTU0VSVChjaGFyYWN0ZXJzV3Jp
dHRlbiA+IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcnNXcml0dGVuKSA8IHNp
emVvZihidWZmZXIpKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcnNX
cml0dGVuKSA+PSBzaXplb2YoYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhl
Yyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCBTdHJpbmcoYnVmZmVyLCBjaGFyYWN0ZXJzV3JpdHRlbikpKTsKKyAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhidWZmZXIsIGNoYXJhY3RlcnNXcml0dGVuKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Rv
RGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1Zhcmlh
bnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9ybWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRlVGlt
ZUZvcm1hdERhdGUsIGFzVVRDVmFyaWFudCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1ZhcmlhbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZm9y
bWF0ZURhdGVJbnN0YW5jZShleGVjLCBEYXRlVGltZUZvcm1hdFRpbWUsIGFzVVRDVmFyaWFudCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC01NzYsMTAgKzU3NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJ
bnN0YW5jZSh0aGlzVmFsdWUpOyAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZvcm1hdExv
Y2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigp
LCBMb2NhbGVEYXRlQW5kVGltZSkpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMs
IHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFu
ZFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b0xvY2FsZURhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC01ODcsMTAgKzU4NywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0Rh
dGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5p
bnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlKSk7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsZURh
dGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2Nh
bGVEYXRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNTk4LDEwICs1OTgsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNE
YXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+
aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlVGltZSkpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVE
YXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9j
YWxlVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvUHJpbWl0aXZlU3ltYm9sKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2woRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtNjE1LDI2ICs2MTUsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogCiAgICAgSlNWYWx1ZSBoaW50VmFsdWUgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKICAgICBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHR5cGUgPSB0b1ByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUoZXhlYywgaGludFZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgaWYgKHR5cGUgPT0gTm9QcmVmZXJlbmNlKQogICAgICAgICB0eXBlID0g
UHJlZmVyU3RyaW5nOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhpc09iamVjdC0+b3JkaW5hcnlUb1ByaW1pdGl2ZShleGVjLCB0eXBlKSk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm9yZGluYXJ5VG9QcmltaXRpdmUoZXhlYywgdHlwZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1l
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKERhdGVJbnN0YW5jZTo6aW5mbygpKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVl
KCkpOworICAgIHJldHVybiBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVl
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1
bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+dGhpc1ZhbHVlKCk7CkBAIC02NDUsMTEgKzY0NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3Jl
Z29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAg
ICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlh
bkRhdGVUaW1lLT55ZWFyKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShl
eGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpA
QCAtNjYwLDExICs2NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0g
dGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVh
cigpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVn
b3JpYW5EYXRlVGltZS0+eWVhcigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0TW9udGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTY3NSwxMSArNjc1LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlh
bkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRl
VGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFO
KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRV
VENNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKQEAgLTY5MCwxMSArNjkwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5E
YXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBp
ZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0
ZVRpbWUtPm1vbnRoKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC03MDUsMTEgKzcwNSwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25z
dCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3Jl
Z29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aERheSgpKSk7CisgICAgICAg
IHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+
bW9udGhEYXkoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzIwLDExICs3MjAsMTEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRp
bWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRD
KGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkoKSkpOworICAgICAgICByZXR1cm4ganNOYU4o
KTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXko
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7
CkBAIC03MzUsMTEgKzczNSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUg
PSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3Jp
YW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVr
RGF5KCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC03NTAsMTEgKzc1MCwxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29y
aWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpKTsKKyAgICAgICAg
cmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53
ZWVrRGF5KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzY1LDExICs3NjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwog
ICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3Jp
YW5EYXRlVGltZS0+aG91cigpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVy
biBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+aG91cigpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+
dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTc4
MCwxMSArNzgwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUK
IAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSkp
OworICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFu
RGF0ZVRpbWUtPmhvdXIoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzk1LDExICs3OTUsMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFO
KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0
ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwpAQCAtODEwLDExICs4MTAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdv
cmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwog
ICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3Jp
YW5EYXRlVGltZS0+bWludXRlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0
dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAt
ODI1LDExICs4MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0
ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkp
KTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlh
bkRhdGVUaW1lLT5zZWNvbmQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtODQwLDExICs4NDAsMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkpKTsKKyAgICAgICAg
cmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5z
ZWNvbmQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTg1NCwxNCArODU0LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBEYXRlSW5zdGFuY2UqIHRo
aXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAgICAgZG91YmxlIG1pbGxp
ID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWls
bGkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICBy
ZXR1cm4ganNOYU4oKTsKIAogICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNl
Y29uZCk7CiAgICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihtcykpOworICAgIHJldHVybiBqc051bWJl
cihtcyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTg3MSwxNCArODcxLDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBEYXRlSW5zdGFuY2Uq
IHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAgICAgZG91YmxlIG1p
bGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4o
bWlsbGkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAg
ICByZXR1cm4ganNOYU4oKTsKIAogICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1Bl
clNlY29uZCk7CiAgICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihtcykpOworICAgIHJldHVybiBqc051
bWJlcihtcyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC04ODksMTEgKzg4OSwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKC1ncmVnb3JpYW5EYXRlVGltZS0+dXRjT2Zmc2V0KCkgLyBtaW51dGVzUGVySG91
cikpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICByZXR1cm4ganNOdW1iZXIoLWdyZWdv
cmlhbkRhdGVUaW1lLT51dGNPZmZzZXQoKSAvIG1pbnV0ZXNQZXJIb3VyKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZt
KCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC05MDUs
MTAgKzkwNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAg
ICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhl
YykpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobWlsbGkpOwogICAgIHRoaXNEYXRl
T2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGlu
dCBudW1BcmdzVG9Vc2UsIFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSkKK3N0YXRpYyBKU1Zh
bHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NU
b1VzZSwgV1RGOjpUaW1lVHlwZSBpbnB1dFRpbWVUeXBlKQogewogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC05MjIsNyArOTIyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpIHx8
IHN0ZDo6aXNuYW4obWlsbGkpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oKTsK
ICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUodm0sIHJlc3VsdCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgIAogICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNl
Y29uZCk7CkBAIC05MzIsMjMgKzkzMiwyMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3
VmFsdWVGcm9tVGltCiAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRD
KGV4ZWMpCiAgICAgICAgIDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwog
ICAgIGlmICghb3RoZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7
CisgICAgICAgIHJldHVybiBqc05hTigpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29y
aWFuRGF0ZVRpbWU7CiAgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20oKm90aGVyKTsKICAg
ICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBudW1BcmdzVG9Vc2UsICZt
cywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFO
KCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfSAKIAogICAgIGRvdWJsZSBuZXdVVENEYXRlID0gZ3JlZ29yaWFuRGF0ZVRp
bWVUb01TKHZtLCBncmVnb3JpYW5EYXRlVGltZSwgbXMsIGlucHV0VGltZVR5cGUpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodGltZUNsaXAobmV3VVRDRGF0ZSkpOwogICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVt
QXJnc1RvVXNlLCBXVEY6OlRpbWVUeXBlIGlucHV0VGltZVR5cGUpCitzdGF0aWMgSlNWYWx1ZSBz
ZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBudW1BcmdzVG9Vc2Us
IFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwpAQCAtOTU5LDcgKzk1OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBz
ZXROZXdWYWx1ZUZyb21EYXQKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpAQCAtOTc1LDkzICs5NzUsOTMgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdAogICAgICAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3Jl
Z29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKICAgICAgICAgICAgIDogdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgICAgICBpZiAoIW90aGVyKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc05hTigp
OwogICAgICAgICBncmVnb3JpYW5EYXRlVGltZS5jb3B5RnJvbSgqb3RoZXIpOwogICAgIH0KICAg
ICAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBudW1BcmdzVG9V
c2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1
bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfSAKIAogICAgIGRvdWJsZSBuZXdVVENEYXRlID0gZ3JlZ29yaWFu
RGF0ZVRpbWVUb01TKHZtLCBncmVnb3JpYW5EYXRlVGltZSwgbXMsIGlucHV0VGltZVR5cGUpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIodGltZUNsaXAobmV3VVRDRGF0ZSkpOwogICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNl
Y29uZHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1l
QXJncyhleGVjLCAxLCBXVEY6OkxvY2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4
ZWMsIDEsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBy
ZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMiwgV1RGOjpMb2NhbFRpbWUpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNv
bmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVl
RnJvbVRpbWVBcmdzKGV4ZWMsIDIsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMywgV1RG
OjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0
dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDMsIFdURjo6VVRDVGltZSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0SG91cnMo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCA0LCBXVEY6OkxvY2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCA0LCBXVEY6OlVUQ1RpbWUp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXREYXRl
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0
RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVB
cmdzKGV4ZWMsIDEsIFdURjo6TG9jYWxUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAxLCBXVEY6OlVUQ1Rp
bWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRN
b250aChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9t
RGF0ZUFyZ3MoZXhlYywgMiwgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMiwgV1RG
OjpVVENUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDMsIFdURjo6TG9jYWxUaW1lKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENG
dWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURh
dGVBcmdzKGV4ZWMsIDMsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmICghZXhlYy0+
YXJndW1lbnRDb3VudCgpKSB7IAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAg
ICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVy
KCk7CkBAIC0xMDk1LDE3ICsxMDk1LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnUKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeWVhcikpIHsKICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc05hTigpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZSh2bSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGdyZWdvcmlhbkRhdGVUaW1l
LnNldFllYXIodG9JbnQzMigoeWVhciA+PSAwICYmIHllYXIgPD0gOTkpID8gKHllYXIgKyAxOTAw
KSA6IHllYXIpKTsKICAgICBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzID0gZ3JlZ29yaWFuRGF0
ZVRpbWVUb01TKHZtLCBncmVnb3JpYW5EYXRlVGltZSwgbXMsIFdURjo6TG9jYWxUaW1lKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHRpbWVDbGlwKHRpbWVJbk1pbGxpc2Vjb25kcykp
OwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhl
Yy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAg
LTExMTYsMjcgKzExMTYsMjcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0g
dGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CisgICAg
ICAgIHJldHVybiBqc05hTigpOwogCiAgICAgLy8gTk9URTogSUUgcmV0dXJucyB0aGUgZnVsbCB5
ZWFyIGV2ZW4gaW4gZ2V0WWVhci4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkgLSAxOTAwKSk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkgLSAxOTAwKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlz
KGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZl
ck51bWJlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAodGltZVZh
bHVlLmlzTnVtYmVyKCkgJiYgISh0aW1lVmFsdWUuaXNJbnQzMigpIHx8IHN0ZDo6aXNmaW5pdGUo
dGltZVZhbHVlLmFzRG91YmxlKCkpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIEpTVmFsdWUgdG9JU09W
YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0b0lTT1ZhbHVlLCBjYWxsRGF0
YSk7CkBAIC0xMTQ0LDEwICsxMTQ0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKSk7CiAKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09WYWx1ZSksIGNhbGxUeXBl
LCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5n
IGRpZCBub3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIikpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01Miw2ICs1Miw2IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKik7CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VD
TUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEwICsz
MywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIGlz
Q29uc3RydWN0b3IgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc0NvbnN0cnVjdG9yKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNDb25zdHJ1Y3RvcikpOwor
ICAgIHJldHVybiBqc0Jvb2xlYW4oaXNDb25zdHJ1Y3Rvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJ
bnRlcm5hbEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDYgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjSXNDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlc1NwZWNJc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3IuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA4LCAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC04OSwxNCArODksMTMgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4
RQogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRl
KiwgVGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIGlubGluZSBKU09i
amVjdCogdGhyb3dSYW5nZUVycm9yKEV4ZWNTdGF0ZSogc3RhdGUsIFRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3Rh
dGUsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKHN0YXRlLCBlcnJvck1lc3NhZ2UpKTsgfQogCi0v
LyBDb252ZW5pZW5jZSB3cmFwcGVycywgd3JhcCByZXN1bHQgYXMgYW4gRW5jb2RlZEpTVmFsdWUu
CiBpbmxpbmUgdm9pZCB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IGV4Y2VwdGlvbik7IH0KLWlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgSlNWYWx1ZSBlcnJvcikgeyByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOyB9Ci1pbmxp
bmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoZXJyb3JNZXNzYWdlKSkpKTsgfQotaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1U
eXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSkgeyByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7IH0KLWlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJyb3JNZXNzYWdlKSk7IH0KLWlubGluZSBF
bmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVycm9yTWVzc2FnZSkpOyB9Ci1pbmxp
bmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSwgVGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dSYW5nZUVycm9yKHN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKSk7
IH0KK2lubGluZSBKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2Nv
cGUmIHNjb3BlLCBKU1ZhbHVlIGVycm9yKSB7IHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgZXJyb3IpOyB9CitpbmxpbmUgSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKSB7IHJldHVy
biB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKGVycm9yTWVzc2FnZSkpKTsgfQoraW5saW5lIEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlKSB7IHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSk7IH0KK2lubGluZSBKU1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgQVNDSUlMaXRlcmFsIGVycm9yTWVzc2FnZSkg
eyByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVycm9yTWVzc2FnZSk7IH0KK2lu
bGluZSBKU1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOyB9CitpbmxpbmUgSlNWYWx1ZSB0aHJvd1ZN
UmFuZ2VFcnJvcihFeGVjU3RhdGUqIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIHRocm93UmFuZ2VFcnJvcihzdGF0ZSwgc2NvcGUs
IGVycm9yTWVzc2FnZSk7IH0KIAogY2xhc3MgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHJpdmF0ZToKQEAgLTExOCwxMiArMTE3LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwogICAgIH0KIAotICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFRo
cm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIHN0YXRpY19jYXN0PFN0cmljdE1v
ZGVUeXBlRXJyb3JGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpLT5tX21lc3NhZ2UpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERh
dGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTEzMiwxMiArMTMx
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiAgICAg
fQogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlw
ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewogICAgICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzdGF0aWNfY2FzdDxT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKS0+bV9tZXNzYWdl
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKICAgICB9CiAKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEo
SlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDgsMTUgKzQ4LDE1IEBAIHZvaWQgRXJyb3JD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0KIAogLy8gRUNNQSAxNS45LjMKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJl
dGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
U3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVyZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0
cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0
dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwg
bnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAogQ29uc3RydWN0VHlwZSBFcnJvckNv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCkBAIC02NSwxMSArNjUsMTEgQEAgQ29uc3RydWN0VHlwZSBFcnJvckNvbnN0cnVj
dG9yOjpnZXRDb25zdAogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNh
bGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0g
YXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhp
bmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJv
clN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAog
Q2FsbFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
IGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEVycm9yUHJvdG90eXBlKTsKIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqKTsKIAogfQogCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgRXJyb3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5j
dGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEtMjYyIDUuMSwgMTUu
MTEuNC40Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODIsMTEgKzgyLDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iaik7CiAgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpT
VmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOworICAgICAgICBy
ZXR1cm4gZWFybHlSZXR1cm5WYWx1ZTsKIAogICAgIC8vIDMuIExldCBuYW1lIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3Vt
ZW50ICJuYW1lIi4KICAgICBKU1ZhbHVlIG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm5hbWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICAvLyA0LiBJZiBuYW1lIGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbmFtZSBiZSAiRXJyb3Ii
OyBlbHNlIGxldCBuYW1lIGJlIFRvU3RyaW5nKG5hbWUpLgogICAgIFN0cmluZyBuYW1lU3RyaW5n
OwpAQCAtOTQsMTIgKzk0LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQ
cm90b0YKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKTsKICAgICBl
bHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAogICAgIC8vIDUuIExl
dCBtc2cgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggYXJndW1lbnQgIm1lc3NhZ2UiLgogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRo
aXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIChzaWMpCiAgICAgLy8gNi4gSWYgbXNn
IGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbXNnIGJlIHRoZSBlbXB0eSBTdHJpbmc7IGVsc2UgbGV0
IG1zZyBiZSBUb1N0cmluZyhtc2cpLgpAQCAtMTA5LDIwICsxMDksMjAgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3Ry
aW5nKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICB9CiAKICAgICAvLyA4LiBJZiBuYW1lIGlzIHRoZSBlbXB0eSBTdHJpbmcsIHJldHVybiBtc2cu
CiAgICAgaWYgKCFuYW1lU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG1lc3NhZ2UuaXNTdHJpbmcoKSA/IG1lc3NhZ2UgOiBqc1N0cmluZyhleGVjLCBtZXNz
YWdlU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBtZXNzYWdlLmlzU3RyaW5nKCkgPyBtZXNzYWdl
IDoganNTdHJpbmcoZXhlYywgbWVzc2FnZVN0cmluZyk7CiAKICAgICAvLyA5LiBJZiBtc2cgaXMg
dGhlIGVtcHR5IFN0cmluZywgcmV0dXJuIG5hbWUuCiAgICAgaWYgKCFtZXNzYWdlU3RyaW5nLmxl
bmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWUuaXNTdHJpbmcoKSA/
IG5hbWUgOiBqc1N0cmluZyhleGVjLCBuYW1lU3RyaW5nKSk7CisgICAgICAgIHJldHVybiBuYW1l
LmlzU3RyaW5nKCkgPyBuYW1lIDoganNTdHJpbmcoZXhlYywgbmFtZVN0cmluZyk7CiAKICAgICAv
LyAxMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyBuYW1lLCAiOiIsIGEgc2lu
Z2xlIHNwYWNlIGNoYXJhY3RlciwgYW5kIG1zZy4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIG5hbWVT
dHJpbmcsICI6ICIsIG1lc3NhZ2VTdHJpbmcpKTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCBuYW1lU3RyaW5nLCAiOiAiLCBtZXNzYWdlU3RyaW5nKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAx
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDA4LCAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTAsMTAgKzUwLDEwIEBAIHZvaWQg
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24KICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhGdW5j
dGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhl
Yyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdz
LCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkZ1bmN0aW9uLCBleGVjLT5uZXdUYXJnZXQoKSkp
OworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVj
dGlvbk1vZGU6OkZ1bmN0aW9uLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5
cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtNjIsMTAgKzYyLDEwIEBAIENvbnN0cnVjdFR5cGUg
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q28KICAgICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9z
dDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlz
dCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rp
b24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKSwgYXJncykpOworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzKTsKIH0K
IAogLy8gRUNNQSAxNS4zLjEgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9yIENhbGxlZCBhcyBhIEZ1
bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MDksIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00MSw3ICs0MSw3IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVu
Y3Rpb25Qcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CiAKIEZ1
bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbih2bSwgc3RydWN0dXJlKQpAQCAtNzUsOSAr
NzUsOSBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjppbml0UmVzdHJpY3RlZFByCiAgICAgcHV0
RGlyZWN0QWNjZXNzb3IoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLCBlcnJvckdl
dHRlclNldHRlciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRl
KikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyBFQ01BIDE1LjMuNApAQCAtODcsNyArODcsNyBA
QCBDYWxsVHlwZSBGdW5jdGlvblByb3RvdHlwZTo6Z2V0Q2FsbERhdGEoCiAgICAgcmV0dXJuIENh
bGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtOTcsMTMgKzk3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Qcm8KICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KHRoaXNWYWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0T3JCdWlsdGluRnVuY3Rp
b24oKSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAi
LCBmdW5jdGlvbi0+bmFtZSh2bSksICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAi
LCBmdW5jdGlvbi0+bmFtZSh2bSksICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAg
ICAgICB9CiAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rp
b24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aXNDbGFzcygpKSB7
CiAgICAgICAgICAgICBTdHJpbmdWaWV3IGNsYXNzU291cmNlID0gZXhlY3V0YWJsZS0+Y2xhc3NT
b3VyY2UoKS52aWV3KCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKGV4ZWMsIGNsYXNzU291cmNlLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGNsYXNzU291cmNlLnRvU3RyaW5nV2l0aG91dENv
cHlpbmcoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKEpT
QXN5bmNGdW5jdGlvbjo6aW5mbygpKSkgewpAQCAtMTEyLDcgKzExMiw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAgICAgICAgIFN0cmluZ1ZpZXcgc291
cmNlID0gZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCiAgICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCksCiAgICAgICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgKyBleGVjdXRhYmxlLT5z
b3VyY2UoKS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgZnVuY3Rpb25IZWFkZXIsIGZ1bmN0aW9uLT5uYW1l
KHZtKSwgc291cmNlKSk7CisgICAgICAgICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCBmdW5jdGlvbkhlYWRlciwgZnVuY3Rpb24tPm5hbWUodm0pLCBzb3VyY2UpOwogICAg
ICAgICB9CiAKICAgICAgICAgU3RyaW5nIGZ1bmN0aW9uSGVhZGVyID0gZXhlY3V0YWJsZS0+aXNB
cnJvd0Z1bmN0aW9uKCkgPyAiIiA6ICJmdW5jdGlvbiAiOwpAQCAtMTIxLDEzICsxMjEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgICAgICAgICAgZXhl
Y3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCksCiAgICAgICAgICAgICBleGVjdXRhYmxl
LT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSArIGV4ZWN1dGFibGUtPnNvdXJjZSgpLmxlbmd0aCgp
KTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgZnVuY3Rpb25IZWFkZXIsIGZ1bmN0aW9u
LT5uYW1lKHZtKSwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIGZ1bmN0aW9uSGVhZGVyLCBmdW5jdGlvbi0+bmFtZSh2bSksIHNvdXJjZSk7CiAg
ICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZv
KCkpKSB7CiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKHRoaXNWYWx1ZSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlv
biAiLCBmdW5jdGlvbi0+bmFtZSgpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSk7Cisg
ICAgICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBm
dW5jdGlvbi0+bmFtZSgpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKTsKICAgICB9CiAK
ICAgICBpZiAodGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTEzNyw3ICsxMzcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgICAgICAgICBpZiAob2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENh
bGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNsYXNzSW5mbyA9IG9i
amVjdC0+Y2xhc3NJbmZvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIsIGNsYXNzSW5mby0+Y2xhc3NOYW1lLCAiKCkg
e1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBq
c01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBjbGFzc0luZm8tPmNsYXNz
TmFtZSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxNiArNTEs
MTYgQEAgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5pcwogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsR2VuZXJhdG9yRnVuY3Rp
b25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywg
RnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpHZW5lcmF0b3IpKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpHZW5lcmF0b3Ip
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5l
cmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rp
b25Nb2RlOjpHZW5lcmF0b3IsIGV4ZWMtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0
cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6R2VuZXJhdG9y
LCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAKIENhbGxUeXBlIEdlbmVyYXRvckZ1bmN0aW9uQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
T2JqZWN0TG9nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdExvZyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC04MSwxNSArODEs
MTUgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Q6OmRpcwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uT2JqZWN0TG9nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBpbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAg
ICAgU3RyaW5nIHZhbHVlID0gdGFyZ2V0LnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZGF0YUxvZyh2YWx1ZSwgIlxuIik7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2Fr
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRShJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2Fs
ZXNPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxh
dG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSopOwogCiB9CiAK
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YQogICAgIG1fY29sbGF0b3JTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBjb2xsYXRvclN0cnVjdHVy
ZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdElu
dGxDb2xsYXRvcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC05MSwxNyArOTEsMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgIC8vIDIuIExldCBjb2xsYXRvciBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1
Y3RvcihuZXdUYXJnZXQsICVDb2xsYXRvclByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklm
QWJydXB0KGNvbGxhdG9yKS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCks
IGpzQ2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKS0+Y29s
bGF0b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBJ
bnRsQ29sbGF0b3IqIGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVy
ZSk7CiAgICAgQVNTRVJUKGNvbGxhdG9yKTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXpl
Q29sbGF0b3IoY29sbGF0b3IsIGxvY2FsZXMsIG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y29sbGF0b3IpOworICAgIHJldHVybiBjb2xsYXRvcjsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxDb2xsYXRvcihFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgLy8gMTAuMS4yIEludGwuQ29sbGF0b3IgKFtsb2NhbGVzIFssIG9wdGlvbnNd
XSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBs
ZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBlbHNlIGxldCBuZXdU
YXJnZXQgYmUgTmV3VGFyZ2V0LgpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29s
bGF0b3IoY29sbGF0b3IsIGxvY2FsZXMsIG9wdGlvbnMpLgogICAgIGNvbGxhdG9yLT5pbml0aWFs
aXplQ29sbGF0b3IoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgx
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb2xsYXRvcik7CisgICAgcmV0dXJuIGNv
bGxhdG9yOwogfQogCiBDb25zdHJ1Y3RUeXBlIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0x
MzUsNyArMTM1LDcgQEAgQ2FsbFR5cGUgSW50bENvbGxhdG9yQ29uc3RydWN0b3I6OmdldENhbAog
ICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xNDUsMTIgKzE0NSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxD
b2xsYXRvCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6
ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gMi4gUmV0
dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKCVDb2xsYXRvciUuW1th
dmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3Vw
cG9ydGVkTG9jYWxlcygqc3RhdGUsIGdsb2JhbE9iamVjdC0+aW50bENvbGxhdG9yQXZhaWxhYmxl
TG9jYWxlcygpLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpKTsKKyAgICBy
ZXR1cm4gc3VwcG9ydGVkTG9jYWxlcygqc3RhdGUsIGdsb2JhbE9iamVjdC0+aW50bENvbGxhdG9y
QXZhaWxhYmxlTG9jYWxlcygpLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkp
OwogfQogCiB2b2lkIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29t
KQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsOCArMzYsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFyZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvclByb3RvdHlwZUZ1bmNSZXNvbHZl
ZE9wdGlvbnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxD
b2xsYXRvclByb3RvdHlwZUdldHRlckNvbXBhcmUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvclByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMo
RXhlY1N0YXRlKik7CiAKIH0KIApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIEludGxDb2xsYXRvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29t
cGFyZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTkwLDIzICs5MCwyMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
CiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmcoeCkuCiAgICAgSlNTdHJpbmcqIHggPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpOwogICAgIC8vIDYuIFJldHVybklmQWJydXB0
KFgpLgotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyA3LiBMZXQgWSBi
ZSBUb1N0cmluZyh5KS4KICAgICBKU1N0cmluZyogeSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0
cmluZyhzdGF0ZSk7CiAgICAgLy8gOC4gUmV0dXJuSWZBYnJ1cHQoWSkuCi0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDkuIFJldHVybiBDb21wYXJlU3RyaW5ncyhjb2xs
YXRvciwgWCwgWSkuCiAgICAgYXV0byB4Vmlld1dpdGhTdHJpbmcgPSB4LT52aWV3V2l0aFVuZGVy
bHlpbmdTdHJpbmcoKnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IGF1dG8geVZpZXdXaXRoU3RyaW5nID0geS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpzdGF0
ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb2xsYXRvci0+Y29tcGFyZVN0cmluZ3MoKnN0
YXRlLCB4Vmlld1dpdGhTdHJpbmcudmlldywgeVZpZXdXaXRoU3RyaW5nLnZpZXcpKTsKKyAgICBy
ZXR1cm4gY29sbGF0b3ItPmNvbXBhcmVTdHJpbmdzKCpzdGF0ZSwgeFZpZXdXaXRoU3RyaW5nLnZp
ZXcsIHlWaWV3V2l0aFN0cmluZy52aWV3KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVHZXR0ZXJDb21wYXJlKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFy
ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExNSw3ICsxMTUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvCiAgICAgLy8gMS4gTGV0IGNv
bGxhdG9yIGJlIHRoaXMgQ29sbGF0b3Igb2JqZWN0LgogICAgIEludGxDb2xsYXRvciogY29sbGF0
b3IgPSBqc0R5bmFtaWNDYXN0PEludGxDb2xsYXRvcio+KHN0YXRlLT50aGlzVmFsdWUoKSk7CiAg
ICAgaWYgKCFjb2xsYXRvcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5Db2xsYXRvci5wcm90b3R5
cGUuY29tcGFyZSBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6
ZWQgYXMgYSBDb2xsYXRvciIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xs
YXRvciIpKTsKIAogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRDb21wYXJlID0gY29sbGF0b3It
PmJvdW5kQ29tcGFyZSgpOwogICAgIC8vIDIuIElmIGNvbGxhdG9yLltbYm91bmRDb21wYXJlXV0g
aXMgdW5kZWZpbmVkLApAQCAtMTI3LDE1ICsxMjcsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsQ29sbGF0bwogCiAgICAgICAgIC8vIGMuIExldCBiYyBiZSBCb3VuZEZ1bmN0
aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRDb21wYXJlID0gSlNC
b3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVj
dCwgY29sbGF0b3IsIG51bGxwdHIsIDIsIEFTQ0lJTGl0ZXJhbCgiY29tcGFyZSIpKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIC8vIGQuIFNldCBjb2xs
YXRvci5bW2JvdW5kQ29tcGFyZV1dIHRvIGJjLgogICAgICAgICBjb2xsYXRvci0+c2V0Qm91bmRD
b21wYXJlKHZtLCBib3VuZENvbXBhcmUpOwogICAgIH0KICAgICAvLyAzLiBSZXR1cm4gY29sbGF0
b3IuW1tib3VuZENvbXBhcmVdXS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJvdW5kQ29t
cGFyZSk7CisgICAgcmV0dXJuIGJvdW5kQ29tcGFyZTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yUHJvdG90eXBl
RnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTE0MywxMCArMTQzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxh
dG8KICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25z
KCkgKEVDTUEtNDAyIDIuMCkKICAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0ganNEeW5hbWlj
Q2FzdDxJbnRsQ29sbGF0b3IqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY29sbGF0
b3IpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0
aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMg
YSBDb2xsYXRvciIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25z
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIENv
bGxhdG9yIikpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY29sbGF0b3ItPnJlc29sdmVkT3B0aW9ucygqc3RhdGUpKTsKKyAgICByZXR1cm4gY29s
bGF0b3ItPnJlc29sdmVkT3B0aW9ucygqc3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQW5keSBWYW5XYWdvbmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2Yo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKIAogfQog
CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmZp
bmkKICAgICBtX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgZGF0ZVRpbWVG
b3JtYXRTdHJ1Y3R1cmUpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bERhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEsMTcgKzkxLDE3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3Jt
YXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVG
b3JtYXRQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1h
dCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bERh
dGVUaW1lRm9ybWF0Q29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUoKSktPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSW50
bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7CiAKICAgICAv
LyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVUaW1lRm9ybWF0LCBsb2Nh
bGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgZGF0ZVRpbWVGb3JtYXQt
PmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgc3Rh
dGUtPmFyZ3VtZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRhdGVUaW1lRm9y
bWF0KTsKKyAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQ7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0
ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxEYXRlVGltZUZvcm1hdChF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDEyLjEuMiBJbnRsLkRhdGVUaW1lRm9ybWF0IChb
bG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFy
Z2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9i
amVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KQEAgLTExMSw3ICsxMTEsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBGSVhN
RTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBFQ01BLTQwMiAxLjAg
Y2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUzNjc5Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RJ
bnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3RvcjxJbnRsRGF0
ZVRpbWVGb3JtYXQ+KCpzdGF0ZSwgc3RhdGUtPnRoaXNWYWx1ZSgpLCBjYWxsZWUsIFsmXSAoVk0m
IHZtKSB7CisgICAgcmV0dXJuIGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhXb3JrYXJvdW5kRm9y
TGVnYWN5SW50bENvbnN0cnVjdG9yPEludGxEYXRlVGltZUZvcm1hdD4oKnN0YXRlLCBzdGF0ZS0+
dGhpc1ZhbHVlKCksIGNhbGxlZSwgWyZdIChWTSYgdm0pIHsKICAgICAgICAgLy8gMi4gTGV0IGRh
dGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwg
JURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSkuCiAgICAgICAgIC8vIDMuIFJldHVybklmQWJydXB0
KGRhdGVUaW1lRm9ybWF0KS4KICAgICAgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZv
cm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6Y3JlYXRlKHZtLCBjYWxsZWUtPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVEYXRl
VGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCiAgICAgICAgIGRh
dGVUaW1lRm9ybWF0LT5pbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgICAgIHJldHVybiBkYXRlVGltZUZv
cm1hdDsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBDYWxsVHlwZSBJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNP
ZihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0NywxMSArMTQ3LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAogICAgIC8vIDIuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKCpzdGF0ZSwgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50KDEpKSk7CisgICAg
cmV0dXJuIHN1cHBvcnRlZExvY2FsZXMoKnN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwogfQogCiB2b2lkIEludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsOCArNDAsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVu
Y1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVG
dW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTgwLDcgKzgwLDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGU6OmZpbmlzaAogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVUaW1lKEV4ZWNTdGF0ZSogc3RhdGUpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXRE
YXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTk1LDIxICs5NSwy
MSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gMy4g
SWYgZGF0ZSBpcyBub3QgcHJvdmlkZWQgb3IgaXMgdW5kZWZpbmVkLCB0aGVuCiAgICAgaWYgKGRh
dGUuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAvLyBhLiBMZXQgeCBiZSAlRGF0ZV9ub3clKCku
Ci0gICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGRhdGVOb3coc3RhdGUpKS50b051bWJl
cihzdGF0ZSk7CisgICAgICAgIHZhbHVlID0gZGF0ZU5vdyhzdGF0ZSkudG9OdW1iZXIoc3RhdGUp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIDQuIEVsc2UKICAgICAgICAgLy8gYS4gTGV0IHgg
YmUgVG9OdW1iZXIoZGF0ZSkuCiAgICAgICAgIHZhbHVlID0gZGF0ZS50b051bWJlcihzdGF0ZSk7
CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KHgpLgotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKICAgICAvLyA1LiBSZXR1cm4gRm9ybWF0RGF0ZVRp
bWUoZHRmLCB4KS4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShmb3JtYXQtPmZvcm1hdCgqc3RhdGUsIHZhbHVlKSk7CisgICAgcmV0dXJuIGZvcm1hdC0+
Zm9ybWF0KCpzdGF0ZSwgdmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRl
ckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyMiwxMyArMTIy
LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgaWYgKCFk
dGYpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKS5nZXQoc3Rh
dGUsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQ
cml2YXRlTmFtZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgICAgIGR0ZiA9IGpzRHluYW1pY0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4odmFsdWUpOwog
ICAgIH0KIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KGR0ZikuCiAgICAgaWYgKCFkdGYpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxs
ZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGlt
ZUZvcm1hdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0IGNhbGxl
ZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIERhdGVUaW1l
Rm9ybWF0IikpOwogCiAgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZvcm1hdCA9IGR0Zi0+Ym91
bmRGb3JtYXQoKTsKICAgICAvLyAzLiBJZiB0aGUgW1tib3VuZEZvcm1hdF1dIGludGVybmFsIHNs
b3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1hdCBvYmplY3QgaXMgdW5kZWZpbmVkLApAQCAtMTM5LDE5
ICsxMzksMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogICAg
ICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRPYmplY3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSwgSW50bERhdGVUaW1lRm9ybWF0
RnVuY0Zvcm1hdERhdGVUaW1lLCBOb0ludHJpbnNpYyk7CiAgICAgICAgIEpTQXJyYXkqIGJvdW5k
QXJncyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVu
ZGVjaWRlZCksIDApOwogICAgICAgICBpZiAoIWJvdW5kQXJncykKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihzdGF0ZSwgc2NvcGUpOwog
CiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2
YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2
bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwg
QVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICAvLyBkLiBTZXQgZHRmLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAg
ICAgICAgZHRmLT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRGb3JtYXQpOwogICAgIH0KICAgICAv
LyA0LiBSZXR1cm4gZHRmLltbYm91bmRGb3JtYXRdXS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGJvdW5kRm9ybWF0KTsKKyAgICByZXR1cm4gYm91bmRGb3JtYXQ7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29s
dmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxE
YXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjMsMTUgKzE2MywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAgIGlmICghZGF0ZVRpbWVGb3JtYXQpIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKS5nZXQoc3RhdGUsIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQcml2YXRlTmFtZSgp
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGRhdGVU
aW1lRm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXQqPih2YWx1ZSk7CiAg
ICAgfQogCiAgICAgaWYgKCFkYXRlVGltZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5E
YXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0
aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIERhdGVUaW1lRm9ybWF0IikpKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3Jt
YXQiKSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShkYXRlVGltZUZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKCpzdGF0ZSkpOworICAgIHJldHVybiBk
YXRlVGltZUZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKCpzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaAog
ICAgIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgbnVtYmVyRm9ybWF0U3Ry
dWN0dXJlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SW50bE51bWJlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtOTEsMTcgKzkxLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5
Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUp
LgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShz
dGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpLT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJG
b3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNT
RVJUKG51bWJlckZvcm1hdCk7CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZU51bWJlckZv
cm1hdChudW1iZXJGb3JtYXQsIGxvY2FsZXMsIG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICBudW1iZXJGb3JtYXQtPmluaXRpYWxpemVOdW1iZXJGb3JtYXQoKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShudW1iZXJGb3JtYXQpOworICAgIHJldHVybiBudW1iZXJGb3JtYXQ7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsTnVtYmVyRm9ybWF0KEV4
ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsTnVt
YmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgLy8gMTEuMS4yIEludGwuTnVtYmVy
Rm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4g
SWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1
bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KQEAgLTExMSw3
ICsxMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAg
ICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBFQ01B
LTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
b25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3Rv
cjxJbnRsTnVtYmVyRm9ybWF0Pigqc3RhdGUsIHN0YXRlLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBb
Jl0gKFZNJiB2bSkgeworICAgIHJldHVybiBjb25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fy
b3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3RvcjxJbnRsTnVtYmVyRm9ybWF0Pigqc3RhdGUsIHN0
YXRlLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBbJl0gKFZNJiB2bSkgewogICAgICAgICAvLyAyLiBM
ZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1Rhcmdl
dCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgICAgICAvLyAzLiBSZXR1cm5JZkFicnVw
dChudW1iZXJGb3JtYXQpLgogICAgICAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQg
PSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGNhbGxlZS0+bnVtYmVyRm9ybWF0U3RydWN0
dXJlKCkpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQo
bnVtYmVyRm9ybWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KICAgICAgICAgbnVtYmVyRm9ybWF0LT5p
bml0aWFsaXplTnVtYmVyRm9ybWF0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0ZS0+
YXJndW1lbnQoMSkpOwogICAgICAgICByZXR1cm4gbnVtYmVyRm9ybWF0OwotICAgIH0pKTsKKyAg
ICB9KTsKIH0KIAogQ29uc3RydWN0VHlwZSBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6Omdl
dENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAg
LTEzNSw3ICsxMzUsNyBAQCBDYWxsVHlwZSBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6Omdl
CiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2Yo
RXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtMTQ3LDExICsxNDcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsTnVtYmVyRgogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fu
b25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0
ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDMuIFJldHVy
biBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9w
dGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN1cHBvcnRlZExvY2FsZXMoKnN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpKTsKKyAgICByZXR1cm4gc3VwcG9ydGVkTG9jYWxlcygq
c3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIHN0YXRlLT5hcmd1bWVu
dCgxKSk7CiB9CiAKIHZvaWQgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhl
dGFsZWNyYWZ0ZXJAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsOCArMzgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9y
bWF0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqKTsKIAogfQogCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3IK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRG
dW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEs
MTQgKzkxLDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAg
ICAvLyA0LiBMZXQgeCBiZSBUb051bWJlcih2YWx1ZSkuCiAgICAgZG91YmxlIG51bWJlciA9IHN0
YXRlLT5hcmd1bWVudCgwKS50b051bWJlcihzdGF0ZSk7CiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1
cHQoeCkuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDYuIFJldHVy
biBGb3JtYXROdW1iZXIobmYsIHgpLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0TnVtYmVyKCpzdGF0ZSwgbnVtYmVy
KSk7CisgICAgcmV0dXJuIG51bWJlckZvcm1hdC0+Zm9ybWF0TnVtYmVyKCpzdGF0ZSwgbnVtYmVy
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExMSwxMiArMTExLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bE51bWJlckYKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgaWYgKCFuZikgewogICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpLmdldChzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCkpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgbmYgPSBqc0R5bmFtaWNDYXN0
PEludGxOdW1iZXJGb3JtYXQqPih2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFuZikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBOdW1iZXJGb3JtYXQi
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0IikpOwog
ICAgIAogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRGb3JtYXQgPSBuZi0+Ym91bmRGb3JtYXQo
KTsKICAgICAvLyAyLiBJZiBuZi5bW2JvdW5kRm9ybWF0XV0gaXMgdW5kZWZpbmVkLApAQCAtMTI3
LDE5ICsxMjcsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgog
ICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRPYmplY3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSwgSW50bE51bWJlckZvcm1h
dEZ1bmNGb3JtYXROdW1iZXIsIE5vSW50cmluc2ljKTsKICAgICAgICAgSlNBcnJheSogYm91bmRB
cmdzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5k
ZWNpZGVkKSwgMCk7CiAgICAgICAgIGlmICghYm91bmRBcmdzKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3Ioc3RhdGUsIHNjb3BlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSk7CiAK
ICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlzIHZh
bHVlwrspLgogICAgICAgICBib3VuZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEsIEFT
Q0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAg
ICAgbmYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CiAgICAgfQogICAgIC8vIDMu
IFJldHVybiBuZi5bW2JvdW5kRm9ybWF0XV0uCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShi
b3VuZEZvcm1hdCk7CisgICAgcmV0dXJuIGJvdW5kRm9ybWF0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRp
b25zKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNTEsMTUgKzE1MSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxOdW1iZXJGCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzY3OQogICAgIGlmICghbnVtYmVyRm9ybWF0KSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCkuZ2V0KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBudW1iZXJGb3JtYXQgPSBq
c0R5bmFtaWNDYXN0PEludGxOdW1iZXJGb3JtYXQqPih2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYg
KCFudW1iZXJGb3JtYXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuTnVtYmVyRm9ybWF0LnByb3Rv
dHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnRsLk51bWJlckZvcm1hdC5w
cm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIE51bWJlckZvcm1hdCIpKTsKIAogICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+cmVzb2x2ZWRP
cHRpb25zKCpzdGF0ZSkpOworICAgIHJldHVybiBudW1iZXJGb3JtYXQtPnJlc29sdmVkT3B0aW9u
cygqc3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5XYWdv
bmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3Vr
b2xzYWsgU2Frc2h1d29uZyAoc3Vrb2xzYWtAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEludGxPYmplY3QpOwogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnRsT2JqZWN0RnVuY0dldENhbm9uaWNhbExv
Y2FsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGludGxPYmpl
Y3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0xMDE4LDcg
KzEwMTgsNyBAQCBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdTeXN0ZW1zRm9yTG9jYWxlCiAgICAg
cmV0dXJuIG51bWJlcmluZ1N5c3RlbXM7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgaW50bE9iamVjdEZ1bmNHZXRDYW5vbmljYWxMb2NhbGVzKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW50bE9iamVjdEZ1bmNHZXRDYW5vbmljYWxMb2NhbGVzKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTAyNywyMiArMTAyNywyMiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGludGxPYmplY3RGCiAKICAgICAvLyAxLiBMZXQg
bGwgYmUgPyBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJp
bmc+IGxvY2FsZUxpc3QgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMi4g
UmV0dXJuIENyZWF0ZUFycmF5RnJvbUxpc3QobGwpLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNBcnJh
eSogbG9jYWxlQXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhDb250aWd1b3VzKSwgbG9jYWxlTGlzdC5zaXplKCkpOwogICAgIGlmICghbG9jYWxl
QXJyYXkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAogICAgIGF1dG8gbGVuZ3RoID0gbG9jYWxlTGlzdC5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBsb2NhbGVBcnJheS0+aW5pdGlh
bGl6ZUluZGV4KHZtLCBpLCBqc1N0cmluZyhzdGF0ZSwgbG9jYWxlTGlzdFtpXSkpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShsb2NhbGVBcnJheSk7CisgICAgcmV0dXJuIGxvY2FsZUFycmF5OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUJ1ZmZlckZ1bmNJc1ZpZXcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5QnVmZmVyRnVuY0lzVmlldyhFeGVjU3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZv
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0gewogICAgICJGdW5jdGlvbiIsICZC
YXNlOjpzX2luZm8sIDAsCkBAIC04MCw3ICs4MCw3IEBAIFN0cnVjdHVyZSogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmUKICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJyYXlC
dWZmZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEsNyArOTEsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgdW5zaWduZWQgbGVu
Z3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgbGVuZ3RoID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbmRleChleGVjLCAibGVuZ3RoIik7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIEFsdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc2F5IHNvLCBpdCBpcyBpbiBm
YWN0IGNvcnJlY3QgdG8gc2F5CiAgICAgICAgIC8vICJuZXcgQXJyYXlCdWZmZXIoKSIuIFRoZSBy
ZXN1bHQgaXMgdGhlIHNhbWUgYXMgYWxsb2NhdGluZyBhbiBhcnJheSBidWZmZXIKQEAgLTEwMSw3
ICsxMDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
CiAgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aCwgMSk7CiAg
ICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIAogICAgIGlmIChjb25zdHJ1Y3Rvci0+c2hhcmlu
Z01vZGUoKSA9PSBBcnJheUJ1ZmZlclNoYXJpbmdNb2RlOjpTaGFyZWQpCiAgICAgICAgIGJ1ZmZl
ci0+bWFrZVNoYXJlZCgpOwpAQCAtMTA5LDE3ICsxMDksMTcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+c2hhcmluZ01v
ZGUoKSA9PSBidWZmZXItPnNoYXJpbmdNb2RlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogYXJy
YXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgp
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShjb25zdHJ1Y3Rvci0+c2hhcmluZ01vZGUoKSkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0g
SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBhcnJheUJ1ZmZlclN0cnVjdHVyZSwgV1RGTW92ZShi
dWZmZXIpKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFz
RnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcnJheUJ1ZmZlciIpKTsKKyAgICByZXR1
cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVj
LCBzY29wZSwgIkFycmF5QnVmZmVyIik7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKApAQCAtMTM4LDkgKzEzOCw5IEBAIENhbGxU
eXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2EKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogLy8gRUNNQSAyNC4xLjMuMQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1
ZmZlckZ1bmNJc1ZpZXcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5QnVmZmVyRnVuY0lzVmlldyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGV4
ZWMtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KGV4ZWMtPmFyZ3VtZW50KDApKSk7CiB9CiAgICAgCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1
bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01MCwyNCArNTAsMjQg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTbGljZSByZXF1
aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMyX3QgYmVnaW4g
PSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIH0gZWxzZQogICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgo
KTsKICAgICAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3Qt
PmltcGwoKS0+c2xpY2UoYmVnaW4sIGVuZCk7CiAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3Bl
KSk7CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUobmV3QnVmZmVyLT5zaGFyaW5nTW9kZSgpKTsKICAgICAKICAg
ICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0cnVj
dHVyZSwgbmV3QnVmZmVyKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNCb3VuZEZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNCb3VuZEZ1bmN0aW9uKSB9OwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKQEAg
LTUxLDEwICs1MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05v
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YSh0YXJnZXRGdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRh
cmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhp
cygpLCBhcmdzKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgYm91bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCksIGFyZ3MpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0ganNDYXN0PEpT
Qm91bmRGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwogCkBAIC03MiwxMCArNzIsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGFyZ2V0RnVuY3Rp
b24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCB0YXJnZXRGdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmN0aW9uLT5ib3VuZFRoaXMoKSwgYXJncykpOworICAg
IHJldHVybiBjYWxsKGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJv
dW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpLCBhcmdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlv
biA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKTsKIApAQCAtODcs
MTAgKzg3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm8KICAg
ICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1
Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7
CiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNv
bnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MpKTsKKyAgICByZXR1cm4gY29uc3RydWN0
KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdz
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9u
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5k
RnVuY3Rpb24gPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAK
QEAgLTEwOCwyMCArMTA4LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRG
dW5jdGkKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlw
ZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3Ry
dWN0RGF0YSk7CiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9u
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0RnVu
Y3Rpb24sIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MpKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGlzQm91bmRGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKHN0YXRpY19jYXN0PGJvb2w+KGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlKHN0YXRpY19j
YXN0PGJvb2w+KGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5z
dGFuY2VCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBoYXNJbnN0YW5jZUJvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQm91
bmRGdW5jdGlvbiogYm91bmRPYmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJv
dW5kT2JqZWN0LT50YXJnZXRGdW5jdGlvbigpLT5oYXNJbnN0YW5jZShleGVjLCB2YWx1ZSkpKTsK
KyAgICByZXR1cm4ganNCb29sZWFuKGJvdW5kT2JqZWN0LT50YXJnZXRGdW5jdGlvbigpLT5oYXNJ
bnN0YW5jZShleGVjLCB2YWx1ZSkpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTIgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0
aW9uQ2FsbChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRG
dW5jdGlvbkNhbGwoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJv
dW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNh
bGwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNhbGwo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rp
b25Db25zdHJ1Y3QoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5j
dGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5k
RnVuY3Rpb24oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5zdGFuY2VC
b3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSopOwogCiBjbGFzcyBKU0JvdW5kRnVuY3Rpb24gOiBwdWJs
aWMgSlNGdW5jdGlvbiB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAwNSwgMjAwNy0yMDA5LCAyMDEyLCAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NzYsMTEgKzU3Niw2
IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc051bWJlcih1bnNpZ25lZCAKICAgICByZXR1cm4g
SlNWYWx1ZShpKTsKIH0KIAotQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkSlNV
bmRlZmluZWQoKQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUoKQogewog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb24pIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbjo6Y3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
OjpjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
ID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgp
KTsKICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbUdldHRlclNldHRlciA9IGN1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLT5jdXN0b21HZXR0ZXJTZXR0ZXIoKTsKQEAgLTQ0LDEyICs0NCwx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQ3VzdG9tR2V0CiAgICAgICAgIEN1
c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciA9IGN1c3RvbUdldHRlclNldHRl
ci0+c2V0dGVyKCk7CiAgICAgICAgIEFTU0VSVChzZXR0ZXIpOwogICAgICAgICBjYWxsQ3VzdG9t
U2V0dGVyKGV4ZWMsIHNldHRlciwgdHJ1ZSwgZXhlYy0+dGhpc1ZhbHVlKCksIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3VzdG9tR2V0dGVy
U2V0dGVyOjpDdXN0b21HZXR0ZXIgZ2V0dGVyID0gY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIo
KTsKICAgICBBU1NFUlQoZ2V0dGVyKTsKLSAgICByZXR1cm4gZ2V0dGVyKGV4ZWMsIEpTVmFsdWU6
OmVuY29kZShleGVjLT50aGlzVmFsdWUoKSksIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5w
cm9wZXJ0eU5hbWUoKSk7CisgICAgcmV0dXJuIGdldHRlcihleGVjLCBleGVjLT50aGlzVmFsdWUo
KSwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24tPnByb3BlcnR5TmFtZSgpKTsKIH0KIAogSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBUeXBlIHR5cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICBKU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBUeXBlLCBj
b25zdCBQcm9wZXJ0eU5hbWUmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIEN1c3RvbUdldHRlclNldHRlciosIGNvbnN0IFN0cmluZyYpOwogCi0gICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb25DYWxsKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSopOwogCiAgICAgQ3VzdG9t
R2V0dGVyU2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRl
clNldHRlci5nZXQoKTsgfQogICAgIGJvb2wgaXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gVHlwZTo6U2V0dGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsMjUgKzYxLDI1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogQGVuZAogKi8KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY0dldEludDgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDE2KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRJbnQxNihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWlu
dDMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZlcihFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVMZW5n
dGgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9HZXR0ZXJCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRG
bG9hdDY0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jU2V0SW50OChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCdWZmZXIo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5
dGVMZW5ndGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0dldHRlckJ5dGVPZmZzZXQoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBA
IFN0cnVjdHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3QKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KLUVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEz
MCwxMyArMTMwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3IikpOwogICAg
IAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b0luZGV4KGV4
ZWMsICJieXRlT2Zmc2V0Iik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAK
ICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXpl
ID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+
IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKICAgICAgICAgbGl0dGxlRW5kaWFu
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
Ynl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgoKTsKQEAgLTE1OSwxMSArMTU5LDExIEBAIEVu
Y29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgdS5yYXdC
eXRlc1tpXSA9ICpkYXRhUHRyKys7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShBZGFwdG9yOjp0b0pTVmFsdWUodS52YWx1ZSkpOworICAgIHJldHVybiBBZGFwdG9yOjp0b0pT
VmFsdWUodS52YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci1FbmNvZGVk
SlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgc2V0RGF0YShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNzMsNyArMTczLDcgQEAgRW5jb2RlZEpTVmFs
dWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhv
ZCBtdXN0IGJlIGEgRGF0YVZpZXciKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW5kZXgoZXhlYywgImJ5dGVPZmZzZXQiKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgY29uc3QgdW5zaWduZWQgZGF0YVNpemUgPSBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgdW5pb24gewpAQCAtMTgyLDEzICsx
ODIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfSB1
OwogCiAgICAgdS52YWx1ZSA9IHRvTmF0aXZlRnJvbVZhbHVlPEFkYXB0b3I+KGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDEpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAg
IGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAm
JiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRl
TGVuZ3RoID0gZGF0YVZpZXctPmxlbmd0aCgpOwpAQCAtMjA1LDcgKzIwNSw3IEBAIEVuY29kZWRK
U1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgKmRhdGFQdHIrKyA9
IHUucmF3Qnl0ZXNbaV07CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2lmIENPTVBJTEVS
KENMQU5HKQpAQCAtMjEzLDcgKzIxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1w
cm90b3R5cGVzIgogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0dldHRlckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0dldHRlckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgIkRhdGFWaWV3LnByb3RvdHlwZS5idWZmZXIgZXhwZWN0cyB8dGhpc3wg
dG8gYmUgYSBEYXRhVmlldyBvYmplY3QiKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dmlldy0+cG9zc2libHlTaGFyZWRKU0J1ZmZlcihleGVjKSk7CisgICAgcmV0dXJuIHZpZXctPnBv
c3NpYmx5U2hhcmVkSlNCdWZmZXIoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIzNCwxMCArMjM0LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm8KICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1
ZmZlciBleHBlY3RzIHx0aGlzfCB0byBiZSBhIERhdGFWaWV3IG9iamVjdCIpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2aWV3LT5sZW5ndGgoKSkpOworICAgIHJldHVy
biBqc051bWJlcih2aWV3LT5sZW5ndGgoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0dldHRlckJ5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlT2Zmc2V0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI0Niw4NSArMjQ2LDg1IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm8KICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1
ZmZlciBleHBlY3RzIHx0aGlzfCB0byBiZSBhIERhdGFWaWV3IG9iamVjdCIpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2aWV3LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICBy
ZXR1cm4ganNOdW1iZXIodmlldy0+Ynl0ZU9mZnNldCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBnZXREYXRhPEludDE2QWRhcHRv
cj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdl
dERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gZ2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQx
NihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8VWludDE2QWRhcHRvcj4o
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gZ2V0
RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0
QWRhcHRvcj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVy
biBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50
MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4o
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldERh
dGE8VWludDhBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldERhdGE8VWludDMyQWRhcHRvcj4o
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBz
ZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endh
cmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpA
QCAtNDgsNyArNDgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjU1LDEyICsyNTUsMTIgQEAgc3RhdGlj
IEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHMoRXhlY1N0YQogICAgIHJldHVybiBmdW5jdG9yLnJl
c3VsdCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBKU0Z1bmN0aW9uKiB0aGlzT2Jq
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGhpc1ZhbHVlKTsKICAg
ICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKSk7CisgICAgcmV0dXJu
IHJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmopOwogfQogCiBjbGFzcyBSZXRyaWV2ZUNh
bGxlckZ1bmN0aW9uRnVuY3RvciB7CkBAIC0zMTAsMTIgKzMxMCwxMiBAQCBzdGF0aWMgSlNWYWx1
ZSByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKEV4CiAgICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBK
U0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNGdW5jdGlvbiogdGhpc09i
aiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IEpTRnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7CiAg
ICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBKU1ZhbHVlIGNhbGxl
ciA9IHJldHJpZXZlQ2FsbGVyRnVuY3Rpb24oZXhlYywgdGhpc09iaik7CiAKQEAgLTMyMywxMyAr
MzIzLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcigKICAgICBp
ZiAoIWNhbGxlci5pc09iamVjdCgpIHx8ICFhc09iamVjdChjYWxsZXIpLT5pbmhlcml0cyhKU0Z1
bmN0aW9uOjppbmZvKCkpKSB7CiAgICAgICAgIC8vIEl0IGlzbid0IGEgSlNGdW5jdGlvbiwgYnV0
IGlmIGl0IGlzIGEgSlNDYWxsZWUgZnJvbSBhIHByb2dyYW0gb3IgY2FsbCBldmFsLCByZXR1cm4g
bnVsbC4KICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNDYWxsZWUqPihjYWxsZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FsbGVyKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIGNhbGxlcjsKICAgICB9CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlcik7CiAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RP
ckJ1aWx0aW5GdW5jdGlvbigpIHx8ICFmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxlcik7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyIikpKTsK
KyAgICAgICAgcmV0dXJuIGNhbGxlcjsKKyAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3Ry
aWN0IGNhbGxlciIpKTsKIH0KIAogYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMDksIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LTIwMDksIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTUwLDcgKzUwLDcg
QEAgY2xhc3MgU2lnbmF0dXJlOwogfQogCiAKLUpTX0VYUE9SVF9QUklWQVRFIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRl
Kik7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5j
dGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CiAKIEpTX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoVk0mLCBKU09iamVjdCopOwogCkBAIC0xOTUsMTAg
KzE5NSw4IEBAIHByaXZhdGU6CiAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgY2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgY2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJh
c2U+IG1fZXhlY3V0YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25SYXJlRGF0YT4gbV9y
YXJlRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIGZyaWVuZCBzdHJ1Y3QgVHlwZWRBcnJheUNsYXNzSW5mb3M7CiAKLSAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgdGhyb3dOZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3IoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgdGhyb3dO
ZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMTIsMTAgKzIxMiw3IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0R2Vu
ZXJpY1R5cGVkQXIKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0
YXRlKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXco
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjIzLDcgKzIyMCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBT
dHJ1Y3R1cmUqIHBhcmVudFN0cnVjdHVyZSA9IGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKS0+dHlw
ZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgcGFyZW50U3RydWN0dXJlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2l6ZV90IGFyZ0NvdW50ID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOwogCkBAIC0yMzIsNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWly
ZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywg
c3RydWN0dXJlLCAwKSk7CisgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBz
dHJ1Y3R1cmUsIDApOwogICAgIH0KIAogICAgIEpTVmFsdWUgZmlyc3RWYWx1ZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQwLDcgKzIzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZW5n
dGggPSBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAgICAgICBvZmZzZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0luZGV4KGV4ZWMsICJieXRlT2Zmc2V0Iik7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+
IDIpIHsKICAgICAgICAgICAgIGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9
PSBUeXBlRGF0YVZpZXcpIHsKQEAgLTI0OCwxNyArMjQ1LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGJ5dGVMZW5n
dGhWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOwogICAgICAgICAgICAgICAgIGlm
ICghYnl0ZUxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID0gYnl0ZUxlbmd0aFZhbHVlLnRvSW5kZXgoZXhlYywgImJ5dGVMZW5ndGgiKTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0luZGV4KGV4ZWMsICJs
ZW5ndGgiKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0R2VuZXJpY1R5cGVk
QXJyYXlWaWV3V2l0aEFyZ3VtZW50czxWaWV3Q2xhc3M+KGV4ZWMsIHN0cnVjdHVyZSwgSlNWYWx1
ZTo6ZW5jb2RlKGZpcnN0VmFsdWUpLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBjb25z
dHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPFZpZXdDbGFzcz4oZXhlYywg
c3RydWN0dXJlLCBKU1ZhbHVlOjplbmNvZGUoZmlyc3RWYWx1ZSksIG9mZnNldCwgbGVuZ3RoKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgpAQCAtMjY5LDExICsyNjYsMTEgQEAg
Q29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbgogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsR2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVj
dG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBWaWV3Q2xh
c3M6OmluZm8oKS0+Y2xhc3NOYW1lKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5u
b3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFZpZXdDbGFzczo6aW5m
bygpLT5jbGFzc05hbWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQwLDExICszNDAsMTEgQEAgQXJyYXlCdWZmZXIq
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgotRW5jb2RlZEpTVmFsdWUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnRo
cm93TmV1dGVyZWRUeXBlZEFycmF5VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRlcmVkVHlwZWRBcnJheVR5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChvYmplY3QsIGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KEpT
VmFsdWU6OmRlY29kZShvYmplY3QpKS0+aXNOZXV0ZXJlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KG9iamVjdCwganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KS0+aXNOZXV0
ZXJlZCgpKTsKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRB
cnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsxMDAs
NyBAQCBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdW5zaWduZWQgb2Zmc2V0OwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBkb3VibGUgb2Zmc2V0TnVtYmVyID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnRlZ2VyKGV4ZWMpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKFVOTElLRUxZKG9mZnNldE51bWJl
ciA8IDApKQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGV4ZWMsIHNjb3Bl
LCAiT2Zmc2V0IHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKTsKICAgICAgICAgb2Zmc2V0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bWluKG9mZnNldE51bWJlciwgc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKSk7CkBAIC0xMzcsMTUg
KzEzNywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAg
fSBlbHNlCiAgICAgICAgIGxlbmd0aCA9IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKIAotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgdGhpc09iamVjdC0+c2V0KGV4
ZWMsIG9mZnNldCwgc291cmNlQXJyYXksIDAsIGxlbmd0aCwgQ29weVR5cGU6OlVub2JzZXJ2YWJs
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmND
b3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4oVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CkBAIC0xNTYsMTQgKzE1NiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAKICAgICBsb25nIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwogICAgIGxv
bmcgdG8gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0
aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBsb25nIGZyb20gPSBhcmd1
bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBsb25nIGZpbmFsID0gYXJndW1lbnRDbGFtcGVk
SW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBsZW5ndGgsIGxlbmd0aCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChmaW5hbCA8IGZyb20pCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4g
ZXhlYy0+dGhpc1ZhbHVlKCk7CiAKICAgICBsb25nIGNvdW50ID0gc3RkOjptaW4obGVuZ3RoIC0g
c3RkOjptYXgodG8sIGZyb20pLCBmaW5hbCAtIGZyb20pOwogCkBAIC0xNzMsMTEgKzE3MywxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdHlwZW5hbWUg
Vmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3Rvcigp
OwogICAgIG1lbW1vdmUoYXJyYXkgKyB0bywgYXJyYXkgKyBmcm9tLCBjb3VudCAqIHRoaXNPYmpl
Y3QtPmVsZW1lbnRTaXplKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhp
c1ZhbHVlKCkpOworICAgIHJldHVybiBleGVjLT50aGlzVmFsdWUoKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNs
dWRlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTE4OCwxMiArMTg4LDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
ZWN0LT5sZW5ndGgoKTsKIAogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGZh
bHNlKTsKIAogICAgIEpTVmFsdWUgdmFsdWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAog
ICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBp
ZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVz
c2FnZSk7CkBAIC0yMDEsNyArMjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZQogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0g
dGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsKICAgICBhdXRvIHRhcmdldE9wdGlvbiA9IFZpZXdD
bGFzczo6dG9BZGFwdG9yTmF0aXZlRnJvbVZhbHVlV2l0aG91dENvZXJjaW9uKHZhbHVlVG9GaW5k
KTsKICAgICBpZiAoIXRhcmdldE9wdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAK
ICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhp
c09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKQEAgLTIwOSwyMCArMjA5LDIwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNf
Y2FzdDxkb3VibGU+KCp0YXJnZXRPcHRpb24pKSkgewogICAgICAgICBmb3IgKDsgaW5kZXggPCBs
ZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0
PGRvdWJsZT4oYXJyYXlbaW5kZXhdKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4odHJ1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKDsgaW5kZXgg
PCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gPT0gdGFy
Z2V0T3B0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCkBAIC0yMzgsNyArMjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogCiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hl
ZEVycm9yTWVzc2FnZSk7CkBAIC0yNDYsMjAgKzI0NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlw
ZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwogICAgIGF1dG8gdGFyZ2V0T3B0
aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWVXaXRob3V0Q29lcmNpb24o
dmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFyZ2V0T3B0aW9uKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7
CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsr
aW5kZXgpIHsKICAgICAgICAgaWYgKGFycmF5W2luZGV4XSA9PSB0YXJnZXRPcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7CisgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
Sm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTI2OCwxOCArMjY4LDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3Nh
Z2UpOwogCiAgICAgLy8gMjIuMi4zLjE0Ci0gICAgYXV0byBqb2luV2l0aFNlcGFyYXRvciA9IFsm
XSAoU3RyaW5nVmlldyBzZXBhcmF0b3IpIC0+IEVuY29kZWRKU1ZhbHVlIHsKKyAgICBhdXRvIGpv
aW5XaXRoU2VwYXJhdG9yID0gWyZdIChTdHJpbmdWaWV3IHNlcGFyYXRvcikgLT4gSlNWYWx1ZSB7
CiAgICAgICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVj
LT50aGlzVmFsdWUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxl
bmd0aCgpOwogCiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9y
LCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBq
b2luZXIuYXBwZW5kKCpleGVjLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSkpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
b2luZXIuam9pbigqZXhlYykpOworICAgICAgICByZXR1cm4gam9pbmVyLmpvaW4oKmV4ZWMpOwog
ICAgIH07CiAKICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7
CkBAIC0yODksMTcgKzI4OSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgfQogCiAgICAgSlNTdHJpbmcqIHNlcGFyYXRvclN0cmluZyA9IHNlcGFyYXRv
clZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVy
cm9yTWVzc2FnZSk7CiAgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IHNlcGFyYXRvclN0cmluZy0+
dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIHJldHVybiBqb2luV2l0aFNlcGFyYXRvcih2aWV3V2l0aFN0cmluZy52aWV3
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTMyMiwyMCAr
MzIyLDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAg
ICAgaWYgKGZyb21Eb3VibGUgPCAwKSB7CiAgICAgICAgICAgICBmcm9tRG91YmxlICs9IGxlbmd0
aDsKICAgICAgICAgICAgIGlmIChmcm9tRG91YmxlIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKC0xKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJvbURvdWJsZSA8IGxlbmd0
aCkKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUp
OwogICAgIH0KIAotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAodGhp
c09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7
CiAKICAgICBhdXRvIHRhcmdldE9wdGlvbiA9IFZpZXdDbGFzczo6dG9BZGFwdG9yTmF0aXZlRnJv
bVZhbHVlV2l0aG91dENvZXJjaW9uKHZhbHVlVG9GaW5kKTsKICAgICBpZiAoIXRhcmdldE9wdGlv
bikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOworICAgICAg
ICByZXR1cm4ganNOdW1iZXIoLTEpOwogCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50
VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwogICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwpAQCAtMzQzLDUwICszNDMsNTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgp
IHsKICAgICAgICAgaWYgKGFycmF5W2luZGV4XSA9PSB0YXJnZXRPcHRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoaW5kZXgpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoLTEpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcihWTSYsIEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRl
ckZ1bmNCdWZmZXIoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjMKICAg
ICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5wb3NzaWJs
eVNoYXJlZEpTQnVmZmVyKGV4ZWMpKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cG9zc2libHlT
aGFyZWRKU0J1ZmZlcihleGVjKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dl
dHRlckZ1bmNMZW5ndGgoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKFZNJiwgRXhlY1N0
YXRlKiBleGVjKQogewogICAgIC8vIDIyLjIuMy4xNwogICAgIFZpZXdDbGFzcyogdGhpc09iamVj
dCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgcmV0
dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKFZNJiwgRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVu
Y0J5dGVMZW5ndGgoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjIKICAg
ICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0
LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxl
bmd0aCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRl
T2Zmc2V0KFZNJiwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQoVk0mLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgLy8gMjIuMi4zLjMKICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1JldmVyc2Uo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAvLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM5OSwxMSArMzk5
LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB0eXBl
bmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9IHRoaXNPYmplY3QtPnR5cGVkVmVj
dG9yKCk7CiAgICAgc3RkOjpyZXZlcnNlKGFycmF5LCBhcnJheSArIHRoaXNPYmplY3QtPmxlbmd0
aCgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdCk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3Q7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNT
b3J0KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykK
IHsKIC8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNDE1LDExICs0MTUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgdGhpc09iamVjdC0+c29ydCgpOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVj
dDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTbGljZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTQzMyw5ICs0MzMsOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdW5zaWduZWQgdGhpc0xl
bmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwogCiAgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1
bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIHRoaXNMZW5ndGgpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3Ro
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAtNDUz
LDcgKzQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBl
ZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICAg
ICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUs
IGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5pc05l
dXRlcmVkKCkpCkBAIC00NjEsNyArNDYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZQogCiAgICAgLy8gV2UgcmV0dXJuIGVhcmx5IGhlcmUgc2luY2Ugd2UgZG9u
J3QgYWxsb2NhdGUgYSBiYWNraW5nIHN0b3JlIGlmIGxlbmd0aCBpcyAwIGFuZCBtZW1tb3ZlIGRv
ZXMgbm90IGxpa2UgbnVsbHB0cnMKICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLy8g
VGhlIHNwZWNpZXMgY29uc3RydWN0b3IgbWF5IHJldHVybiBhbiBhcnJheSB3aXRoIGFueSBhcmJp
dHJhcnkgbGVuZ3RoLgogICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgcmVzdWx0LT5sZW5n
dGgoKSk7CkBAIC00NjksNDYgKzQ2OSw0NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlCiAgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhp
c09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIGNhc2UgVHlwZUludDE2OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpz
Q2FzdDxKU0ludDE2QXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVn
aW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlw
ZUludDMyOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU0ludDMy
QXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwg
Q29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlwZVVpbnQ4OgogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihyZXN1
bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6Okxl
ZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KHJl
c3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6
TGVmdFRvUmlnaHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2FzZSBUeXBlVWludDE2OgogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU1VpbnQxNkFycmF5Kj4ocmVzdWx0KS0+c2V0
KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdo
dCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAganNDYXN0PEpTVWludDMyQXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwg
dGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAg
ICAganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmpl
Y3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBj
YXNlIFR5cGVGbG9hdDY0OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2Fz
dDxKU0Zsb2F0NjRBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdp
biwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShWTSZ2bSwgRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
aXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTU1MiwxMCArNTUyLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3Ry
dWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKIAogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpj
cmVhdGUoCisgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNyZWF0ZSgKICAgICAgICAgICAgIGV4
ZWMsIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5ieXRl
T2Zmc2V0KCkgKyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplLAotICAgICAgICAgICAg
bGVuZ3RoKSk7CisgICAgICAgICAgICBsZW5ndGgpOwogICAgIH0KIAogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkBAIC01NjQsMTMgKzU2NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3Ms
ICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVz
dWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogCiAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgic3BlY2llcyBjb25zdHJ1Y3RvciBkaWQgbm90IHJldHVybiBhIFR5cGVkQXJyYXkgVmll
dyIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJu
IHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDks
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSwgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJs
b28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMTYsNyArMjE2LDcgQEAgc3RhdGljIEpTVmFs
dWUgY3JlYXRlQXRvbWljc1Byb3BlcnR5KFZNJgogICAgIHJldHVybiBBdG9taWNzT2JqZWN0Ojpj
cmVhdGUodm0sIGdsb2JhbCwgQXRvbWljc09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWwsIGdsb2JhbC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFrZUJvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMjI3LDE1ICsyMjcs
MTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZQogICAgIEpTVmFs
dWUgbGVuZ3RoID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMyk7CiAgICAgSlNTdHJpbmcqIG5h
bWUgPSBhc1N0cmluZyhleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICB2bSwgZXhl
YywgZ2xvYmFsT2JqZWN0LCB0YXJnZXQsIGJvdW5kVGhpcywgYm91bmRBcmdzLmlzQ2VsbCgpID8g
anNDYXN0PEpTQXJyYXkqPihib3VuZEFyZ3MpIDogbnVsbHB0ciwgbGVuZ3RoLmFzSW50MzIoKSwg
bmFtZS0+dmFsdWUoZXhlYykpKTsKKyAgICByZXR1cm4gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
CisgICAgICAgIHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldCwgYm91bmRUaGlzLCBib3Vu
ZEFyZ3MuaXNDZWxsKCkgPyBqc0Nhc3Q8SlNBcnJheSo+KGJvdW5kQXJncykgOiBudWxscHRyLCBs
ZW5ndGguYXNJbnQzMigpLCBuYW1lLT52YWx1ZShleGVjKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc093bkxlbmd0aFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzT3duTGVuZ3RoUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNPYmplY3Qq
IHRhcmdldCA9IGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0YXJnZXQtPmhhc093blByb3BlcnR5KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRhcmdl
dC0+aGFzT3duUHJvcGVydHkoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpAQCAtMjk5LDE1ICsyOTksMTUgQEAgY29uc3QgR2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUgSlNHbG9iYWxPYgogQGVuZAogKi8KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBB
U1NFUlQodGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6aW5mbygpKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVlKSkpOworICAgIHJldHVybiBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVj
LCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVlKSk7CiB9CiAKIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdWV1ZUpvYihFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXVldWVKb2IoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTMxOCw3ICszMTgs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlbnF1CiAKICAgICBnbG9i
YWxPYmplY3QtPnF1ZXVlTWljcm90YXNrKGNyZWF0ZUpTSm9iKHZtLCBqb2IsIGpzQ2FzdDxKU0Fy
cmF5Kj4oYXJndW1lbnRzKSkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogSlNHbG9iYWxPYmplY3Q6
OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMiwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIw
MTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTY1MSw0NCArNjUxLDQ0
IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChTdHJpbmdWaWV3IHMpCiAgICAgcmV0dXJuIGpz
U3RyRGVjaW1hbExpdGVyYWwoZGF0YSwgZW5kKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNWYWx1ZSB4ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF4LmlzU3RyaW5nKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoeCk7CisgICAgICAgIHJldHVybiB4Owog
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkgewogICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHMgPSBhc1N0cmluZyh4KS0+dmFsdWUoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChzLmlzOEJpdCgpKSB7CiAg
ICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IHByZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnM4
KCksIHMubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOwogICAgICAgICBpZiAoSlNWYWx1ZSBwYXJz
ZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHBhcnNlZE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VkT2JqZWN0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IHBy
ZXBhcnNlcihleGVjLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBOb25TdHJpY3RKU09O
KTsKICAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2VyLnRyeUxpdGVy
YWxQYXJzZSgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwYXJzZWRPYmpl
Y3QpOyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgIH0KIAog
ICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW4gPSBleGVjLT5jYWxsZXJTb3VyY2VPcmlnaW4o
KTsKICAgICBKU0dsb2JhbE9iamVjdCogY2FsbGVlR2xvYmFsT2JqZWN0ID0gZXhlYy0+anNDYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBJbmRpcmVj
dEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgbWFrZVNvdXJjZShzLCBzb3VyY2VPcmlnaW4p
LCBmYWxzZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBl
OjpOb25lKTsKICAgICBpZiAoIWV2YWwpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWwsIGV4
ZWMsIGNhbGxlZUdsb2JhbE9iamVjdC0+Z2xvYmFsVGhpcygpLCBjYWxsZWVHbG9iYWxPYmplY3Qt
Pmdsb2JhbFNjb3BlKCkpKTsKKyAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0
ZShldmFsLCBleGVjLCBjYWxsZWVHbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwgY2FsbGVlR2xv
YmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUgcmFkaXhWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDEpOwpAQCAtNzA3LDM3ICs3MDcsMzcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAg
ICAgIGRvdWJsZSBuID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKCgobiA8IGludE1h
eFBsdXNPbmUgJiYgbiA+PSB0ZW5Ub1RoZU1pbnVzNikgfHwgIW4pICYmIHJhZGl4VmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obikpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihuKSk7CiAgICAgfQogCiAgICAgLy8gSWYgVG9TdHJp
bmcgdGhyb3dzLCB3ZSBzaG91bGRuJ3QgY2FsbCBUb0ludDMyLgogICAgIHJldHVybiB0b1N0cmlu
Z1ZpZXcoZXhlYywgdmFsdWUsIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VJbnQodmlldywgcmFkaXhWYWx1ZS50b0lu
dDMyKGV4ZWMpKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocGFyc2VJbnQodmlldywgcmFk
aXhWYWx1ZS50b0ludDMyKGV4ZWMpKSk7CiAgICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihwYXJzZUZsb2F0KHZpZXdXaXRoU3RyaW5nLnZpZXcpKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKHBhcnNlRmxvYXQodmlld1dpdGhTdHJpbmcudmlldykpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIHN0YXRpYyBCaXRtYXA8MjU2PiBkb05vdFVuZXNjYXBlV2hlbkRl
Y29kaW5nVVJJID0gbWFrZUNoYXJhY3RlckJpdG1hcCgKICAgICAgICAgIiMkJissLzo7PT9AIgog
ICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlY29kZShleGVjLCBkb05vdFVu
ZXNjYXBlV2hlbkRlY29kaW5nVVJJLCB0cnVlKSk7CisgICAgcmV0dXJuIGRlY29kZShleGVjLCBk
b05vdFVuZXNjYXBlV2hlbkRlY29kaW5nVVJJLCB0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzdGF0aWMgQml0bWFwPDI1Nj4gZW1wdHlCaXRtYXA7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWNvZGUoZXhlYywgZW1wdHlCaXRtYXAsIHRydWUp
KTsKKyAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIGVtcHR5Qml0bWFwLCB0cnVlKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBzdGF0aWMgQml0bWFwPDI1Nj4gZG9Ob3RFc2NhcGVXaGVuRW5jb2Rp
bmdVUkkgPSBtYWtlQ2hhcmFjdGVyQml0bWFwKAogICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFS
U1RVVldYWVoiCkBAIC03NDYsMTAgKzc0NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgICIhIyQmJygpKissLS4vOjs9P0BffiIKICAgICApOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlbmNvZGUoZXhlYywgZG9Ob3RFc2NhcGVXaGVu
RW5jb2RpbmdVUkkpKTsKKyAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGRvTm90RXNjYXBlV2hlbkVu
Y29kaW5nVVJJKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
RW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBz
dGF0aWMgQml0bWFwPDI1Nj4gZG9Ob3RFc2NhcGVXaGVuRW5jb2RpbmdVUklDb21wb25lbnQgPSBt
YWtlQ2hhcmFjdGVyQml0bWFwKAogICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoi
CkBAIC03NTgsMTAgKzc1OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNFCiAgICAgICAgICIhJygpKi0uX34iCiAgICAgKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZW5jb2RlKGV4ZWMsIGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJQ29tcG9uZW50
KSk7CisgICAgcmV0dXJuIGVuY29kZShleGVjLCBkb05vdEVzY2FwZVdoZW5FbmNvZGluZ1VSSUNv
bXBvbmVudCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Vz
Y2FwZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Vz
Y2FwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3RhdGljIEJpdG1hcDwyNTY+IGRvTm90RXNj
YXBlID0gbWFrZUNoYXJhY3RlckJpdG1hcCgKICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNU
VVZXWFlaIgpAQCAtNzcwLDcgKzc3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY0UKICAgICAgICAgIiorLS4vQF8iCiAgICAgKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0
cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CiAgICAgICAgIEpTU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwogICAgICAgICBpZiAodmlldy5pczhCaXQoKSkgewogICAgICAgICAgICAgY29u
c3QgTENoYXIqIGMgPSB2aWV3LmNoYXJhY3RlcnM4KCk7CkBAIC04MDQsMTIgKzgwNCwxMiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAgIH0KIAogICAg
ICAgICByZXR1cm4gYnVpbGRlci5idWlsZChleGVjKTsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9TdHJpbmdWaWV3KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVy
biB0b1N0cmluZ1ZpZXcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIFsmXSAoU3RyaW5nVmlldyB2
aWV3KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgaW50IGsgPSAw
OwogICAgICAgICBpbnQgbGVuID0gdmlldy5sZW5ndGgoKTsKQEAgLTg1NiwyNCArODU2LDI0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1UKICAgICAgICAgfQogCiAg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0p
KTsKKyAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
VGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogfQogICAgIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHND
YWxsZWVBbmRDYWxsZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFuZENhbGxlcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsICInYXJndW1lbnRzJywgJ2NhbGxlZScsIGFuZCAnY2FsbGVyJyBjYW5ub3QgYmUgYWNj
ZXNzZWQgaW4gdGhpcyBjb250ZXh0LiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNQcm90b0dldHRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTg4NiwxNCArODg2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1AKICAgICBpZiAoIXRoaXNPYmplY3QpIHsKICAgICAgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
cm90b3R5cGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIHByb3Rv
dHlwZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdl
dFByb3RvdHlwZSh2bSwgZXhlYykpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRQcm90b3R5
cGUodm0sIGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNQcm90b1NldHRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY1Byb3RvU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkw
OCwyMSArOTA4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AK
IAogICAgIC8vIFNldHRpbmcgX19wcm90b19fIG9mIGEgcHJpbWl0aXZlIHNob3VsZCBoYXZlIG5v
IGVmZmVjdC4KICAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgLy8gU2V0dGluZyBfX3Byb3RvX18gdG8gYSBub24tb2JqZWN0LCBub24tbnVsbCB2YWx1ZSBp
cyBzaWxlbnRseSBpZ25vcmVkIHRvIG1hdGNoIE1vemlsbGEuCiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpICYmICF2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBi
b29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gdHJ1ZTsKICAgICB0aGlzT2JqZWN0LT5zZXRQcm90
b3R5cGUodm0sIGV4ZWMsIHZhbHVlLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0J1aWx0
aW5Mb2coRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNC
dWlsdGluTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkYXRhTG9nKGV4ZWMtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKGV4ZWMpLCAiXG4iKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDEwLCAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2Fy
aWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtz
IE9ybG92aWNoCiAgKgpAQCAtMzYsMjAgKzM2LDIwIEBAIGNsYXNzIEpTT2JqZWN0OwogLy8gRklY
TUU6IFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgcmVhbGx5IGJlIGluIEpTR2xvYmFsT2JqZWN0LmNw
cCwgYnV0IHB1dHRpbmcgdGhlbSB0aGVyZQogLy8gaXMgYSAwLjUlIHJlZHVjdGlvbi4KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVS
SShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Rl
Y29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3Io
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJv
d1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFuZENhbGxlcihFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvR2V0dGVyKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNCdWlsdGluTG9n
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29t
cG9uZW50KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2Nh
cGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBl
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVF
cnJvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dU
eXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvR2V0dGVyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQcm90b1NldHRlcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jQnVpbHRpbkxvZyhFeGVjU3RhdGUqKTsKIAogc3RhdGlj
IGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5
OTIuMDsKIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVu
Z3RoLCBpbnQgcmFkaXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MiwxMyArNjIsMTMgQEAgSlNJ
bnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvcjo6SlNJbnRlcm5hbAogewogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0UHJvbWlzZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmpz
Q2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
SlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBKU0ludGVybmFsUHJvbWlzZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QtPmludGVybmFsUHJvbWlzZVN0cnVjdHVyZSgpKTsKICAgICBwcm9taXNl
LT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZSk7CisgICAgcmV0dXJuIHByb21pc2U7CiB9
CiAKIENvbnN0cnVjdFR5cGUgSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3ltYm9sSXRlcmF0b3IoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZU5hbWVzcGFjZU9iamVj
dFN5bWJvbEl0ZXJhdG9yKEV4ZWNTdGF0ZSopOwogCiBjb25zdCBDbGFzc0luZm8gSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3Q6OnNfaW5mbyA9IHsgIk1vZHVsZU5hbWVzcGFjZU9iamVjdCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QpIH07CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0OjpkZWZpbmVPd25QCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1vZHVsZU5hbWVzcGFjZU9iamVjdFN5bWJvbEl0ZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVOYW1lc3BhY2VPYmplY3RTeW1i
b2xJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMTYsNyArMjE2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVOYW1lcwogICAgIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ8dGhp
c3wgc2hvdWxkIGJlIGEgbW9kdWxlIG5hbWVzcGFjZSBvYmplY3QiKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZSgpLCBv
YmplY3QpKTsKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1
cmUoKSwgb2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRp
dmVTdGRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
SlNOYXRpdmVTdGRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24KICAgICBtX2Z1bmN0aW9uQ2VsbC5z
ZXQodm0sIHRoaXMsIGZ1bmN0aW9uQ2VsbCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJ1blN0ZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJ1blN0ZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNOYXRpdmVTdGRGdW5j
dGlvbio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rp
b24uaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBOYXRpdmVTdGRGdW5jdGlv
bkNlbGw7CiAKLXR5cGVkZWYgc3RkOjpmdW5jdGlvbjxFbmNvZGVkSlNWYWx1ZSAoRXhlY1N0YXRl
Kik+IE5hdGl2ZVN0ZEZ1bmN0aW9uOwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPEpTVmFsdWUgKEV4
ZWNTdGF0ZSopPiBOYXRpdmVTdGRGdW5jdGlvbjsKIAogY2xhc3MgSlNOYXRpdmVTdGRGdW5jdGlv
biA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Niw4ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNPTk9iamVjdCk7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSopOwog
CiB9CiAKQEAgLTc3Nyw3ICs3NzcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6Ondh
bGsoSlNWYWx1CiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEyLjIKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtODA5LDE5ICs4MDksMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU09OUHJvdG9GdQogICAgIH0KICAgICAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh1bmZpbHRlcmVkKTsKKyAgICAg
ICAgcmV0dXJuIHVuZmlsdGVyZWQ7CiAgICAgCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodW5maWx0ZXJlZCk7CisgICAgICAgIHJldHVybiB1bmZpbHRlcmVkOwogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdhbGtlcihleGVjLCBMb2NhbDxK
U09iamVjdD4odm0sIGFzT2JqZWN0KGZ1bmN0aW9uKSksIGNhbGxUeXBlLCBjYWxsRGF0YSkud2Fs
ayh1bmZpbHRlcmVkKSk7CisgICAgcmV0dXJuIFdhbGtlcihleGVjLCBMb2NhbDxKU09iamVjdD4o
dm0sIGFzT2JqZWN0KGZ1bmN0aW9uKSksIGNhbGxUeXBlLCBjYWxsRGF0YSkud2Fsayh1bmZpbHRl
cmVkKTsKIH0KIAogLy8gRUNNQS0yNjIgdjUgMTUuMTIuMwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTgzNiw3ICs4MzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTT05Qcm90b0Z1CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBzdHJpbmdpZmllci5zdHJp
bmdpZnkodmFsdWUpLmdldCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlIEpTT05QYXJzZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYganNvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEyLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAy
MDA4LTIwMDksIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTIwNTksMTIgKzIwNTksMTIgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKEV4ZWNTdAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJpdmF0ZUZ1bmNJbnN0YW5jZU9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBwcm90byA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oSlNPYmplY3Q6OmRl
ZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJvdG8pKSk7CisgICAgcmV0dXJuIGpzQm9v
bGVhbihKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90bykpOwog
fQogCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExMzAsNyArMTEzMCw3IEBA
IHByaXZhdGU6CiAgICAgfQogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcml2YXRlRnVuY0luc3RhbmNlT2YoRXhlY1N0YXRlKik7CitK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJpdmF0ZUZ1bmNJ
bnN0YW5jZU9mKEV4ZWNTdGF0ZSopOwogCiBpbmxpbmUgSlNPYmplY3QqIEpTT2JqZWN0OjpjcmVh
dGVSYXdPYmplY3QoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIEpTUHJvbWlz
ZUNvbnN0cnVjdG9yOjphZGRPd25JbnRlcm5hCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnJlamVjdFBy
aXZhdGVOYW1lKCksIHByb21pc2VDb25zdHJ1Y3RvclJlamVjdENvZGVHZW5lcmF0b3IsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtMTAzLDE4ICsxMDMsMTggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAKICAgICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUodm0s
IHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHByb21pc2UpOworICAgIHJldHVybiBwcm9taXNlOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsUHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RC
ZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm9taXNlIikpOworICAg
IHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCAiUHJvbWlzZSIpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTUHJvbWlzZUNv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3BlcnR5TmFtZUl0ZXJhdG9yRnVu
Y05leHQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3BlcnR5
TmFtZUl0ZXJhdG9yRnVuY05leHQoRXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yOjpzX2luZm8gPSB7ICJQcm9wZXJ0eU5hbWUgSXRlcmF0b3IiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IpIH07CiAKQEAgLTEzOCwxOSArMTM4LDE5IEBAIGJvb2wgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6bmV4dChFeGVjU3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3Bl
cnR5TmFtZUl0ZXJhdG9yIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvcGVydHlOYW1lSXRlcmF0b3JGdW5jTmV4
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvcGVydHlOYW1lSXRl
cmF0b3JGdW5jTmV4dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFByb3BlcnR5TmFtZUl0ZXJhdG9yLm5leHQoKSBvbiBh
IG5vbi1Qcm9wZXJ0eU5hbWVJdGVyYXRvciBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgUHJvcGVy
dHlOYW1lSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLVByb3BlcnR5TmFtZUl0ZXJhdG9yIG9iamVj
dCIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChleGVj
LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9y
UmVzdWx0T2JqZWN0KGV4ZWMsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIHRy
dWUpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGV4ZWMsIHJl
c3VsdCwgZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChleGVj
LCBqc1VuZGVmaW5lZCgpLCB0cnVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Myw3ICs2Myw3IEBAIFN0cnVjdHVyZSogSlNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yOjoKIAogCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdFR5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0VHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTMgKzY1LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoZmFs
c2UpCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRl
RnVuY0lzVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNJc1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odmFsdWUuaXNDZWxsKCkgJiYg
aXNUeXBlZFZpZXcodmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFn
ZVR5cGUpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiBpc1R5cGVk
Vmlldyh2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0
ZUZ1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVk
QXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtODQsMTggKzg0LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRB
cnJheVYKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmRlcmx5aW5nIEFy
cmF5QnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIGZyb20gdGhlIHZpZXciKSk7CiAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jR2V0T3JpZ2luYWxDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJh
eVZpZXdQcml2YXRlRnVuY0dldE9yaWdpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CiAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLmdldE9iamVjdCgpLT5jbGFzc0luZm8oKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlOwog
ICAgIEFTU0VSVChpc1R5cGVkVmlldyh0eXBlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKSk7CisgICAgcmV0dXJu
IGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheUNvbnN0cnVjdG9yKHR5cGUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVG
dW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDQsNyArMTA0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5VgogICAgIENBTExfR0VO
RVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQ
cml2YXRlRnVuY1NvcnQpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJP
VE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldCk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jQ29weVdpdGhpbihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9G
VU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKTsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1
bmNJbmNsdWRlcyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHR5cGUKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJ
T04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJ
bmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlw
ZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElP
TihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5k
ZXhPZihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVk
QXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
dHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNKb2luKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE3MCw3ICsxNzAs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9H
RU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvRnVuY0pvaW4pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5j
QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE4MSw3ICsxODEsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5F
UklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvR2V0dGVyRnVuY0J1ZmZlcik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRl
ckZ1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxM
X0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQ
cm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTIwMyw3ICsyMDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0
eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVu
Y0J5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMjE0LDcgKzIxNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZ
UEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9mZnNl
dCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQ
RV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNlKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3Vi
YXJyYXlDcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVk
QXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0yMzYsNyArMjM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5VgogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5D
VElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMjQ3LDM1ICsyNDcsMzUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElP
TihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZSk7CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jVG9T
dHJpbmdUYWcoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0
eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5nVGFnKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICgh
dGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBzd2l0Y2ggKHRoaXNWYWx1ZS5nZXRPYmplY3QoKS0+Y2xhc3NJ
bmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewogICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50OENs
YW1wZWRBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgIlVpbnQ4Q2xhbXBl
ZEFycmF5Iik7CiAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoJnZtLCAiSW50MzJBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKCZ2bSwgIkludDMyQXJyYXkiKTsKICAgICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDMyQXJyYXkiKSk7CisgICAg
ICAgIHJldHVybiBqc1N0cmluZygmdm0sICJVaW50MzJBcnJheSIpOwogICAgIGNhc2UgVHlwZUZs
b2F0NjQ6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxv
YXQ2NEFycmF5IikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCAiRmxvYXQ2NEFycmF5
Iik7CiAgICAgY2FzZSBUeXBlRmxvYXQzMjoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N0cmluZygmdm0sICJGbG9hdDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmlu
Zygmdm0sICJGbG9hdDMyQXJyYXkiKTsKICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkludDhBcnJheSIpKTsKKyAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkludDhBcnJheSIpOwogICAgIGNhc2UgVHlwZVVpbnQ4Ogot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIlVpbnQ4QXJyYXki
KSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJVaW50OEFycmF5Iik7CiAgICAgY2Fz
ZSBUeXBlSW50MTY6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZt
LCAiSW50MTZBcnJheSIpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkludDE2QXJy
YXkiKTsKICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoJnZtLCAiVWludDE2QXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmlu
Zygmdm0sICJVaW50MTZBcnJheSIpOwogICAgIGNhc2UgTm90VHlwZWRBcnJheToKICAgICBjYXNl
IFR5cGVEYXRhVmlldzoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDEwICs0NSwxMCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNJc1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29y
dChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZp
ZXdQcml2YXRlRnVuY0xlbmd0aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY0dldE9yaWdpbmFsQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJp
dmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jSXNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5j
TGVuZ3RoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3
UHJpdmF0ZUZ1bmNHZXRPcmlnaW5hbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShFeGVj
U3RhdGUqKTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDM0ICs0NywzNCBAQCB2b2lkIE1hcENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+c3BlY2llc1N5bWJvbCwgc3BlY2llc1N5bWJvbCwgQWNjZXNz
b3IgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbE1hcChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxNYXAoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5j
dGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIk1hcCIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25z
dHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIk1h
cCIpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RN
YXAoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RNYXAoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCB2bSwgbWFwU3RydWN0
dXJlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTVmFsdWUgaXRlcmFi
bGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXApOworICAgICAgICByZXR1
cm4gbWFwOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwg
YWRkZXJGdW5jdGlvbkNhbGxEYXRhKTsKICAgICBpZiAoYWRkZXJGdW5jdGlvbkNhbGxUeXBlID09
IENhbGxUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgZm9yRWFjaEluSXRlcmFibGUo
ZXhlYywgaXRlcmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0
SXRlbSkgewpAQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgICAgIGNhbGwoZXhlYywgYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlv
bkNhbGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEsIG1hcCwgYXJndW1lbnRzKTsKICAgICB9
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWFwKTsKKyAgICByZXR1cm4gbWFwOwog
fQogCiBDb25zdHJ1Y3RUeXBlIE1hcENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRv
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gTWFwSXRlcmF0b3JQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIk1hcCBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoTWFwSXRlcmF0b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05l
eHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgTWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKQEAgLTQ2LDIyICs0
NiwyMiBAQCB2b2lkIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvCiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFn
U3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXAgSXRlcmF0b3IiKSwgRG9udEVudW0gfCBSZWFkT25s
eSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5
cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBN
YXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nh
c3Q8SlNNYXBJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghaXRl
cmF0b3IpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBNYXBJdGVyYXRvci5uZXh0
KCkgb24gYSBub24tTWFwSXRlcmF0b3Igb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFw
SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJhdG9yIG9iamVjdCIpKTsKIAogICAgIEpT
VmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkp
IHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkp
OworICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBy
ZXN1bHQsIGZhbHNlKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1Vu
ZGVmaW5lZCgpLCB0cnVlKSk7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSk7CiB9CiAKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDE2ICs0NywxNiBAQCBjb25zdCBDbGFzc0luZm8g
TWFwUHJvdG90eXBlOjpzX2luZm8gPSB7CiBAZW5kCiAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dldChF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0hhcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0tleXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNFbnRyaWVzKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVs
ZXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNHZXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0hhcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJv
dG9GdW5jU2V0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bmNLZXlzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0VudHJpZXMoRXhlY1N0YXRlKik7CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7CiAgICAg
CiB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewpAQCAtOTksOTggKzk5LDk4IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEpTTWFwKiBnZXRNYXAoQ2FsbEYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKG1hcC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihtYXAtPnJl
bW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICByZXR1cm4gbWFwLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNI
YXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBq
c0Jvb2xlYW4obWFwLT5oYXMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIG1hcC0+c2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOworICAgIHJldHVybiB0aGlz
VmFsdWU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2l6
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1hcC0+c2l6ZShjYWxsRnJhbWUpKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc051bWJlcihtYXAtPnNpemUoY2FsbEZy
YW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jVmFs
dWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJh
bWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNNYXAqIHRoaXNPYmogPSBqc0R5bmFtaWNDYXN0PEpTTWFwKj4oY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90
IGNyZWF0ZSBhIE1hcCB2YWx1ZSBpdGVyYXRvciBmb3IgYSBub24tTWFwIG9iamVjdC4iKSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxs
RnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgp
LCB0aGlzT2JqLCBJdGVyYXRlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIE1hcCB2YWx1
ZSBpdGVyYXRvciBmb3IgYSBub24tTWFwIG9iamVjdC4iKSk7CisgICAgcmV0dXJuIEpTTWFwSXRl
cmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+
bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZVZhbHVlKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNFbnRyaWVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0VudHJpZXMoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTTWFwKiB0aGlz
T2JqID0ganNEeW5hbWljQ2FzdDxKU01hcCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAg
IGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAg
ZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLU1hcCBvYmplY3QuIikpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRl
cmF0ZUtleVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAgZW50cnkgaXRlcmF0b3Ig
Zm9yIGEgbm9uLU1hcCBvYmplY3QuIikpOworICAgIHJldHVybiBKU01hcEl0ZXJhdG9yOjpjcmVh
dGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9y
U3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXlWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jS2V5cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNLZXlzKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU01hcCogdGhpc09iaiA9IGpzRHluYW1p
Y0Nhc3Q8SlNNYXAqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXRoaXNPYmop
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIGEgTWFwIGtleSBpdGVyYXRvciBm
b3IgYSBub24tTWFwIG9iamVjdC4iKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNN
YXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVj
dCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5KSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IkNhbm5vdCBjcmVhdGUgYSBNYXAga2V5IGl0ZXJhdG9yIGZvciBhIG5vbi1NYXAgb2JqZWN0LiIp
KTsKKyAgICByZXR1cm4gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJ
dGVyYXRlS2V5KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVu
Y01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5h
bWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CiAgICAgSlNNYXAq
IG1hcCA9IGpzQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwg
bWFwLCBJdGVyYXRlS2V5VmFsdWUpKTsKKyAgICByZXR1cm4gSlNNYXBJdGVyYXRvcjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRv
clN0cnVjdHVyZSgpLCBtYXAsIEl0ZXJhdGVLZXlWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIwMCwxMiArMjAwLDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBpZiAoaXRlcmF0b3ItPm5leHRL
ZXlWYWx1ZShleGVjLCBrZXksIHZhbHVlKSkgewogICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJh
eSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAg
ICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwga2V5KTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDEsIHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4
dChFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMywzOCArMzMsMzggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShNYXRo
T2JqZWN0KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNv
cyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0FDb3NoKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jQVNpbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0FTaW5oKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0FUYW5oKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDYnJ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zaChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cChFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cG0x
KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
RnJvdW5kKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jSHlwb3QoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNMb2cxcChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0xvZzEwKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2lnbihFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbihF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1Np
bmgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNTcXJ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jVGFuKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jVGFuaChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0FDb3NoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNBU2luKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNBU2luaChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
QVRhbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRh
bmgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4y
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDYnJ0KEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDbHozMihFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3NoKEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cG0xKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGcm91bmQoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0h5cG90KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzFwKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxMChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jTG9nMihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jUmFuZG9tKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNSb3VuZChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
U2lnbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2lu
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW5oKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbmgoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRlKik7CiAK
IGNvbnN0IENsYXNzSW5mbyBNYXRoT2JqZWN0OjpzX2luZm8gPSB7ICJNYXRoIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXRoT2JqZWN0KSB9OwogCkBAIC0xMjcsNjMg
KzEyNyw2MyBAQCB2b2lkIE1hdGhPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGZhYnMoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKGZhYnMoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3MoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1i
ZXIoYWNvcyhleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4g
anNEb3VibGVOdW1iZXIoYWNvcyhleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJl
cihhc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBq
c0RvdWJsZU51bWJlcihhc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVy
KGF0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpz
RG91YmxlTnVtYmVyKGF0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgZG91YmxlIGFyZzAgPSBleGVjLT5hcmd1bWVudCgwKS50b051
bWJlcihleGVjKTsKICAgICBkb3VibGUgYXJnMSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVy
KGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoYXRhbjIo
YXJnMCwgYXJnMSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYXRhbjIoYXJnMCwgYXJn
MSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWls
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2Vp
bChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihjZWlsKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBq
c051bWJlcihjZWlsKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2x6MzIoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVlID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGNsejMy
KHZhbHVlKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0
dXJuIEpTVmFsdWUoY2x6MzIodmFsdWUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGNvcyhleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoY29zKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0RvdWJsZU51bWJlcihleHAoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhl
YykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4cChleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGZsb29yKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkp
OworICAgIHJldHVybiBqc051bWJlcihmbG9vcihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihl
eGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNI
eXBvdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0h5cG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5Myw5ICsxOTMsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAgICAgYXJncy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGFyZ3NDb3VudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3NDb3VudDsgKytpKSB7CiAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChzdGQ6OmlzaW5mKGFyZ3NbaV0pKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcigrc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSk7CisgICAgICAgICAgICByZXR1cm4g
anNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7
CiAgICAgICAgIG1heCA9IHN0ZDo6bWF4KGZhYnMoYXJnc1tpXSksIG1heCk7CiAgICAgfQogICAg
IGlmICghbWF4KQpAQCAtMjEwLDE1ICsyMTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdQogICAgICAgICBjb21wZW5zYXRpb24gPSAocHJlbGltaW5hcnkgLSBz
dW0pIC0gc3VtbWFuZDsKICAgICAgICAgc3VtID0gcHJlbGltaW5hcnk7CiAgICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoc3FydChzdW0pICogbWF4KSk7Cisg
ICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHNxcnQoc3VtKSAqIG1heCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihsb2coZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxv
ZyhleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUg
cmVzdWx0ID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTIy
OSwxMCArMjI5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUK
ICAgICAgICAgfSBlbHNlIGlmICh2YWwgPiByZXN1bHQgfHwgKCF2YWwgJiYgIXJlc3VsdCAmJiAh
c3RkOjpzaWduYml0KHZhbCkpKQogICAgICAgICAgICAgcmVzdWx0ID0gdmFsOwogICAgIH0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdCkpOworICAgIHJldHVybiBq
c051bWJlcihyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gK3N0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKQEAgLTI0MywxMzEgKzI0MywxMzEgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogICAgICAgICB9IGVsc2UgaWYg
KHZhbCA8IHJlc3VsdCB8fCAoIXZhbCAmJiAhcmVzdWx0ICYmIHN0ZDo6c2lnbmJpdCh2YWwpKSkK
ICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihyZXN1bHQpKTsKKyAgICByZXR1cm4ganNOdW1iZXIocmVzdWx0KTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICAvLyBFQ01BIDE1LjguMi4xLjEzCiAKICAgICBkb3VibGUgYXJnID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91YmxlIGFyZzIgPSBleGVj
LT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShvcGVyYXRpb25NYXRoUG93KGFyZywgYXJnMikpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZShvcGVyYXRpb25NYXRoUG93KGFyZywgYXJnMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT53ZWFrUmFuZG9tTnVtYmVyKCkpKTsKKyAgICByZXR1cm4ganNEb3VibGVO
dW1iZXIoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53ZWFrUmFuZG9tTnVtYmVyKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGpz
Um91bmQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGpzUm91bmQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2lnbihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihl
eGVjKTsKICAgICBpZiAoc3RkOjppc25hbihhcmcpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKICAgICBpZiAoIWFyZykK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdGQ6OnNpZ25iaXQoYXJnKSA/IGpzTnVt
YmVyKC0wLjApIDoganNOdW1iZXIoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoc3RkOjpzaWduYml0KGFyZykgPyAtMSA6IDEpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
c2lnbmJpdChhcmcpID8ganNOdW1iZXIoLTAuMCkgOiBqc051bWJlcigwKTsKKyAgICByZXR1cm4g
anNOdW1iZXIoc3RkOjpzaWduYml0KGFyZykgPyAtMSA6IDEpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoc2luKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihzaW4oZXhl
Yy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoc3FydChleGVjLT5hcmd1bWVudCgw
KS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoc3FydChleGVj
LT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIodGFuKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih0YW4oZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jSU11bChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGludDMyX3QgbGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgaW50
MzJfdCByaWdodCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihsZWZ0ICogcmlnaHQpKTsKKyAgICByZXR1cm4ganNO
dW1iZXIobGVmdCAqIHJpZ2h0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXRoUHJvdG9GdW5jQUNvc2goRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNBQ29zaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhY29zaChleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYWNvc2goZXhlYy0+YXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jQVNpbmgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNBU2luaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhc2luaChleGVjLT5hcmd1bWVudCgwKS50b051
bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYXNpbmgoZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVRhbmgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhdGFuaChleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYXRhbmgoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2JydChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0NicnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoY2JydChleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoY2JydChleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNDb3NoKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihjb3NoKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihjb3NoKGV4ZWMtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0V4cG0xKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jRXhwbTEoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoZXhwbTEoZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4cG0xKGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zyb3VuZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zyb3VuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihzdGF0aWNfY2FzdDxmbG9hdD4o
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91Ymxl
TnVtYmVyKHN0YXRpY19jYXN0PGZsb2F0PihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cx
cChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xv
ZzFwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3VibGUgdmFsdWUgPSBleGVjLT5hcmd1bWVu
dCgwKS50b051bWJlcihleGVjKTsKICAgICBpZiAodmFsdWUgPT0gMCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcih2YWx1ZSkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIobG9nMXAodmFsdWUpKSk7CisgICAgICAgIHJldHVy
biBqc0RvdWJsZU51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxvZzFw
KHZhbHVlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0xvZzEwKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jTG9nMTAoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNEb3VibGVOdW1iZXIobG9nMTAoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7
CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxvZzEwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0xvZzIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNMb2cyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzRG91YmxlTnVtYmVyKGxvZzIoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7
CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGxvZzIoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1i
ZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jU2luaChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY1NpbmgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNEb3VibGVOdW1iZXIoc2luaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsK
KyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoc2luaChleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNUYW5oKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jVGFuaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0RvdWJsZU51bWJlcih0YW5oKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOwor
ICAgIHJldHVybiBqc0RvdWJsZU51bWJlcih0YW5oKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y1RydW5jKEV4ZWNTdGF0ZSpleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNUcnVuYyhFeGVjU3RhdGUqZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlclByZXNlcnZlTmFO
KGV4ZWMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksOCArNDksOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0
Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNG
bG9vcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY1RydW5jKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNBYnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zs
b29yKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUcnVu
YyhFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZUxvYWRlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxMyArNDUsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVk
TW9kdWxlcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlclByb3RvdHlwZUV2YWx1YXRlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFy
YXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUZl
dGNoKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVS
ZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25J
bnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVGZXRjaChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlh
dGUoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMTAwLDE2ICsxMDAsMTYgQEAgTW9kdWxlTG9hZGVy
UHJvdG90eXBlOjpNb2R1bGVMb2FkZXJQcm90bwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1
bGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclBy
b3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0
eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3RyaW5n
IHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtl
U291cmNlKHNvdXJjZSwgU291cmNlT3JpZ2luIHsgbW9kdWxlS2V5LmltcGwoKSB9LCBtb2R1bGVL
ZXkuaW1wbCgpLCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1
bGUpOwogCkBAIC0xMjIsNTcgKzEyMiw1NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlCiAKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIHRocm93
Vk1FcnJvcihleGVjLCBzY29wZSwgZXJyb3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNvdXJjZUNvZGUpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
ICAgIEFTU0VSVChtb2R1bGVQcm9ncmFtTm9kZSk7CiAKICAgICBNb2R1bGVBbmFseXplciBtb2R1
bGVBbmFseXplcihleGVjLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dyYW1Ob2Rl
LT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJsZXMo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU01vZHVsZVJlY29yZCog
bW9kdWxlUmVjb3JkID0gbW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZSgqbW9kdWxlUHJvZ3JhbU5vZGUp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGVSZWNvcmQpOworICAgIHJldHVy
biBtb2R1bGVSZWNvcmQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxl
TG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJl
Y29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihleGVjLT5hcmd1bWVudCgwKSk7
CiAgICAgaWYgKCFtb2R1bGVSZWNvcmQpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVs
bHB0cikpOworICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRy
KTsKICAgICB9CiAKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIG51bGxwdHIsIG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpLnNpemUoKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9y
IChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKSkgewogICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGkrKywganNTdHJpbmcoZXhlYywga2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1
bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNNb2R1bGVSZWNvcmQq
IG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihleGVjLT5hcmd1
bWVudCgwKSk7CiAgICAgaWYgKCFtb2R1bGVSZWNvcmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKICAgICAgICAgZGF0
YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsK
IAogICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEhvb2sgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlw
ZVJlc29sdmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5y
ZXNvbHZlLgogICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXIt
cmVzb2x2ZQpAQCAtMTgwLDExICsxODAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtb2R1bGVMb2FkZQogICAgIC8vIEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQg
cmV0dXJuIHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KICAgICBKU01vZHVsZUxvYWRlciogbG9h
ZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsK
ICAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIp
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBsb2FkZXItPnJl
c29sdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5h
cmd1bWVudCgyKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9h
ZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlclByb3RvdHlwZUZldGNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBI
b29rIHBvaW50LCBMb2FkZXIuZmV0Y2gKICAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8v
bG9hZGVyLyNicm93c2VyLWZldGNoCkBAIC0xOTMsMTEgKzE5MywxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgLy8gZnJvbSB0aGUgbG9jYWwgZmlsZSBz
eXN0ZW0uCiAgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1
bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShsb2FkZXItPmZldGNoKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5h
cmd1bWVudCgxKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4g
bG9hZGVyLT5mZXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlw
ZUluc3RhbnRpYXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8g
SG9vayBwb2ludCwgTG9hZGVyLmluc3RhbnRpYXRlCiAgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0
aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0YW50aWF0ZQpAQCAtMjA3LDIxICsyMDcsMjEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgIC8vIHRoZSBvcmRp
bmFyeSBvbmUuCiAgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNN
b2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShsb2FkZXItPmluc3RhbnRpYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGxvYWRlci0+aW5zdGFudGlhdGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCBIb29rIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIC8vIFRvIGluc3RydW1lbnQgYW5kIHJldHJpZXZlIHRoZSBlcnJvcnMgcmFpc2Vk
IGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24sCiAgICAgLy8gd2UgaW5zZXJ0ZWQgdGhlIGhvb2sg
cG9pbnQgaGVyZS4KIAogICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbG9hZGVyKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5ldmFsdWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBsb2FkZXItPmV2YWx1YXRlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTYxLDE2ICs2MSwxNiBAQCB2
b2lkIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9lcnJvclN0cnVjdHVyZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IqPihleGVjLT5qc0NhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBBU1NFUlQoZXJyb3JTdHJ1Y3R1cmUpOwog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVj
LCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsK
IH0KIAogQ29uc3RydWN0VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RE
YXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC03OSwxMSArNzks
MTEgQEAgQ29uc3RydWN0VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZQogICAgIHJldHVy
biBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogfQogICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyOjpjYWxsTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IHN0YXRpY19j
YXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5qc0NhbGxlZSgpKS0+ZXJyb3JTdHJ1
Y3R1cmUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZh
bHNlKSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVj
dHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKTsKIH0KIAogQ2FsbFR5
cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
IGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbEdldHRl
ckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdWxsR2V0dGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdWxsR2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gTnVsbEdl
dHRlckZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoTnVsbEdldHRlckZ1bmN0aW9uKSB9OwogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmV0dXJuVW5kZWZpbmVkKEV4ZWNTdGF0ZSopCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZXR1cm5VbmRlZmluZWQoRXhlY1N0YXRl
KikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBDYWxsVHlwZSBOdWxsR2V0dGVyRnVuY3Rpb246Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbFNldHRlckZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbFNldHRl
ckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDE0ICs3MCwxNCBAQCBzdGF0aWMg
Ym9vbCBjYWxsZXJJc1N0cmljdChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGl0ZXIuY2FsbGVy
SXNTdHJpY3QoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFJldHVyblVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxSZXR1cm5VbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgaWYgKGNhbGxlcklzU3RyaWN0KGV4ZWMpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNldHRp
bmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIikpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU2V0dGluZyBhIHByb3BlcnR5IHRoYXQgaGFz
IG9ubHkgYSBnZXR0ZXIiKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIENhbGxU
eXBlIE51bGxTZXR0ZXJGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNh
bGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwyMDAzIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEx
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNy0yMDA4LCAyMDExLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29u
c3RydWN0b3JGdW5jSXNJbnRlZ2VyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNTYWZlSW50ZWdlcihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5j
SXNJbnRlZ2VyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJDb25zdHJ1Y3RvckZ1bmNJc1NhZmVJbnRlZ2VyKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApAQCAtODMsMTggKzgzLDE4IEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKFYKIH0KIAogLy8gRUNNQSAxNS43LjEKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgZG91YmxlIG4g
PSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b051
bWJlcihleGVjKSA6IDA7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CiAgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBqc051bWJl
cihuKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QpOworICAgIHJldHVybiBv
YmplY3Q7CiB9CiAKIENvbnN0cnVjdFR5cGUgTnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTEwNCw5ICsx
MDQsOSBAQCBDb25zdHJ1Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDb25zCiB9CiAKIC8v
IEVDTUEgMTUuNy4yCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVt
YmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IDAgOiBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBq
c051bWJlcighZXhlYy0+YXJndW1lbnRDb3VudCgpID8gMCA6IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgTnVtYmVyQ29uc3RydWN0b3I6
OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTExNiw3ICsxMTYs
NyBAQCBDYWxsVHlwZSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoCiB9CiAKIC8vIEVD
TUEtMjYyIDIwLjEuMi4zCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJDb25zdHJ1Y3RvckZ1bmNJc0ludGVnZXIoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJc0ludGVnZXIoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBib29sIGlzSW50ZWdlcjsKQEAgLTEyOCwxMSArMTI4LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWIKICAgICAgICAgZG91YmxlIG51bWJlciA9IGFyZ3VtZW50
LmFzRG91YmxlKCk7CiAgICAgICAgIGlzSW50ZWdlciA9IHN0ZDo6aXNmaW5pdGUobnVtYmVyKSAm
JiB0cnVuYyhudW1iZXIpID09IG51bWJlcjsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oaXNJbnRlZ2VyKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpc0ludGVn
ZXIpOwogfQogCiAvLyBFQ01BLTI2MiAyMC4xLjIuNQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNTYWZlSW50ZWdlcihFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlckNvbnN0cnVjdG9yRnVu
Y0lzU2FmZUludGVnZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgYXJndW1lbnQg
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzSW50ZWdlcjsKQEAgLTE0NCw3ICsxNDQs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iCiAgICAgICAgIGRv
dWJsZSBudW1iZXIgPSBhcmd1bWVudC5hc0RvdWJsZSgpOwogICAgICAgICBpc0ludGVnZXIgPSB0
cnVuYyhudW1iZXIpID09IG51bWJlciAmJiBzdGQ6OmFicyhudW1iZXIpIDw9IDkwMDcxOTkyNTQ3
NDA5OTEuMDsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNJ
bnRlZ2VyKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpc0ludGVnZXIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDgsIDIwMTEsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtNDIsMTEgKzQyLDExIEBAIHR5cGVkZWYgV1RGOjpkb3VibGVfY29udmVy
c2lvbjo6U3RyaW5nQnUKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJl
Y2lzaW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVu
Y1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nV2l0aFJhZGl4KGludDMyX3QgCiAvLyBUaGlzIG1ldGhvZCB0YWtl
cyBhbiBvcHRpb25hbCBhcmd1bWVudCBzcGVjaWZ5aW5nIGEgbnVtYmVyIG9mICpkZWNpbWFsIHBs
YWNlcyoKIC8vIHRvIHJvdW5kIHRoZSBzaWduaWZpY2FuZCB0byAob3IsIHB1dCBhbm90aGVyIHdh
eSwgdGhpcyBtZXRob2Qgb3B0aW9uYWxseSByb3VuZHMKIC8vIHRvIGFyZ3VtZW50LXBsdXMtb25l
IHNpZ25pZmljYW50IGZpZ3VyZXMpLgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTM3OSw3ICszNzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG51bWJlclByb3RvCiAKICAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KICAgICBp
ZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgp
KSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1i
ZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpOwogCiAgICAgLy8gUm91bmQgaWYgdGhlIGFyZ3VtZW50
IGlzIG5vdCB1bmRlZmluZWQsIGFsd2F5cyBmb3JtYXQgYXMgZXhwb25lbnRpYWwuCiAgICAgY2hh
ciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CkBAIC0zODksMTQgKzM4
OSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgaXNV
bmRlZmluZWQKICAgICAgICAgPyBjb252ZXJ0ZXIuVG9FeHBvbmVudGlhbCh4LCAtMSwgJmJ1aWxk
ZXIpCiAgICAgICAgIDogY29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgZGVjaW1hbFBsYWNlc0lu
RXhwb25lbnQsICZidWlsZGVyKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIFN0cmluZyhidWlsZGVyLkZpbmFsaXplKCkpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZyhidWlsZGVyLkZpbmFsaXplKCkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252
ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNp
bWFsIGZyYWN0aW9uLgogLy8gVGhpcyBtZXRob2QgdGFrZXMgYW4gYXJndW1lbnQgc3BlY2lmeWlu
ZyBhIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUKIC8vIHNpZ25pZmljYW5k
IHRvLiBIb3dldmVyIHdoZW4gY29udmVydGluZyBsYXJnZSB2YWx1ZXMgKDFlKzIxIGFuZCBhYm92
ZSkgdGhpcwogLy8gbWV0aG9kIHdpbGwgaW5zdGVhZCBmYWxsYmFjayB0byBjYWxsaW5nIFRvU3Ry
aW5nLiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhl
ZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5j
VG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00MTUsMTQgKzQxNSwx
NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgLy8gVGhp
cyBhbHNvIGNvdmVycyBJbmluaXR5LCBhbmQgc3RydWN0dXJlIHRoZSBjaGVjayBzbyB0aGF0IE5h
TgogICAgIC8vIHZhbHVlcyBhcmUgYWxzbyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nCiAgICAg
aWYgKCEoZmFicyh4KSA8IDFlKzIxKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh4KSkpOworICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQoeCkpOwogCiAgICAgLy8gVGhlIGNoZWNrIGFib3ZlIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBO
YU4gb3IgSW5maW5pdHksIHRoZXNlIHdpbGwgYmUKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRv
U3RyaW5nLgogICAgIEFTU0VSVChzdGQ6OmlzZmluaXRlKHgpKTsKIAogICAgIE51bWJlclRvU3Ry
aW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4
ZWMsIFN0cmluZyhudW1iZXJUb0ZpeGVkV2lkdGhTdHJpbmcoeCwgZGVjaW1hbFBsYWNlcywgYnVm
ZmVyKSkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nKG51bWJlclRvRml4ZWRX
aWR0aFN0cmluZyh4LCBkZWNpbWFsUGxhY2VzLCBidWZmZXIpKSk7CiB9CiAKIC8vIHRvUHJlY2lz
aW9uIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCB0YWtlaW5nIGFuIGFyZ3VtZW50IHNw
ZWNpZnlpbmcgYQpAQCAtNDMyLDcgKzQzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbnVtYmVyUHJvdG8KIC8vIGRlY2ltYWwsIHdoaWxzdCAxMDAwIGlzIGNvbnZlcnRlZCB0byB0
aGUgZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24gMS4wMGUrMy4KIC8vIEZvciBuZWdhdGl2ZSBl
eHBvbmVudHMgdmFsdWVzID49IDFlLTYgYXJlIGZvcm1hdGVkIGFzIGRlY2ltYWwgZnJhY3Rpb25z
LAogLy8gd2l0aCBzbWFsbGVyIHZhbHVlcyBjb252ZXJ0ZWQgdG8gZXhwb25lbnRpYWwgcmVwcmVz
ZW50YXRpb24uCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
UHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQ
cm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00
NDksMTQgKzQ0OSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
CiAKICAgICAvLyBUbyBwcmVjaXNpb24gY2FsbGVkIHdpdGggbm8gYXJndW1lbnQgaXMgdHJlYXRl
ZCBhcyBUb1N0cmluZy4KICAgICBpZiAoaXNVbmRlZmluZWQpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQoeCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9T
dHJpbmdFQ01BU2NyaXB0KHgpKTsKIAogICAgIC8vIEhhbmRsZSBOYU4gYW5kIEluZmluaXR5Lgog
ICAgIGlmICghc3RkOjppc2Zpbml0ZSh4KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQoeCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh4KSk7CiAKICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZl
ciBidWZmZXI7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJp
bmcobnVtYmVyVG9GaXhlZFByZWNpc2lvblN0cmluZyh4LCBzaWduaWZpY2FudEZpZ3VyZXMsIGJ1
ZmZlcikpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhudW1iZXJUb0ZpeGVk
UHJlY2lzaW9uU3RyaW5nKHgsIHNpZ25pZmljYW50RmlndXJlcywgYnVmZmVyKSkpOwogfQogCiBz
dGF0aWMgaW5saW5lIGludDMyX3QgZXh0cmFjdFJhZGl4RnJvbUFyZ3MoRXhlY1N0YXRlKiBleGVj
KQpAQCAtNDczLDI2ICs0NzMsMjYgQEAgc3RhdGljIGlubGluZSBpbnQzMl90IGV4dHJhY3RSYWRp
eEZyb21BcgogICAgIHJldHVybiByYWRpeDsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBpbnRlZ2VyVmFsdWVUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgcmFkaXgs
IGludDMyX3QgdmFsdWUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgaW50ZWdlclZhbHVlVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IHJhZGl4LCBpbnQzMl90IHZhbHVlKQogewogICAg
IC8vIEEgbmVnYXRpdmUgdmFsdWUgY2FzdGVkIHRvIHVuc2lnbmVkIHdvdWxkIGJlIGJpZ2dlciB0
aGFuIDM2ICh0aGUgbWF4IHJhZGl4KS4KICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
bHVlKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYWRpeCkpIHsKICAgICAgICAgQVNTRVJUKHZh
bHVlIDw9IDM2KTsKICAgICAgICAgQVNTRVJUKHZhbHVlID49IDApOwogICAgICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhyYWRpeERpZ2l0c1t2YWx1ZV0pKTsKKyAgICAg
ICAgcmV0dXJuIHZtLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHJhZGl4RGln
aXRzW3ZhbHVlXSk7CiAgICAgfQogCiAgICAgaWYgKHJhZGl4ID09IDEwKSB7CiAgICAgICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKHZtLCB2bS0+bnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSkpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcodm0sIHZtLT5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUpKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nV2l0aFJhZGl4
KHZhbHVlLCByYWRpeCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdG9TdHJpbmdXaXRo
UmFkaXgodmFsdWUsIHJhZGl4KSk7CiAKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtNTEwLDE2ICs1MTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBudW1iZXJQcm90bwogICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVlVG9TdHJpbmcoZXhlYywg
cmFkaXgsIGludGVnZXJWYWx1ZSk7CiAKICAgICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQo
ZG91YmxlVmFsdWUpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHZtLm51bWVyaWNT
dHJpbmdzLmFkZChkb3VibGVWYWx1ZSkpOwogCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGRvdWJs
ZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoZG91YmxlVmFsdWUpKSk7
CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJU
b1N0cmluZ0VDTUFTY3JpcHQoZG91YmxlVmFsdWUpKTsKIAogICAgIFJhZGl4QnVmZmVyIHM7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZ1dpdGhSYWRp
eChzLCBkb3VibGVWYWx1ZSwgcmFkaXgpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRv
U3RyaW5nV2l0aFJhZGl4KHMsIGRvdWJsZVZhbHVlLCByYWRpeCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01MjgsMTAgKzUyOCwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgaWYgKCF0b1Ro
aXNOdW1iZXIoZXhlYy0+dGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHgpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoeCkudG9TdHJpbmco
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJv
dG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01NDAsNyAr
NTQwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0b1RoaXNOdW1i
ZXIodGhpc1ZhbHVlLCB4KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIFdURjo6bWFrZVN0cmluZygidGhpc051bWJlclZhbHVlIGNhbGxlZCBvbiBpbmNvbXBh
dGlibGUgIiwgYXNTdHJpbmcoanNUeXBlU3RyaW5nRm9yVmFsdWUoZXhlYywgdGhpc1ZhbHVlKSkt
PnZhbHVlKGV4ZWMpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih4KSk7
CisgICAgcmV0dXJuIGpzTnVtYmVyKHgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCShy
ZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01MCw2ICs1MCw2IEBAIHByaXZhdGU6CiAg
ICAgTnVtYmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CiB9OwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0zOSwxOSArMzksMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JT
ZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNlYWwoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRF
eHRlbnNpb25zKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvcklzU2VhbGVkKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJcyhF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFBy
b3RvdHlwZU9mKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yU2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0
aWVzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9y
Q3JlYXRlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yU2VhbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvckZyZWV6ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dHJ1Y3RvclByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzKEV4ZWNTdGF0ZSopOwog
CiB9CiAKQEAgLTEzNyw5ICsxMzcsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCog
Y29uc3RydWN0CiAgICAgcmV0dXJuIGFyZy50b09iamVjdChleGVjLCBnbG9iYWxPYmplY3QpOwog
fQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoT2Jq
ZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0T2JqZWN0KGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdE9iamVjdChleGVjLCBleGVjLT5uZXdU
YXJnZXQoKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTE0OCw5
ICsxNDgsOSBAQCBDb25zdHJ1Y3RUeXBlIE9iamVjdENvbnN0cnVjdG9yOjpnZXRDb25zCiAgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RPYmplY3QoZXhl
YywgSlNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdE9iamVjdChleGVjLCBKU1ZhbHVl
KCkpOwogfQogCiBDYWxsVHlwZSBPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxs
KiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtMTU5LDE3ICsxNTksMTcgQEAgQ2FsbFR5cGUgT2Jq
ZWN0Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFBy
b3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYykp
OworICAgIHJldHVybiBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JT
ZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xODMsMTIg
KzE4MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlBy
b3RvdHlwZSB2YWx1ZSBjYW4gb25seSBiZSBhbiBvYmplY3Qgb3IgbnVsbCIpKTsKIAogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBvYmplY3RWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRy
dWU7CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwg
ZXhlYywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIEFTU0VSVF9VTlVT
RUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOworICAgIHJldHVybiBv
YmplY3RWYWx1ZTsKIH0KIAogSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTI0MSw2OSArMjQxLDY5IEBAIEpTVmFsdWUgb2JqZWN0
Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCku
dG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5
TmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVj
LT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsK
KyAgICByZXR1cm4gb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGV4
ZWMsIG9iamVjdCk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhlIGVudW1lcmF0aW9uIGNhY2hlLgot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3Bl
cnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVj
dCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKIH0K
IAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93
blByb3BlcnR5U3ltYm9scyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlO
YW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAg
IHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
eW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKIH0KIAogLy8gRklYTUU6
IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNs
dWRlKSk7CisgICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9w
ZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7Cisg
ICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3NBbmRTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIH0K
IAogLy8gRVM2IDYuMi40LjUgVG9Qcm9wZXJ0eURlc2NyaXB0b3IKQEAgLTQwMyw3ICs0MDMsNyBA
QCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JE
ZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC00MTIsMTcgKzQxMiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIp
KTsKICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwogICAgIGF1dG8gc3VjY2VzcyA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlwdG9yKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwogICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgQWNjZXNzb3IpIHx8ICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iaiwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOworICAgIHJldHVybiBvYmo7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvcGVydGllcykKQEAgLTQ2NSw3ICs0NjUsNyBAQCBz
dGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG9iamVj
dDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRl
ZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC00NzYsMTIgKzQ3NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIHByb3BzID0gZXhlYy0+YXJndW1lbnQoMSkudG9P
YmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXByb3BzKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXByb3BzKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVl
KCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZGVmaW5lUHJvcGVydGllcyhleGVjLCB0YXJnZXRPYmosIHByb3Bz
KSk7CisgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoZXhlYywgdGFyZ2V0T2JqLCBwcm9wcyk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVh
dGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTQ5MywxMSArNDkz
LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAg
PyBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBhc09iamVjdChwcm90bykpCiAgICAgICAgIDog
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5u
dWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ld09iamVj
dCk7CisgICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgx
KS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJQcm9wZXJ0eSBkZXNjcmlwdG9yIGxpc3QgbXVzdCBiZSBhbiBPYmpl
Y3QuIikpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGRlZmluZVByb3BlcnRpZXMoZXhlYywgbmV3T2JqZWN0LCBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgxKSkpKTsKKyAgICByZXR1cm4gZGVmaW5lUHJvcGVydGllcyhleGVjLCBuZXdPYmplY3QsIGFz
T2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAKIGVudW0gY2xhc3MgSW50ZWdyaXR5TGV2
ZWwgewpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRl
KiBleGVjLCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNlYWwoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtNTU1LDIyICs1NTUsMjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0
dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9i
ai5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CisgICAg
ICAgIHJldHVybiBvYmo7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAK
ICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICAgb2JqZWN0LT5zZWFs
KHZtKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOworICAgICAgICByZXR1
cm4gb2JqOwogICAgIH0KIAogICAgIGJvb2wgc3VjY2VzcyA9IHNldEludGVncml0eUxldmVsPElu
dGVncml0eUxldmVsOjpTZWFsZWQ+KGV4ZWMsIHZtLCBvYmplY3QpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gcHJldmVu
dCBleHRlbnNpb24gaW4gT2JqZWN0LnNlYWwiKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqKTsKKyAgICByZXR1cm4gb2JqOwogfQogCiBKU09iamVjdCogb2JqZWN0Q29u
c3RydWN0b3JGcmVlemUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQpAQCAtNTkw
LDMxICs1OTAsMzEgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiBPLgogICAgIEpT
VmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOworICAgICAgICByZXR1cm4gb2Jq
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBh
c09iamVjdChvYmopKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lv
bnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yUHJldmVudEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhcmd1bWVudCk7CisgICAgICAgIHJldHVybiBhcmd1bWVudDsKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYXJndW1lbnQpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5w
cmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0KTsKKyAgICByZXR1cm4gb2JqZWN0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjIyLDE2ICs2MjIsMTYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9i
amVjdCwgcmV0dXJuIHRydWUuCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoIW9iai5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2Jq
ZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9i
amVjdC0+aXNTZWFsZWQodm0pKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4ob2JqZWN0LT5p
c1NlYWxlZCh2bSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5h
bWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAgLTY0Mywx
NyArNjQzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxl
XV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFsc2UuCiAgICAgICAgIGlmIChkZXNjLmNvbmZpZ3Vy
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIH0KIAogICAg
IC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIGlzIGZh
bHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAgIC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNl
LgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbighaXNFeHRl
bnNpYmxlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTY2MSwxNiArNjYxLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3QKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAg
IEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworICAg
ICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKHZtKSkpOwor
ICAgICAgICByZXR1cm4ganNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKTsKIAogICAgIC8v
IDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRT
eW1ib2xzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02ODMsMzIgKzY4MywzMiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIC8vIGIuIElmIElzRGF0YURl
c2NyaXB0b3IoZGVzYykgaXMgdHJ1ZSB0aGVuCiAgICAgICAgIC8vIGkuIElmIGRlc2MuW1tXcml0
YWJsZV1dIGlzIHRydWUsIHJldHVybiBmYWxzZS4gYy4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1d
IGlzIHRydWUsIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgICAgICBpZiAoKGRlc2MuaXNEYXRhRGVz
Y3JpcHRvcigpICYmIGRlc2Mud3JpdGFibGUoKSkgfHwgZGVzYy5jb25maWd1cmFibGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKICAgICB9CiAKICAgICAvLyAzLiBJZiB0
aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxzZSwgdGhlbiBy
ZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KICAgICBib29s
IGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0V4dGVu
c2libGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9ySXNFeHRlbnNpYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChvYmopOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUo
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxlKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4ganNCb29sZWFu
KGlzRXh0ZW5zaWJsZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oc2FtZVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVj
LT5hcmd1bWVudCgxKSkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHNhbWVWYWx1ZShleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KIAogLy8gRklYTUU6IFVz
ZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJv
bHMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yS2V5cyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb3du
RW51bWVyYWJsZVByb3BlcnR5S2V5cyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVz
Y3JpcHRvcnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMoRXhlY1N0YXRlKik7CiAKIGNsYXNzIE9i
amVjdFByb3RvdHlwZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMzMsMTUgKzMzLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5l
R2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
TG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdl
dHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJ
c0VudW1lcmFibGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiBTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoT2JqZWN0UHJvdG90eXBlKTsKIApAQCAtNzksNDUg
Kzc5LDQ1IEBAIE9iamVjdFByb3RvdHlwZSogT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAg
IEpTT2JqZWN0KiB2YWx1ZU9iaiA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAo
VU5MSUtFTFkoIXZhbHVlT2JqKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9iaik7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIHZhbHVlT2JqOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09i
amVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVj
dCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgSGFzT3duUHJvcGVydHlDYWNo
ZSogaGFzT3duUHJvcGVydHlDYWNoZSA9IHZtLmVuc3VyZUhhc093blByb3BlcnR5Q2FjaGUoKTsK
ICAgICBpZiAoc3RkOjpvcHRpb25hbDxib29sPiByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eUNhY2hl
LT5nZXQoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIEFTU0VSVCgqcmVzdWx0
ID09IHRoaXNPYmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogICAg
ICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oKnJlc3VsdCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKCpy
ZXN1bHQpOwogICAgIH0KIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgYm9vbCBy
ZXN1bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBoYXNPd25Qcm9wZXJ0
eUNhY2hlLT50cnlBZGQodm0sIHNsb3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgcmVzdWx0
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKKyAgICBy
ZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjYsMzEgKzEyNiwzMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFs
dWUudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRo
aXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCi0gICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFleGVjLT5hcmd1
bWVudCgwKS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIAogICAgIEpT
VmFsdWUgdiA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgaWYgKCF2LmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihmYWxzZSk7CiAgICAgICAgIGlmICh2ID09IHRoaXNPYmopCi0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAgICAgICByZXR1cm4ganNC
b29sZWFuKHRydWUpOwogICAgICAgICB2ID0gYXNPYmplY3QodiktPmdldFByb3RvdHlwZSh2bSwg
ZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgSlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
ICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXQpOwpAQCAtMTY5LDE2ICsxNjksMTYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE4Niw3ICsxODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICBkZXNjcmlwdG9yLnNldFNldHRlcihzZXQpOwpAQCAtMTk3
LDE5ICsxOTcsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRl
ZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4
ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGJvb2wg
aGFzUHJvcGVydHkgPSB0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKQEAgLTIxNywyOSArMjE3LDI5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAgICAgICAgaWYgKHNs
b3QuaXNBY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IHNsb3QuZ2V0dGVyU2V0dGVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0dGVyU2V0dGVy
LT5pc0dldHRlck51bGwoKSA/IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSA6IEpTVmFs
dWU6OmVuY29kZShnZXR0ZXJTZXR0ZXItPmdldHRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZXR0ZXJTZXR0ZXItPmlzR2V0dGVyTnVsbCgpID8ganNVbmRlZmluZWQoKSA6IGdldHRlclNldHRl
ci0+Z2V0dGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYg
Q3VzdG9tQWNjZXNzb3IpIHsKICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgICAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgICAgICAgICBp
ZiAoc2xvdC5zbG90QmFzZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkgPyBKU1ZhbHVlOjplbmNvZGUoZGVzY3JpcHRvci5nZXR0ZXIoKSkgOiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpID8gZGVzY3JpcHRvci5nZXR0ZXIoKSA6IGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAg
ICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwpAQCAtMjQ3LDc5ICsyNDcsNzkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmIChoYXNQcm9wZXJ0eSkgewogICAgICAg
ICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gc2xvdC5nZXR0ZXJTZXR0ZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXR0
ZXJTZXR0ZXItPmlzU2V0dGVyTnVsbCgpID8gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
IDogSlNWYWx1ZTo6ZW5jb2RlKGdldHRlclNldHRlci0+c2V0dGVyKCkpOworICAgICAgICAgICAg
cmV0dXJuIGdldHRlclNldHRlci0+aXNTZXR0ZXJOdWxsKCkgPyBqc1VuZGVmaW5lZCgpIDogZ2V0
dGVyU2V0dGVyLT5zZXR0ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc2xvdC5hdHRyaWJ1
dGVzKCkgJiBDdXN0b21BY2Nlc3NvcikgewogICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpKTsKICAgICAg
ICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBkZXNj
cmlwdG9yLnNldHRlclByZXNlbnQoKSA/IEpTVmFsdWU6OmVuY29kZShkZXNjcmlwdG9yLnNldHRl
cigpKSA6IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgPyBkZXNjcmlwdG9yLnNldHRlcigpIDog
anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1l
cmFibGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSku
dG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29sIGVudW1lcmFibGUgPSB0aGlzT2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihlbnVtZXJhYmxlKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihlbnVtZXJh
YmxlKTsKIH0KIAogLy8gMTUuMi40LjMgT2JqZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygp
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAv
LyAxLiBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QgcGFzc2luZyB0aGUg
dGhpcyB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMi4gTGV0IHRvU3RyaW5nIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyBw
YXNzaW5nICJ0b1N0cmluZyIgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTVmFsdWUgdG9TdHJpbmcg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUodG9TdHJp
bmcpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0b1N0cmluZywg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICAvLyA0LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgdG9TdHJpbmcgcGFzc2luZyBPIGFzIHRoZSB0
aGlzIHZhbHVlIGFuZCBubyBhcmd1bWVudHMuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCB0b1N0cmluZywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBvYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywg
dG9TdHJpbmcsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwog
ICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUuaXNVbmRlZmluZWQoKSA/IHZtLnNtYWxsU3RyaW5ncy51
bmRlZmluZWRPYmplY3RTdHJpbmcoKSA6IHZtLnNtYWxsU3RyaW5ncy5udWxsT2JqZWN0U3RyaW5n
KCkpOworICAgICAgICByZXR1cm4gdGhpc1ZhbHVlLmlzVW5kZWZpbmVkKCkgPyB2bS5zbWFsbFN0
cmluZ3MudW5kZWZpbmVkT2JqZWN0U3RyaW5nKCkgOiB2bS5zbWFsbFN0cmluZ3MubnVsbE9iamVj
dFN0cmluZygpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqZWN0KTsK
ICAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYXV0byBy
ZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vYmplY3RUb1N0cmluZ1ZhbHVlKCk7
CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgUHJvcGVydHlOYW1lIHRvU3RyaW5nVGFn
U3ltYm9sID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2w7CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3Bl
cnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKKyAgICByZXR1cm4gdGhpc09i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wg
Zm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5n
VGFnU2xvdC5nZXRWYWx1ZShleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgYXV0byByZXN1bHQg
PSBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBuZXdTdHJpbmcpOwogICAgICAgICB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCByZXN1bHQs
IHRvU3RyaW5nVGFnU2xvdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSkpOworICAg
IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC00NSw2ICs0NSw2IEBAIHByaXZhdGU6CiAgICAgT2JqZWN0UHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7CiB9OwogCi1KU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM4LDE0ICszOCwxNCBAQCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3VzdG9t
R2V0dGVyKEV4ZWNTCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGRpZmZlcmVuY2VzIGluIGN1
c3RvbSB2YWx1ZXMgYW5kIGN1c3RvbSBhY2Nlc3NvcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODAxNAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
bV9hdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IgPyBtX3RoaXNWYWx1ZSA6IEpTVmFsdWUoc2xv
dEJhc2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tLmdldFZh
bHVlKGV4ZWMsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAg
ICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCB0aGlzVmFsdWUsIHByb3BlcnR5
TmFtZSk7CiB9CiAKIEpTVmFsdWUgUHJvcGVydHlTbG90OjpjdXN0b21BY2Nlc3NvckdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2RhdGEuY3VzdG9tQWNjZXNzb3IuZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2Rh
dGEuY3VzdG9tQWNjZXNzb3IuZ2V0dGVyU2V0dGVyLT5nZXR0ZXIoKShleGVjLCBKU1ZhbHVlOjpl
bmNvZGUobV90aGlzVmFsdWUpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gbV9kYXRhLmN1
c3RvbUFjY2Vzc29yLmdldHRlclNldHRlci0+Z2V0dGVyKCkoZXhlYywgbV90aGlzVmFsdWUsIHBy
b3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRQdXJlUmVzdWx0KCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xv
dC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNy0yMDA4LCAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
c2xvdEJhc2UgLyByZWNlaXZlciBiZWhhdmlvciBkaWZmZXJlbmNlIGluIGN1c3RvbSB2YWx1ZXMg
YW5kIGN1c3RvbSBhY2Nlc3NvcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODAxNAotICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAy
MTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw3IEBAIFByb3h5Q29uc3RydWN0b3I6OlByb3h5
Q29uc3RydWN0b3IoVk0mIHYKIHsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTY0LDE5ICs2NCwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYWtlCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFs
dWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlP
YmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwg
aGFuZGxlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBQcm94eVJldm9r
ZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwg
cmV2b2tlLCBOb25lKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9yVGhyb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3h5UmV2b2NhYmxlQ29uc3RydWN0b3JUaHJv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShleGVjLT52bSgpKTsKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eS5yZXZvY2FibGUgY2Fubm90IGJlIGNvbnN0cnVjdGVk
LiBJdCBjYW4gb25seSBiZSBjYWxsZWQiKSk7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUHJveHlD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBwdXREaXJlY3Qodm0sIG1ha2VJZGVu
dGlmaWVyKHZtLCAicmV2b2NhYmxlIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCAyLCBBU0NJSUxpdGVyYWwoInJldm9jYWJsZSIpLCBtYWtlUmV2b2NhYmxlUHJveHksIE5v
SW50cmluc2ljLCBwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9yVGhyb3dFcnJvcikpOwogfQogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RQcm94eU9iamVjdChF
eGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFBy
b3h5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBpZiAoZXhlYy0+bmV3VGFyZ2V0KCkuaXNVbmRl
ZmluZWQoKSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFs
dWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFuZGxlcikpOworICAgIHJldHVybiBQcm94eU9iamVj
dDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGFyZ2V0LCBoYW5k
bGVyKTsKIH0KIAogQ29uc3RydWN0VHlwZSBQcm94eUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RE
YXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xMDksMTAgKzEw
OSwxMCBAQCBDb25zdHJ1Y3RUeXBlIFByb3h5Q29uc3RydWN0b3I6OmdldENvbnN0CiAgICAgcmV0
dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxQcm94eShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxQcm94eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCAiUHJveHkiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RC
ZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm94eSIpOwogfQogCiBD
YWxsVHlwZSBQcm94eUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksOCArNDksNiBA
QCBwcml2YXRlOgogICAgIFByb3h5Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKLQotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBnZXRHZXR0ZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDkxLDEzICs0OTEsMTMgQEAgYm9vbCBQ
cm94eU9iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbAogICAgIHJldHVybiB0aGlzT2JqZWN0
LT5wdXRCeUluZGV4Q29tbW9uKGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cGVyZm9ybVByb3h5Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHBlcmZvcm1Qcm94eUNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewogICAgICAgICB0
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBQcm94eU9iamVj
dCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBK
U1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5LT5oYW5kbGVyKCk7CkBAIC01MDgsMjQgKzUwOCwy
NCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBhcHBseU1l
dGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJ
ZGVudGlmaWVyKHZtLCAiYXBwbHkiKSwgQVNDSUlMaXRlcmFsKCInYXBwbHknIHByb3BlcnR5IG9m
IGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7
CiAgICAgaWYgKGFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGFyZ2V0LT5tZXRob2RUYWJs
ZSh2bSktPmdldENhbGxEYXRhKHRhcmdldCwgY2FsbERhdGEpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldCwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBleGVjLT50aGlzVmFsdWUoKSwgQXJnTGlzdChleGVjKSkpOworICAg
ICAgICByZXR1cm4gY2FsbChleGVjLCB0YXJnZXQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+
dGhpc1ZhbHVlKCksIEFyZ0xpc3QoZXhlYykpOwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFyZ0Fy
cmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVu
dHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT50aGlzVmFsdWUo
KSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBhcHBseU1ldGhvZCwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpKTsKKyAgICByZXR1cm4gY2FsbChl
eGVjLCBhcHBseU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMp
OwogfQogCiBDYWxsVHlwZSBQcm94eU9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsLCBD
YWxsRGF0YSYgY2FsbERhdGEpCkBAIC01NDEsMTMgKzU0MSwxMyBAQCBDYWxsVHlwZSBQcm94eU9i
amVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmb3JtUHJveHlDb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmb3Jt
UHJveHlDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChV
TkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewogICAgICAgICB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBQcm94eU9iamVjdCogcHJveHkg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBKU1ZhbHVlIGhh
bmRsZXJWYWx1ZSA9IHByb3h5LT5oYW5kbGVyKCk7CkBAIC01NTgsMjcgKzU1OCwyNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2Qg
PSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRp
Zmllcih2bSwgImNvbnN0cnVjdCIpLCBBU0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5
IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50
YXJnZXQoKTsKICAgICBpZiAoY29uc3RydWN0TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAgICAg
ICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBlIGNv
bnN0cnVjdFR5cGUgPSB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q29uc3RydWN0RGF0YSh0
YXJnZXQsIGNvbnN0cnVjdERhdGEpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdHJ1Y3RU
eXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmUpOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgQXJnTGlzdChleGVjKSwgZXhlYy0+bmV3VGFyZ2V0
KCkpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5
cGUsIGNvbnN0cnVjdERhdGEsIEFyZ0xpc3QoZXhlYyksIGV4ZWMtPm5ld1RhcmdldCgpKTsKICAg
ICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRp
Y19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQoYXJnQXJyYXkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZXhlYy0+bmV3VGFyZ2V0
KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjb25zdHJ1Y3RNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3VsdCBmcm9t
IFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9iamVjdCIp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogQ29uc3RydWN0VHlwZSBQcm94eU9iamVjdDo6Z2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eVJldm9rZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsMTggKzU1LDE4IEBAIHZvaWQgUHJveHlSZXZva2U6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5UmV2b2tlKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5UmV2b2tl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBQcm94eVJldm9rZSogcHJveHlSZXZva2UgPSBqc0Nh
c3Q8UHJveHlSZXZva2UqPihleGVjLT5qc0NhbGxlZSgpKTsKICAgICBKU1ZhbHVlIHByb3h5VmFs
dWUgPSBwcm94eVJldm9rZS0+cHJveHkoKTsKICAgICBpZiAocHJveHlWYWx1ZS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8
UHJveHlPYmplY3QqPihwcm94eVZhbHVlKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IHByb3h5LT5yZXZva2Uodm0pOwogICAgIHByb3h5UmV2b2tlLT5zZXRQcm94eVRvTnVsbCh2bSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAogQ2FsbFR5cGUgUHJveHlSZXZva2U6OmdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNSwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUHV0UHJvcGVydHlTbG90IHsKIHB1Ymxp
YzoKICAgICBlbnVtIFR5cGUgeyBVbmNhY2hhYmxlLCBFeGlzdGluZ1Byb3BlcnR5LCBOZXdQcm9w
ZXJ0eSwgU2V0dGVyUHJvcGVydHksIEN1c3RvbVZhbHVlLCBDdXN0b21BY2Nlc3NvciB9OwogICAg
IGVudW0gQ29udGV4dCB7IFVua25vd25Db250ZXh0LCBQdXRCeUlkLCBQdXRCeUlkRXZhbCB9Owot
ICAgIHR5cGVkZWYgYm9vbCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOworICAgIHR5cGVkZWYgYm9vbCAo
KlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdChKU1ZhbHVlIHRoaXNWYWx1ZSwgYm9vbCBpc1N0
cmljdE1vZGUgPSBmYWxzZSwgQ29udGV4dCBjb250ZXh0ID0gVW5rbm93bkNvbnRleHQsIGJvb2wg
aXNJbml0aWFsaXphdGlvbiA9IGZhbHNlKQogICAgICAgICA6IG1fdHlwZShVbmNhY2hhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5j
cHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
ZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZWN0Q29uc3RydWN0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEVudW1lcmF0ZShF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RHZXQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldFByb3RvdHlw
ZU9mKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVm
bGVjdE9iamVjdElzRXh0ZW5zaWJsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RPd25LZXlzKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNp
b25zKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVm
bGVjdE9iamVjdFNldChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdENvbnN0cnVjdChFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0
RW51bWVyYXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0UHJvdG90eXBlT2YoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RJc0V4dGVu
c2libGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RPd25LZXlzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0UHJldmVudEV4dGVuc2lvbnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUq
KTsKIAogfQogCkBAIC05Myw1OSArOTMsNTkgQEAgdm9pZCBSZWZsZWN0T2JqZWN0OjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBodHRwczovL3RjMzkuZ2l0
aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNv
bnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25z
dHJ1Y3RvciIpKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25z
dHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGU7CiAgICAgaWYgKCF0YXJnZXQuaXNDb25zdHJ1Y3Rvcihj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNv
bnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25z
dHJ1Y3RvciIpKTsKIAogICAgIEpTVmFsdWUgbmV3VGFyZ2V0ID0gdGFyZ2V0OwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBuZXdUYXJnZXQgPSBleGVjLT5h
cmd1bWVudCgyKTsKICAgICAgICAgaWYgKCFuZXdUYXJnZXQuaXNDb25zdHJ1Y3RvcigpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgdGhpcmQgYXJn
dW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBwcmVzZW50IikpKTsKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0
cnVjdCByZXF1aXJlcyB0aGUgdGhpcmQgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBwcmVz
ZW50IikpOwogICAgIH0KIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBKU09iamVjdCogYXJndW1lbnRzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4
ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWFyZ3VtZW50c09iamVjdCkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFu
IG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgc2Vjb25kIGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdCIpKTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMs
IGFyZ3VtZW50c09iamVjdCwgUnVudGltZVR5cGVNYXNrQWxsVHlwZXMsIEFTQ0lJTGl0ZXJhbCgi
VGhpcyBlcnJvciBtdXN0IG5vdCBiZSByYWlzZWQiKSwgWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50
aW1lVHlwZSkgLT4gYm9vbCB7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNv
bnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3Vt
ZW50cywgbmV3VGFyZ2V0KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNv
bnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KTsKIH0KIAog
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5kZWZpbmVwcm9w
ZXJ0eQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RGVmaW5lUHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3REZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0
aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZGVmaW5lUHJvcGVy
dHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBk
ZXNjcmlwdG9yOwogICAgIGJvb2wgc3VjY2VzcyA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlwdG9yKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpID09IHN1Y2Nlc3MpOwogICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
IApAQCAtMTUzLDM1ICsxNTMsMzUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZQogICAgIGJvb2wgc2hvdWxkVGhyb3cgPSBmYWxzZTsKICAgICBKU09iamVjdCogdGFy
Z2V0T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRhcmdldE9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRhcmdl
dE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0YXJnZXRPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKIH0KIAogLy8g
RklYTUU6IFJlZmxlY3QuZW51bWVyYXRlIGlzIHJlbW92ZWQgaW4gRUNNQSAyMDE2IGRyYWZ0Lgog
Ly8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXJl
ZmxlY3QuZW51bWVyYXRlCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3RFbnVtZXJhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxl
Y3RPYmplY3RFbnVtZXJhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZW51bWVyYXRlIHJlcXVpcmVzIHRoZSBm
aXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5lbnVtZXJhdGUgcmVxdWly
ZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9wZXJ0eU5hbWVJdGVy
YXRvclN0cnVjdHVyZSgpLCBhc09iamVjdCh0YXJnZXQpKSk7CisgICAgcmV0dXJuIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlKCksIGFzT2JqZWN0KHRhcmdldCkpOwogfQog
CiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmdldAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0
LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxl
Y3QuZ2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSk7CiAKICAg
ICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJv
cGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpT
VmFsdWUgcmVjZWl2ZXIgPSB0YXJnZXQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAzKQpAQCAtMTg5LDk1ICsxODksOTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZQogCiAgICAgUHJvcGVydHlTbG90IHNsb3QocmVjZWl2ZXIsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRhcmdldC5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSk7CisgICAgcmV0dXJuIHRhcmdldC5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
IAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRvd25w
cm9wZXJ0eWRlc2NyaXB0b3IKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBy
ZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogCiAgICAgYXV0byBr
ZXkgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihl
eGVjLCBhc09iamVjdCh0YXJnZXQpLCBrZXkpKTsKKyAgICByZXR1cm4gb2JqZWN0Q29uc3RydWN0
b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KTsK
IH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRw
cm90b3R5cGVvZgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0
UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxl
Y3RPYmplY3RHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1
aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZ2V0UHJv
dG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
YXJnZXQpLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodGFy
Z2V0KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5pc2V4dGVuc2libGUKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5pc0V4dGVuc2libGUgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVj
dCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJSZWZsZWN0LmlzRXh0ZW5zaWJsZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQg
YmUgYW4gb2JqZWN0IikpOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09iamVjdCh0YXJn
ZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
aXNFeHRlbnNpYmxlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKGlzRXh0ZW5zaWJsZSk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3Qub3dua2V5cwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0T3duS2V5cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdE93bktleXMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Qub3duS2V5
cyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Qu
b3duS2V5cyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5
S2V5cyhleGVjLCBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAg
IHJldHVybiBvd25Qcm9wZXJ0eUtleXMoZXhlYywganNDYXN0PEpTT2JqZWN0Kj4odGFyZ2V0KSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUpOwogfQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1yZWZsZWN0LnByZXZlbnRleHRlbnNpb25zCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZs
ZWN0LnByZXZlbnRFeHRlbnNpb25zIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBv
YmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dCh0YXJnZXQpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnBy
ZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4ocmVzdWx0KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKHJlc3VsdCk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3Quc2V0Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Quc2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5zZXQgcmVxdWlyZXMgdGhlIGZpcnN0
IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0g
YXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1l
bnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDQpCkBAIC0yODcsMjggKzI4NywyOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZh
bHNlOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBzaG91bGRUaHJvd0lmQ2Fu
dFNldCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRhcmdldE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmFyZ3VtZW50KDIpLCBzbG90KSkpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh0YXJnZXRP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhlYy0+YXJndW1lbnQoMiksIHNsb3QpKTsKIH0K
IAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5zZXRwcm90
b3R5cGVvZgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0UHJv
dG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RTZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0Lmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5zZXRQcm90b3R5cGVPZiByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Quc2V0UHJvdG90
eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBK
U1ZhbHVlIHByb3RvID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFwcm90by5pc09iamVj
dCgpICYmICFwcm90by5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LnNldFByb3Rv
dHlwZU9mIHJlcXVpcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgYmUgZWl0aGVyIGFuIG9iamVjdCBv
ciBudWxsIikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlJlZmxlY3Quc2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIHNlY29uZCBh
cmd1bWVudCBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIG51bGwiKSk7CiAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRT
ZXQgPSBmYWxzZTsKICAgICBib29sIGRpZFNldFByb3RvdHlwZSA9IG9iamVjdC0+c2V0UHJvdG90
eXBlKHZtLCBleGVjLCBwcm90bywgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3RvdHlwZSkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihkaWRTZXRQcm90b3R5cGUp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDctMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0zMCwxNyArMzAsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJl
Z0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1h
dGNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENv
bnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSk7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRl
eHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNW
YWx1ZSByZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5
TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEpTVmFsdWUgcmVnRXhwQ29uc3Ry
dWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKK3N0YXRp
YyBKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250
ZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSBy
ZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpOwogdGVtcGxhdGU8aW50IE4+Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29u
c3RydWN0b3JEb2xsYXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7
CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOwogCi1zdGF0aWMgYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvcklu
cHV0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci1zdGF0aWMg
Ym9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOworc3RhdGljIGJvb2wgc2V0UmVnRXhwQ29uc3RydWN0b3JJ
bnB1dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKK3N0YXRpYyBib29sIHNldFJlZ0V4
cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApAQCAtMTQ2LDU0ICsxNDYsNTQgQEAgSlNWYWx1ZSBSZWdFeHBD
b25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZQogfQogCiB0ZW1wbGF0ZTxpbnQgTj4KLUVuY29kZWRK
U1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9y
RG9sbGFyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5nZXRCYWNrcmVmKGV4ZWMsIE4pKTsKKyAgICByZXR1cm4g
YXNSZWdFeHBDb25zdHJ1Y3Rvcih0aGlzVmFsdWUpLT5nZXRCYWNrcmVmKGV4ZWMsIE4pOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1
Y3RvcklucHV0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKS0+aW5wdXQoKSk7CisgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3Ry
dWN0b3IodGhpc1ZhbHVlKS0+aW5wdXQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29u
c3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSktPm11bHRpbGluZSgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4
cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPm11bHRpbGluZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgcmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JM
YXN0TWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPmdldEJhY2tyZWYoZXhlYywgMCkpOworICAgIHJldHVy
biBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPmdldEJhY2tyZWYoZXhlYywgMCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJl
Z0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhw
Q29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5nZXRMYXN0UGFyZW4oZXhl
YykpOworICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPmdldExhc3RQ
YXJlbihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29u
dGV4dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
LT5nZXRMZWZ0Q29udGV4dChleGVjKSk7CisgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Io
dGhpc1ZhbHVlKS0+Z2V0TGVmdENvbnRleHQoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJl
Z0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yUmln
aHRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5nZXRSaWdodENvbnRleHQoZXhlYykpOworICAgIHJl
dHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPmdldFJpZ2h0Q29udGV4dChleGVj
KTsKIH0KIAotYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgc2V0
UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmIChhdXRvIGNvbnN0cnVjdG9yID0ganNEeW5hbWlj
Q2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkgewot
ICAgICAgICBjb25zdHJ1Y3Rvci0+c2V0SW5wdXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KS50b1N0cmluZyhleGVjKSk7CisgICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBqc0R5bmFtaWND
YXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKSkgeworICAgICAgICBjb25zdHJ1Y3Rv
ci0+c2V0SW5wdXQoZXhlYywgdmFsdWUudG9TdHJpbmcoZXhlYykpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIHNldFJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxp
bmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwQ29uc3RydWN0
b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpIHsKLSAgICAgICAgY29uc3RydWN0b3It
PnNldE11bHRpbGluZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgaWYgKGF1dG8gY29uc3RydWN0b3IgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cENvbnN0cnVjdG9y
Kj4odGhpc1ZhbHVlKSkgeworICAgICAgICBjb25zdHJ1Y3Rvci0+c2V0TXVsdGlsaW5lKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yOTgsMTggKzI5OCwxOCBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhw
KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIHJlZ0V4cENyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QsIG5ld1RhcmdldCwgcGF0dGVybkFyZywgZmxhZ3NBcmcpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGVzU3BlY1JlZ0V4cENyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjUmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwogICAgIEpTVmFsdWUgcGF0dGVybkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IEpTVmFsdWUgZmxhZ3NBcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlZ0V4cENyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGpzVW5kZWZpbmVkKCks
IHBhdHRlcm5BcmcsIGZsYWdzQXJnKSk7CisgICAgcmV0dXJuIHJlZ0V4cENyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QsIGpzVW5kZWZpbmVkKCksIHBhdHRlcm5BcmcsIGZsYWdzQXJnKTsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFJlZ0V4cENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
cmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RS
ZWdFeHAoZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxP
YmplY3QoKSwgYXJncywgZXhlYy0+anNDYWxsZWUoKSwgZXhlYy0+bmV3VGFyZ2V0KCkpKTsKKyAg
ICByZXR1cm4gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5q
c0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIGV4ZWMtPmpzQ2FsbGVlKCksIGV4ZWMt
Pm5ld1RhcmdldCgpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAt
MzE4LDEwICszMTgsMTAgQEAgQ29uc3RydWN0VHlwZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0Q29u
cwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdFJlZ0V4cChleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhl
Yy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBleGVjLT5qc0NhbGxlZSgpKSk7
CisgICAgcmV0dXJuIGNvbnN0cnVjdFJlZ0V4cChleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhl
Yy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBleGVjLT5qc0NhbGxlZSgpKTsK
IH0KIAogQ2FsbFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA3LTIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNDUsNiArMTQ1LDYgQEAgQUxXQVlTX0lOTElORSBi
b29sIGlzUmVnRXhwKFZNJiB2bSwgRXhlYwogICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRzKFJl
Z0V4cE9iamVjdDo6aW5mbygpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBl
c1NwZWNSZWdFeHBDcmVhdGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNT
cGVjUmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTIsIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0xMzIsMTQgKzEzMiwxNCBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKLXN0YXRpYyBib29s
IHJlZ0V4cE9iamVjdFNldExhc3RJbmRleFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgYm9vbCByZWdF
eHBPYmplY3RTZXRMYXN0SW5kZXhTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QoSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRMYXN0SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2Rl
KHZhbHVlKSwgdHJ1ZSk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNl
dExhc3RJbmRleChleGVjLCB2YWx1ZSwgdHJ1ZSk7CiB9CiAKLXN0YXRpYyBib29sIHJlZ0V4cE9i
amVjdFNldExhc3RJbmRleE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgYm9vbCByZWdFeHBPYmpl
Y3RTZXRMYXN0SW5kZXhOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QoSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRMYXN0SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSwgZmFsc2UpOworICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRM
YXN0SW5kZXgoZXhlYywgdmFsdWUsIGZhbHNlKTsKIH0KIAogYm9vbCBSZWdFeHBPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDE2ICs0
NCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNlKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJNdWx0
aWxpbmUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0dldHRlclN0aWNreShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyVW5pY29kZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNl
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG9HZXR0ZXJGbGFncyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckln
bm9yZUNhc2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvR2V0dGVyTXVsdGlsaW5lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclN0aWNreShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJVbmljb2RlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJG
bGFncyhFeGVjU3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cFByb3RvdHlwZTo6c19p
bmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShS
ZWdFeHBQcm90b3R5cGUpIH07CiAKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZWdFeHBQcm90b3R5
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1Rlc3RGYXN0KEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0RmFzdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDcsMTIgKzEwNywxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4
Y2VwdGlvbigpID09ICFzdHJpbmcpOwogICAgIGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihh
c1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT50ZXN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgc3RyaW5nKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+dGVzdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmlu
ZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4
ZWMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVu
Y0V4ZWMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTIzLDEyICsxMjMsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZ09yTnVsbChleGVjKTsKICAgICBB
U1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhc3RyaW5nKTsKICAgICBpZiAoIXN0cmluZykK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgc3RyaW5nKSk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNW
YWx1ZSktPmV4ZWMoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFz
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5j
TWF0Y2hGYXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzOSwxNiArMTM5
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1N0
cmluZyogc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmdPck51bGwoZXhlYyk7CiAg
ICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXN0cmluZyk7CiAgICAgaWYgKCFzdHJp
bmcpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9
OwogICAgIGlmICghYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPmdsb2JhbCgp
KSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgc3RyaW5nKSk7CisgICAgICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0
aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5n
KTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+bWF0Y2hHbG9iYWwoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcpKTsKKyAgICByZXR1cm4gYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+bWF0Y2hHbG9iYWwoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBzdHJpbmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY3
LDEyICsxNjcsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwog
ICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBlbXB0
eVN0cmluZygpIDogYXJnMC50b1dURlN0cmluZyhleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdz
OwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3Mg
PSByZWdFeHBGbGFncyhhcmcxLnRvV1RGU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIGlmIChmbGFncyA9PSBJ
bnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBz
Y29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGZsYWdz
IHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSkpOwogICAgICAgICB9CkBAIC0xODUs
NyArMTg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAg
IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldFJlZ0V4cCh2bSwgcmVnRXhwKTsKICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAg
ICByZXR1cm4gdGhpc1ZhbHVlOwogfQogCiB0eXBlZGVmIHN0ZDo6YXJyYXk8Y2hhciwgNSArIDE+
IEZsYWdzU3RyaW5nOyAvLyA1IGRpZmZlcmVudCBmbGFncyBhbmQgYSBudWxsIGNoYXJhY3RlciB0
ZXJtaW5hdG9yLgpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NTdHJpbmcg
ZmxhZ3NTdHJpbmcoRXgKICAgICByZXR1cm4gc3RyaW5nOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMzksMjMgKzIzOSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVj
a2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwg
Y2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJu
VmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJu
VmFsdWU7CiAKICAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBTdHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9
IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5mbGFncyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBTdHJpbmcgZmxhZ3MgPSBmbGFnc1ZhbHVlLnRv
V1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICcvJywgc291cmNlLCAnLycsIGZsYWdzKSk7CisgICAgcmV0dXJuIGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgJy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckds
b2JhbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNjMsMTQgKzI2MywxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1
ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7CiAgICAgICAgIGlmICh0aGlzVmFs
dWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJUaGUgUmVnRXhwLnByb3RvdHlwZS5nbG9iYWwgZ2V0dGVyIGNhbiBvbmx5
IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhw
KCktPmdsb2JhbCgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlz
VmFsdWUpLT5yZWdFeHAoKS0+Z2xvYmFsKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVySWdub3JlQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI3OCwxNCArMjc4LDE0IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4
cE9iamVjdDo6aW5mbygpKSkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdF
eHBQcm90b3R5cGU6OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRo
ZSBSZWdFeHAucHJvdG90eXBlLmlnbm9yZUNhc2UgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBv
biBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPmlnbm9yZUNh
c2UoKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
cmVnRXhwKCktPmlnbm9yZUNhc2UoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTI5MywxNCArMjkzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVj
dDo6aW5mbygpKSkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90
b3R5cGU6OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdF
eHAucHJvdG90eXBlLm11bHRpbGluZSBnZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVn
RXhwIG9iamVjdCIpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdFeHAoKS0+bXVsdGlsaW5lKCkpKTsK
KyAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgp
LT5tdWx0aWxpbmUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG9HZXR0ZXJTdGlja3koRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvR2V0dGVyU3RpY2t5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTMwOCwxNCArMzA4LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlm
IChVTkxJS0VMWSghdGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkpIHsK
ICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90b3R5cGU6OmluZm8oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLnN0
aWNreSBnZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCIpKTsKICAg
ICB9CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBP
YmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPnN0aWNreSgpKSk7CisgICAgcmV0dXJuIGpzQm9v
bGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdFeHAoKS0+c3RpY2t5KCkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyVW5pY29kZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJV
bmljb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTMyMywxNCArMzIzLDE0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc1Zh
bHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkpIHsKICAgICAgICAgaWYgKHRoaXNW
YWx1ZS5pbmhlcml0cyhSZWdFeHBQcm90b3R5cGU6OmluZm8oKSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLnVuaWNvZGUgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAgfQogICAgIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSkt
PnJlZ0V4cCgpLT51bmljb2RlKCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2Jq
ZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT51bmljb2RlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzQwLDkgKzM0MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0
dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdz
ID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
ZXhlYywgZmxhZ3MuZGF0YSgpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRh
dGEoKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtNDUxLDcg
KzQ1MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSByZWdFeHBQcm90b0dldHRlclMKICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0LnRvU3RyaW5nKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NTksMTcgKzQ1OSwxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhS
ZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMo
UmVnRXhwUHJvdG90eXBlOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCBBU0NJSUxpdGVyYWwoIig/OikiKSkpOworICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiKD86KSIpKTsKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4
cC5wcm90b3R5cGUuc291cmNlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAg
b2JqZWN0IikpOwogICAgIH0KIAogICAgIFN0cmluZyBwYXR0ZXJuID0gYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCktPnBhdHRlcm4oKTsKICAgICBpZiAocGF0dGVybi5pczhCaXQo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBQcm90b0dldHRlclNvdXJj
ZUludGVybmFsKGV4ZWMsIHBhdHRlcm4sIHBhdHRlcm4uY2hhcmFjdGVyczgoKSwgcGF0dGVybi5s
ZW5ndGgoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwUHJvdG9HZXR0ZXJT
b3VyY2VJbnRlcm5hbChleGVjLCBwYXR0ZXJuLCBwYXR0ZXJuLmNoYXJhY3RlcnMxNigpLCBwYXR0
ZXJuLmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiByZWdFeHBQcm90b0dldHRlclNvdXJjZUlu
dGVybmFsKGV4ZWMsIHBhdHRlcm4sIHBhdHRlcm4uY2hhcmFjdGVyczgoKSwgcGF0dGVybi5sZW5n
dGgoKSk7CisgICAgcmV0dXJuIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoZXhlYywg
cGF0dGVybiwgcGF0dGVybi5jaGFyYWN0ZXJzMTYoKSwgcGF0dGVybi5sZW5ndGgoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2Vh
cmNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00NzgsMTEgKzQ3OCwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAKICAgICBKU1N0
cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3Ig
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAg
TWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwg
cmVnRXhwLCBzdHJpbmcsIHMsIDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
ID8ganNOdW1iZXIocmVzdWx0LnN0YXJ0KSA6IGpzTnVtYmVyKC0xKSk7CisgICAgcmV0dXJuIHJl
c3VsdCA/IGpzTnVtYmVyKHJlc3VsdC5zdGFydCkgOiBqc051bWJlcigtMSk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZVN0cmluZ0luZGV4KFN0cmluZyBzdHIsIHVuc2lnbmVk
IHN0clNpemUsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzVW5pY29kZSkKQEAgLTU3Myw3ICs1NzMs
NyBAQCB2b2lkIGdlbmVyaWNTcGxpdCgKIH0KIAogLy8gRVMgMjEuMi41LjExIFJlZ0V4cC5wcm90
b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdCkKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtNTg2LDcgKzU4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBi
ZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNTdHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJp
bmctPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgQVNT
RVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAvLyA0LiBbaGFuZGxlZCBieSBKUyBidWlsdGlu
XSBMZXQgQyBiZSA/IFNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgJVJlZ0V4cCUpLgpAQCAtNjAwLDcg
KzYwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAv
LyAxMS4gTGV0IEEgYmUgQXJyYXlDcmVhdGUoMCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJl
IDAuCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IDA7CiAKICAgICAvLyAxMy4gSWYgbGltaXQgaXMgdW5kZWZpbmVkLCBsZXQgbGltIGJlIDJe
MzItMTsgZWxzZSBsZXQgbGltIGJlID8gVG9VaW50MzIobGltaXQpLgpAQCAtNjE1LDcgKzYxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KIAogICAgIC8vIDE2
LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCiAgICAgaWYgKCFsaW1pdCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gMTcuIElmIHNpemUgPT0gMCwgdGhlbgogICAgIGlmIChpbnB1dC5pc0VtcHR5KCkpIHsKQEAg
LTYyNSw5ICs2MjUsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
CiAgICAgICAgIC8vIGQuIFJldHVybiBBLgogICAgICAgICBpZiAoIXJlZ2V4cC0+bWF0Y2godm0s
IGlucHV0LCAwKSkgewogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAw
LCBpbnB1dFN0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIDE4LiBMZXQgcSA9IHAu
CkBAIC02NTIsMTAgKzY1MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0U3BsaXQ7CiAgICAgICAgICAgICBy
ZXR1cm4gQ29udGludWVTcGxpdDsKICAgICAgICAgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIGlmIChyZXN1bHRMZW5ndGggPj0gbGltaXQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBp
ZiAocmVzdWx0TGVuZ3RoIDwgbWF4U2l6ZUZvckRpcmVjdFBhdGgpIHsKICAgICAgICAgLy8gMjAu
IExldCBUIGJlIGEgU3RyaW5nIHZhbHVlIGVxdWFsIHRvIHRoZSBzdWJzdHJpbmcgb2YgUyBjb25z
aXN0aW5nIG9mIHRoZSBlbGVtZW50cyBhdCBpbmRpY2VzIHAgKGluY2x1c2l2ZSkgdGhyb3VnaCBz
aXplIChleGNsdXNpdmUpLgogICAgICAgICAvLyAyMS4gUGVyZm9ybSAhIENyZWF0ZURhdGFQcm9w
ZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBUKS4KQEAgLTY2Myw3ICs2NjMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0
cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5nLCBwb3NpdGlvbiwgaW5wdXRTaXplIC0gcG9z
aXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIC8vIDIyLiBSZXR1cm4gQS4KLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKICAgICAvLyBOb3cgZG8gYSBkcnkgcnVuIHRvIHNlZSBob3cgYmlnIHRoaW5ncyBn
ZXQuIEdpdmUgdXAgaWYgdGhleSBnZXQgYWJzdXJkLgpAQCAtNjg2LDcgKzY4Niw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAKICAgICBpZiAocmVzdWx0
TGVuZ3RoICsgZHJ5UnVuQ291bnQgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewogICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAg
Ly8gT0ssIHdlIGtub3cgdGhhdCBpZiB3ZSBmaW5pc2ggdGhlIHNwbGl0LCB3ZSB3b24ndCBoYXZl
IHRvIE9PTS4KQEAgLTcwNSwxNyArNzA1LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAgICAgICAgICAgICByZXR1cm4gQWJvcnRTcGxpdDsKICAgICAg
ICAgICAgIHJldHVybiBDb250aW51ZVNwbGl0OwogICAgICAgICB9KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIAogICAgIC8vIDIwLiBMZXQgVCBiZSBhIFN0cmluZyB2YWx1ZSBlcXVhbCB0byB0aGUg
c3Vic3RyaW5nIG9mIFMgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudHMgYXQgaW5kaWNlcyBwIChp
bmNsdXNpdmUpIHRocm91Z2ggc2l6ZSAoZXhjbHVzaXZlKS4KICAgICAvLyAyMS4gUGVyZm9ybSAh
IENyZWF0ZURhdGFQcm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBUKS4KICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1bHRMZW5n
dGgsIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJp
bmcsIHBvc2l0aW9uLCBpbnB1dFNpemUgLSBwb3NpdGlvbikpOwogICAgIC8vIDIyLiBSZXR1cm4g
QS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNy0yMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTcsOSArNTcsOSBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxSZWdFeHA+IG1fZW1wdHlSZWdFeHA7CiB9OwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU3Bs
aXRGYXN0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNUZXN0RmFzdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0Z1bmNNYXRjaEZhc3QoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVGVzdEZhc3QoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ3LDM0ICs0NywzNCBAQCB2b2lkIFNldENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
CiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3Bl
Y2llc1N5bWJvbCwgc3BlY2llc1N5bWJvbCwgQWNjZXNzb3IgfCBSZWFkT25seSB8IERvbnRFbnVt
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFNldChFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTZXQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29w
ZSwgIlNldCIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIlNldCIpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RTZXQoRXhlY1N0YXRlKiBleGVjKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RTZXQoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3Ry
dWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1
cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU1NldCogc2V0ID0g
SlNTZXQ6OmNyZWF0ZShleGVjLCB2bSwgc2V0U3RydWN0dXJlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzZXQpOworICAgICAgICByZXR1cm4gc2V0OwogCiAgICAgSlNWYWx1ZSBh
ZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+YWRkKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlv
bkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxE
YXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYgKFVOTElL
RUxZKGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICBmb3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiwgRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5leHRWYWx1ZSkgewpAQCAtODMsNyArODMsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIGNhbGwoZXhlYywg
YWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2FsbERh
dGEsIHNldCwgYXJndW1lbnRzKTsKICAgICB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2V0KTsKKyAgICByZXR1cm4gc2V0OwogfQogCiBDb25zdHJ1Y3RUeXBlIFNldENvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAx
NyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gU2V0SXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlNldCBJdGVyYXRvciIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2V0SXRlcmF0b3JQcm90b3R5cGUp
IH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJv
dG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgU2V0SXRl
cmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBTZXRJdGVyYXRvclByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiU2V0IEl0ZXJh
dG9yIiksIERvbnRFbnVtIHwgUmVhZE9ubHkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTQsMTQgKzU0LDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IKICAgICBKU1ZhbHVlIHJl
c3VsdDsKICAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTZXRJ
dGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghaXRlcmF0b3IpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBTZXRJdGVyYXRvci5uZXh0KCkgb24gYSBu
b24tU2V0SXRlcmF0b3Igb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgU2V0SXRlcmF0b3Iu
bmV4dCgpIG9uIGEgbm9uLVNldEl0ZXJhdG9yIG9iamVjdCIpKTsKIAogICAgIGlmIChpdGVyYXRv
ci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOworICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKTsKICAgICB9CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CisgICAgcmV0dXJu
IGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1
ZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nywx
NSArNDcsMTUgQEAgY29uc3QgQ2xhc3NJbmZvIFNldFByb3RvdHlwZTo6c19pbmZvID0gewogQGVu
ZAogKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
QWRkKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0
UHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRy
aWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1
bmNBZGQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3Rv
RnVuY0NsZWFyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNEZWxldGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc2V0UHJvdG9GdW5jVmFsdWVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKEV4ZWNTdGF0ZSopOwogCiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1NpemUoRXhlY1N0YXRlKik7
CiAKIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7CkBAIC05Myw3OSArOTMsNzkgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgSlNTZXQqIGdldFNldChDYWxsRgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpOwogICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAg
IGlmICghc2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBzZXQtPmFkZChjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhp
c1ZhbHVlKTsKKyAgICByZXR1cm4gdGhpc1ZhbHVlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewogICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKICAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgc2V0LT5jbGVh
cihjYWxsRnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
ICAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc2V0LT5yZW1v
dmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHNldC0+cmVtb3ZlKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
SlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghc2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHNldC0+aGFzKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihzZXQtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY1NpemUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNTZXQqIHNl
dCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICgh
c2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc2V0LT5zaXplKGNhbGxGcmFtZSkpKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHNldC0+
c2l6ZShjYWxsRnJhbWUpKTsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c2V0UHJvdG9GdW5jVmFsdWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBW
TSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNTZXQqIHRoaXNPYmogPSBqc0R5bmFtaWNDYXN0PEpTU2V0Kj4o
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBhIFNldCB2YWx1ZSBpdGVyYXRvciBmb3IgYSBub24tU2V0
IG9iamVjdC4iKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTZXRJdGVyYXRvcjo6
Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVy
YXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNy
ZWF0ZSBhIFNldCB2YWx1ZSBpdGVyYXRvciBmb3IgYSBub24tU2V0IG9iamVjdC4iKSk7CisgICAg
cmV0dXJuIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZVZh
bHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRy
aWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3Rv
RnVuY0VudHJpZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIEpTU2V0KiB0aGlzT2JqID0ganNEeW5hbWljQ2FzdDxKU1NldCo+KGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5v
dCBjcmVhdGUgYSBTZXQgZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLVNldCBvYmplY3QuIikpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2Fs
bEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgdGhpc09iaiwgSXRlcmF0ZUtleVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBTZXQg
ZW50cnkgaXRlcmF0b3IgZm9yIGEgbm9uLVNldCBvYmplY3QuIikpOworICAgIHJldHVybiBKU1Nl
dEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXlWYWx1ZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVy
YXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQq
PihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIEpTU2V0KiBzZXQgPSBqc0Nhc3Q8
SlNTZXQqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+anNDYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHNldCwgSXRlcmF0ZUtl
eSkpOworICAgIHJldHVybiBKU1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHNldCwg
SXRlcmF0ZUtleSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1
bmNTZXRJdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NF
UlQoanNEeW5hbWljQ2FzdDxKU1NldEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAg
ICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOwpAQCAtMTczLDkgKzE3Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBpZiAoaXRlcmF0b3ItPm5leHQoZXhlYywgcmVzdWx0KSkg
ewogICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgMCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKKyAgICByZXR1cm4g
anNCb29sZWFuKHRydWUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJ
dGVyYXRvcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0
ZUZ1bmNTZXRJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJD
b2RlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9t
Q29kZVBvaW50KEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTc2LDExICs3NiwxMSBAQCBzdGF0aWMg
TkVWRVJfSU5MSU5FIEpTVmFsdWUgc3RyaW5nRnJvbUNoCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGlmIChMSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShleGVjKSk7CisgICAgICAgIHJldHVybiBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1VJbnQzMihleGVjKSk7CisgICAgcmV0dXJuIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKGV4
ZWMpOwogfQogCiBKU0NlbGwqIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNT
dGF0ZSogZXhlYywgaW50MzJfdCBhcmcpCkBAIC04OCw3ICs4OCw3IEBAIEpTQ2VsbCogSlNDX0hP
U1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUKICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXhlYywgYXJnKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21Db2RlUG9pbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgZG91YmxlIGNvZGVQb2ludEFzRG91YmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90
Pihjb2RlUG9pbnRBc0RvdWJsZSk7CiAKQEAgLTExNSwyMyArMTE1LDIzIEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKICAgICB9CiAKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBidWlsZGVyLnRv
U3RyaW5nKCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygp
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0
aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEpTU3RyaW5nKiBz
dHIgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHN0cikpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIFN0cmluZ09i
amVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHN0cik7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3Ry
aW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKQEAgLTE0NywxMSArMTQ3LDExIEBAIEpTQ2VsbCogc3RyaW5nQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4gYXJndW1lbnQudG9TdHJpbmcoZXhlYyk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTdHJpbmdDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0
cmluZyhleGVjKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdDb25zdHJ1Y3Rv
cihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKKyAgICByZXR1cm4gc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogfQogCiBDYWxsVHlwZSBTdHJpbmdDb25zdHJ1Y3Rv
cjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxMywgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDE1IEpvcmRhbiBIYXJiYW5kIChsamhh
cmJAZ21haWwuY29tKQogICoKQEAgLTU4LDQ0ICs1OCw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFN0cmluZ1Byb3RvdHlwZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NoYXJBdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29kZVBvaW50QXQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGFzdElu
ZGV4T2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNT
dGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbGlj
ZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jU3Vic3RyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29t
cGFyZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNC
bGluayhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jQm9sZChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
Rm9udHNpemUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RhcnRz
V2l0aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jRW5kc1dpdGgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvZGVQb2lu
dEF0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0Nv
bmNhdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJ
bmRleE9mKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVy
Q2FzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNM
b2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKik7CitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTm9ybWFs
aXplKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0
ZXJhdG9yKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTQ0MSwxMCArNDQxLDEwIEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWIKICNkZWZpbmUgT1VUX09GX01FTU9SWShl
eGVjX18sIHNjb3BlX18pIFwKICAgICBkbyB7IFwKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWNfXywgc2NvcGVfXyk7IFwKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
IFwKKyAgICAgICAgcmV0dXJuIHsgfTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1zdGF0aWMg
QUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaChWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIFJlZ0V4cCogcmVnRXhwKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSByZW1vdmVV
c2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmlu
ZywgY29uc3QgU3RyaW5nJiBzb3VyY2UsIFJlZ0V4cCogcmVnRXhwKQogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CkBAIC00NzcsMTcgKzQ3NywxNyBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZW1vCiAgICAgfQogCiAgICAgaWYgKCFsYXN0SW5kZXgp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nKTsKKyAgICAgICAgcmV0dXJu
IHN0cmluZzsKIAogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdEluZGV4KSA8IHNv
dXJjZUxlbikgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXNvdXJjZVJhbmdlcy50cnlDb25zdHJ1
Y3RBbmRBcHBlbmQobGFzdEluZGV4LCBzb3VyY2VMZW4gLSBsYXN0SW5kZXgpKSkKICAgICAgICAg
ICAgIE9VVF9PRl9NRU1PUlkoZXhlYywgc2NvcGUpOwogICAgIH0KICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NwbGljZVN1YnN0cmluZ3MoZXhlYywg
c3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5kYXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCkp
KTsKKyAgICByZXR1cm4ganNTcGxpY2VTdWJzdHJpbmdzKGV4ZWMsIHN0cmluZywgc291cmNlLCBz
b3VyY2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VSYW5nZXMuc2l6ZSgpKTsKIH0KIAotc3RhdGljIEFM
V0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAorc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCiAgICAg
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIEpTVmFsdWUgc2VhcmNo
VmFsdWUsIENhbGxEYXRhJiBjYWxsRGF0YSwKICAgICBDYWxsVHlwZSBjYWxsVHlwZSwgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZywgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CkBAIC00OTUsNyAr
NDk1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogCiAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVk
IHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2Vh
cmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsK
ICAgICBib29sIGdsb2JhbCA9IHJlZ0V4cC0+Z2xvYmFsKCk7CkBAIC01MDMsNyArNTAzLDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgIGlmIChnbG9iYWwp
IHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICByZWdFeHBP
YmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lICYm
ICFyZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwpAQCAtNTI3LDcgKzUyNyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1Zh
bHVlIHJlcGwKICAgICAgICAgaW50IGFyZ0NvdW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSArIDI7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KHJlcGxhY2VWYWx1ZSk7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmdW5j
LCBhcmdDb3VudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICAgICAgICAgIGludCogb3ZlY3RvcjsKQEAgLTU1NSw3ICs1NTUsNyBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNS
ZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMu
YXBwZW5kKGpzUmVzdWx0LnRvV1RGU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgICAgICAgICAgbGFz
dEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFz
dEluZGV4OwpAQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2Fs
bCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9XVEZT
dHJpbmcoZXhlYykpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwog
ICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0SW5kZXg7CkBAIC02MzQsMTEgKzYz
NCwxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAg
ICAgICAgICAgYXJncy5hcHBlbmQoc3RyaW5nKTsKIAogICAgICAgICAgICAgICAgIEpTVmFsdWUg
cmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIFN0cmluZyByZXBsYWNlbWVu
dFN0cmluZyA9IHJlcGxhY2VtZW50LnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLmFwcGVuZChyZXBsYWNlbWVudFN0cmluZyk7Ci0gICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5sZW5n
dGgoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4IDwgcmVzdWx0LnN0YXJ0IHx8IHJl
cGxMZW4pIHsKQEAgLTY2NSwxNCArNjY1LDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29k
ZWRKU1ZhbHVlIHJlcGwKICAgICB9CiAKICAgICBpZiAoIWxhc3RJbmRleCAmJiByZXBsYWNlbWVu
dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZyk7Cisg
ICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxh
c3RJbmRleCkgPCBzb3VyY2VMZW4pIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5n
ZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxhc3RJbmRleCwgc291cmNlTGVuIC0gbGFzdEluZGV4
KSkpCiAgICAgICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4ZWMsIHNjb3BlKTsKICAgICB9CiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTcGxpY2VTdWJz
dHJpbmdzV2l0aFNlcGFyYXRvcnMoZXhlYywgc3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5k
YXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2Vt
ZW50cy5zaXplKCkpKTsKKyAgICByZXR1cm4ganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRv
cnMoZXhlYywgc3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5kYXRhKCksIHNvdXJjZVJhbmdl
cy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2VtZW50cy5zaXplKCkpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2VSZWdFeHBFbXB0eVN0cigKQEAgLTY4OCwxNCArNjg4LDE0IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3QKICAgICAgICAgc2VhcmNoVmFsdWUtPnNldExhc3RJ
bmRleChleGVjLCAwKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIHJl
bW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZtLCBleGVjLCB0aGlzVmFsdWUsIHRoaXNWYWx1ZS0+dmFs
dWUoZXhlYyksIHJlZ0V4cCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVtb3Zl
VXNpbmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShl
eGVjKSwgcmVnRXhwKSk7CiAgICAgfQogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgU3Ry
aW5nIHJlcGxhY2VtZW50U3RyaW5nID0gZW1wdHlTdHJpbmcoKTsKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCgKLSAgICAgICAgdm0sIGV4
ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVw
bGFjZW1lbnRTdHJpbmcsIEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCisgICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUsIHNl
YXJjaFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCBK
U1ZhbHVlKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nKApAQCAtNzA2LDExICs3MDYsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdAogICAgIAogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VTdHJp
bmctPnZhbHVlKGV4ZWMpOwotICAgIHJldHVybiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCi0g
ICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUsIHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5
cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCByZXBsYWNlU3RyaW5nKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCgKKyAgICAgICAgdm0sIGV4
ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVw
bGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VTdHJpbmcpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgcmVwbGFjZVVzaW5n
UmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBs
YWNlVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIH0KIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKQEAgLTcyNywxOCArNzI3
LDE4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAg
dm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFj
ZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJl
cGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgcmVwbGFjZVVzaW5nU3Ry
aW5nU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyoganNTdHJpbmcsIEpT
VmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
ID0ganNTdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFy
Y2hWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwog
CiAgICAgaWYgKG1hdGNoU3RhcnQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcpOworICAgICAgICByZXR1cm4ganNTdHJpbmc7CiAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlcGxh
Y2VWYWx1ZSwgY2FsbERhdGEpOwpAQCAtNzQ4LDExICs3NDgsMTEgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlciht
YXRjaFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVw
bGFjZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
anNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIH0KIAogICAgIFN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVlLnRv
V1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBT
dHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKICAgICBTdHJpbmcgbGVmdFBh
cnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnN0cmluZ0ltcGwsIDAs
IG1hdGNoU3RhcnQpKTsKQEAgLTc2NCw3ICs3NjQsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBF
bmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgc2l6ZV90IGxlZnRMZW5ndGggPSBzdHJpbmdJbXBsLT5s
ZW5ndGgoKSAtIG1hdGNoRW5kOwogICAgIFN0cmluZyByaWdodFBhcnQoU3RyaW5nSW1wbDo6Y3Jl
YXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKnN0cmluZ0ltcGwsIG1hdGNoRW5kLCBsZWZ0TGVuZ3Ro
KSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlND
Ojpqc1N0cmluZyhleGVjLCBsZWZ0UGFydCwgbWlkZGxlUGFydCwgcmlnaHRQYXJ0KSk7CisgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmcoZXhlYywgbGVmdFBhcnQsIG1pZGRsZVBhcnQsIHJpZ2h0UGFy
dCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja09iamVjdENvZXJjaWJsZShKU1ZhbHVl
IHRoaXNWYWx1ZSkKQEAgLTgwMCw3ICs4MDAsNyBAQCBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBy
ZXBlYXRDaGFyYWN0ZXIoCiAgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVjLCBXVEZNb3ZlKGltcGwp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBl
YXRDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcGVhdENoYXJhY3RlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIGludDMyX3QgcmVwZWF0Q291bnQ7CiAgICAgZG91YmxlIHZhbHVlID0gcmVwZWF0
Q291bnRWYWx1ZS5hc051bWJlcigpOwogICAgIGlmICh2YWx1ZSA+IEpTU3RyaW5nOjpNYXhMZW5n
dGgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIHJlcGVhdENvdW50ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUp
OwogICAgIEFTU0VSVChyZXBlYXRDb3VudCA+PSAwKTsKICAgICBBU1NFUlQoIXJlcGVhdENvdW50
VmFsdWUuaXNEb3VibGUoKSB8fCByZXBlYXRDb3VudFZhbHVlLmFzRG91YmxlKCkgPT0gcmVwZWF0
Q291bnQpOwpAQCAtODI5LDExICs4MjksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIFVDaGFyIGNoYXJhY3RlciA9IHZpZXdbMF07CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgIGlmICghKGNoYXJhY3RlciAmIH4weGZmKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXBlYXRDaGFyYWN0ZXIoKmV4ZWMsIHN0YXRpY19jYXN0PExDaGFy
PihjaGFyYWN0ZXIpLCByZXBlYXRDb3VudCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVwZWF0Q2hhcmFjdGVyKCpleGVjLCBjaGFyYWN0ZXIsIHJlcGVhdENvdW50KSk7CisgICAgICAg
IHJldHVybiByZXBlYXRDaGFyYWN0ZXIoKmV4ZWMsIHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0
ZXIpLCByZXBlYXRDb3VudCk7CisgICAgcmV0dXJuIHJlcGVhdENoYXJhY3RlcigqZXhlYywgY2hh
cmFjdGVyLCByZXBlYXRDb3VudCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbGFjZSgKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSByZXBsYWNlKAogICAgIFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1Zh
bHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBpZiAoc2VhcmNoVmFsdWUuaW5oZXJpdHMoUmVnRXhw
T2JqZWN0OjppbmZvKCkpKQpAQCAtODQxLDcgKzg0MSw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVwbGFjZSgKICAgICByZXR1cm4gcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKHZt
LCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpOwogfQogCi1BTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgcmVw
bGFjZSgKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg0OSwzNCArODQ5LDM0IEBAIEFMV0FZ
U19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZSgKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIHJldHVybiByZXBsYWNlKHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCByZXBsYWNl
VmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1JlcGxhY2VVc2luZ1JlZ0V4cChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50
b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNW
YWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghc2VhcmNoVmFs
dWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gcmVwbGFjZVVzaW5nUmVnRXhwU2Vh
cmNoKHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCBleGVjLT5hcmd1bWVudCgxKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVz
aW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCh2bSwg
ZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAt
ODg5LDEyICs4ODksMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwogICAgIAotICAgIHJldHVybiByZXBsYWNlKAorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVwbGFjZSgKICAgICAgICAgdm0sIGV4ZWMsIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpLCBKU1ZhbHVlOjpkZWNvZGUoc2VhcmNoVmFsdWUpLAotICAgICAgICBKU1Zh
bHVlOjpkZWNvZGUocmVwbGFjZVZhbHVlKSk7CisgICAgICAgIEpTVmFsdWU6OmRlY29kZShyZXBs
YWNlVmFsdWUpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTkwMywxNSArOTAzLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVlT2YuCiAKICAgICBpZiAodGhpc1ZhbHVlLmlz
U3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKIAogICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoU3Ry
aW5nT2JqZWN0OjppbmZvKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3Ry
aW5nT2JqZWN0KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKSk7CisgICAgICAgIHJldHVybiBh
c1N0cmluZ09iamVjdCh0aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCk7CiAKICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtOTIwLDIzICs5MjAsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVl
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIGF1
dG8gdmlld1dpdGhTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRoVW5k
ZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBTdHJpbmdWaWV3IHZpZXcgPSB2aWV3V2l0aFN0cmluZy52aWV3OwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IGlmIChhMC5pc1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBhMC5hc1VJbnQzMigp
OwogICAgICAgICBpZiAoaSA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbaV0pKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCB2aWV3W2ldKTsKKyAg
ICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgfQogICAgIGRvdWJsZSBkcG9z
ID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmIChkcG9zID49IDAgJiYgZHBvcyA8IHZpZXcu
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoZXhlYywgdmlld1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZHBvcyldKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0
dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRwb3MpXSk7CisgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVB
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NDUsMTkgKzk0NSwxOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmluZ1ZpZXcgdmlldyA9IHZpZXdXaXRoU3RyaW5n
LnZpZXc7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChhMC5p
c1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBhMC5hc1VJbnQzMigpOwogICAgICAg
ICBpZiAoaSA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKHZpZXdbaV0pKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05hTigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2aWV3W2ldKTsKKyAgICAgICAg
cmV0dXJuIGpzTmFOKCk7CiAgICAgfQogICAgIGRvdWJsZSBkcG9zID0gYTAudG9JbnRlZ2VyKGV4
ZWMpOwogICAgIGlmIChkcG9zID49IDAgJiYgZHBvcyA8IHZpZXcubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodmlld1tzdGF0aWNfY2FzdDxpbnQ+KGRw
b3MpXSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CisgICAgICAgIHJl
dHVybiBqc051bWJlcih2aWV3W3N0YXRpY19jYXN0PGludD4oZHBvcyldKTsKKyAgICByZXR1cm4g
anNOYU4oKTsKIH0KIAogc3RhdGljIGlubGluZSBVQ2hhcjMyIGNvZGVQb2ludEF0KGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtOTcw
LDcgKzk3MCw3IEBAIHN0YXRpYyBpbmxpbmUgVUNoYXIzMiBjb2RlUG9pbnRBdChjb25zdCAKICAg
ICByZXR1cm4gY2hhcmFjdGVyOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0NvZGVQb2ludEF0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb2RlUG9pbnRBdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC05ODAsMjcgKzk4MCwyNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmcgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50MCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmIChhcmd1bWVudDAuaXNVSW50MzIoKSkgewogICAgICAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IGFyZ3VtZW50MC5hc1VJbnQzMigpOwogICAgICAgICBpZiAocG9zaXRpb24gPCBs
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGNvZGVQ
b2ludEF0KHN0cmluZywgcG9zaXRpb24sIGxlbmd0aCkpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihj
b2RlUG9pbnRBdChzdHJpbmcsIHBvc2l0aW9uLCBsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIGRvdWJsZSBkb3VibGVQb3NpdGlvbiA9IGFyZ3VtZW50MC50b0ludGVnZXIoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoZG91YmxlUG9zaXRpb24gPj0g
MCAmJiBkb3VibGVQb3NpdGlvbiA8IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihjb2RlUG9pbnRBdChzdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
b3VibGVQb3NpdGlvbiksIGxlbmd0aCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY29kZVBvaW50QXQoc3RyaW5n
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlUG9zaXRpb24pLCBsZW5ndGgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xMDA4LDE4ICsxMDA4LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAg
IGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkg
ewogICAgICAgICBKU1N0cmluZyogc3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgYXNTdHJpbmcodGhpc1ZhbHVlKSwgc3RyKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlzVmFsdWUpLCBzdHIpOwogICAgIH0KIAogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nRnJvbUFyZ3VtZW50cyhleGVjLCB0aGlzVmFsdWUp
KTsKKyAgICByZXR1cm4ganNTdHJpbmdGcm9tQXJndW1lbnRzKGV4ZWMsIHRoaXNWYWx1ZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5k
ZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDMyLDkgKzEwMzIsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1ZSBh
MSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAgSlNTdHJpbmcqIHRoaXNKU1N0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIEpTU3RyaW5nKiBvdGhlckpTU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIHBvcyA9IDA7CiAgICAgaWYg
KCFhMS5pc1VuZGVmaW5lZCgpKSB7CkBAIC0xMDUzLDE5ICsxMDUzLDE5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICB9CiAKICAgICBpZiAodGhpc0pTU3Ry
aW5nLT5sZW5ndGgoKSA8IG90aGVySlNTdHJpbmctPmxlbmd0aCgpICsgcG9zKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgICAgIHJldHVybiBqc051
bWJlcigtMSk7CiAKICAgICBhdXRvIHRoaXNWaWV3V2l0aFN0cmluZyA9IHRoaXNKU1N0cmluZy0+
dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIGF1dG8gb3RoZXJWaWV3V2l0aFN0cmluZyA9IG90aGVySlNTdHJpbmctPnZp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBzaXplX3QgcmVzdWx0ID0gdGhpc1ZpZXdXaXRoU3RyaW5nLnZpZXcuZmluZChv
dGhlclZpZXdXaXRoU3RyaW5nLnZpZXcsIHBvcyk7CiAgICAgaWYgKHJlc3VsdCA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBq
c051bWJlcigtMSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEwNzgsMTAgKzEwNzgsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgYTEg
PSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIEpTU3RyaW5nKiB0aGlzSlNTdHJpbmcgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICB1bnNpZ25lZCBsZW4gPSB0aGlzSlNTdHJpbmctPmxlbmd0aCgpOwogICAgIEpTU3RyaW5nKiBv
dGhlckpTU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIGRvdWJsZSBkcG9zID0gYTEudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhl
Yyk7CiAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbjsKQEAgLTEwOTMsNyArMTA5Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgc3RhcnRQb3Np
dGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkcG9zKTsKIAogICAgIGlmIChsZW4gPCBvdGhl
ckpTU3RyaW5nLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigtMSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogCiAgICAgU3RyaW5nIHRo
aXNTdHJpbmcgPSB0aGlzSlNTdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBvdGhlclN0
cmluZyA9IG90aGVySlNTdHJpbmctPnZhbHVlKGV4ZWMpOwpAQCAtMTEwMywxMSArMTEwMywxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgZWxzZQogICAg
ICAgICByZXN1bHQgPSB0aGlzU3RyaW5nLnJldmVyc2VGaW5kKG90aGVyU3RyaW5nLCBzdGFydFBv
c2l0aW9uKTsKICAgICBpZiAocmVzdWx0ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKKyAgICByZXR1
cm4ganNOdW1iZXIocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMTExNiw3ICsxMTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhp
c1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VSVChsZW4gPj0g
MCk7CkBAIC0xMTM0LDEwICsxMTM0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICBpZiAodG8gPiBsZW4p
CiAgICAgICAgICAgICB0byA9IGxlbjsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N1YnN0cmluZyhleGVjLCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0bykgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkpKTsKKyAgICAg
ICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9t
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9t
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4
ZWMpKTsKKyAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAogLy8gUmV0dXJuIHRy
dWUgaW4gY2FzZSBvZiBlYXJseSByZXR1cm4gKHJlc3VsdExlbmd0aCBnb3QgdG8gbGltaXRMZW5n
dGgpLgpAQCAtMTE3NCw3ICsxMTc0LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBzcGxp
dFN0cmluZ0J5TwogfQogCiAvLyBFUyAyMS4xLjMuMTcgU3RyaW5nLnByb3RvdHlwZS5zcGxpdChz
ZXBhcmF0b3IsIGxpbWl0KQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0xMTg0LDEzICsxMTg0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcs
IGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0
IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0g
dGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBh
IG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAg
ICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9y
IHdpdGggdGhhdCBuYW1lLgogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgMCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDUu
IExldCBsZW5ndGhBIGJlIDAuCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKQEAgLTEy
MDYsMTEgKzEyMDYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIC8vICAgIG90aGVyd2lzZSBsZXQgUiA9IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAg
SlNWYWx1ZSBzZXBhcmF0b3JWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAg
IFN0cmluZyBzZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMTAuIElmIGxpbSA9PSAwLCBy
ZXR1cm4gQS4KICAgICBpZiAoIWxpbWl0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyAxMS4gSWYgc2VwYXJh
dG9yIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIGlmIChzZXBhcmF0b3JWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CkBAIC0xMjE4LDcgKzEyMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3RJbmRleChleGVjLCAwLCBqc1N0cmluZ1dpdGhSZXVzZShleGVjLCB0aGlzVmFsdWUs
IGlucHV0KSk7CiAgICAgICAgIC8vIGIuIFJldHVybiBBLgotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAg
Ly8gMTIuIElmIHMgPT0gMCwgdGhlbgpAQCAtMTIzMSw3ICsxMjMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBqc1N0cmluZ1dp
dGhSZXVzZShleGVjLCB0aGlzVmFsdWUsIGlucHV0KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzcGxpdHRpbmcgb24gdGhlIGVtcHR5IHN0
cmluZy4KQEAgLTEyNDIsMTAgKzEyNDIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgcG9zaXRpb24sIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGlu
cHV0W3Bvc2l0aW9uXSkpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICB9IHdoaWxlICgrK3Bvc2l0aW9uIDwgbGltaXQpOwogCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICAvLyAzIGNhc2VzOgpAQCAtMTI2NiwxNSArMTI2NiwxNSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGlmIChzdHJpbmdJbXBs
LT5pczhCaXQoKSkgewogICAgICAgICAgICAgaWYgKHNwbGl0U3RyaW5nQnlPbmVDaGFyYWN0ZXJJ
bXBsPExDaGFyPihleGVjLCByZXN1bHQsIHRoaXNWYWx1ZSwgaW5wdXQsIHN0cmluZ0ltcGwsIHNl
cGFyYXRvckNoYXJhY3RlciwgcG9zaXRpb24sIHJlc3VsdExlbmd0aCwgbGltaXQpKSB7CiAgICAg
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNwbGl0U3RyaW5n
QnlPbmVDaGFyYWN0ZXJJbXBsPFVDaGFyPihleGVjLCByZXN1bHQsIHRoaXNWYWx1ZSwgaW5wdXQs
IHN0cmluZ0ltcGwsIHNlcGFyYXRvckNoYXJhY3RlciwgcG9zaXRpb24sIHJlc3VsdExlbmd0aCwg
bGltaXQpKSB7CiAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIDEzLiBMZXQgcSA9
IHAuCiAgICAgICAgIHNpemVfdCBtYXRjaFBvc2l0aW9uOwpAQCAtMTI4NywxMSArMTI4NywxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAgICAv
LyAgICB0aHJvdWdoIHEgKGV4Y2x1c2l2ZSkuCiAgICAgICAgICAgICAvLyAyLiBDYWxsIENyZWF0
ZURhdGFQcm9wZXJ0eShBLCBUb1N0cmluZyhsZW5ndGhBKSwgVCkuCiAgICAgICAgICAgICByZXN1
bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJlc3VsdExlbmd0aCwganNTdWJzdHJpbmcoZXhlYywg
dGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIG1hdGNoUG9zaXRpb24gLSBwb3NpdGlvbikpOwot
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAg
ICAgLy8gMy4gSW5jcmVtZW50IGxlbmd0aEEgYnkgMS4KICAgICAgICAgICAgIC8vIDQuIElmIGxl
bmd0aEEgPT0gbGltLCByZXR1cm4gQS4KICAgICAgICAgICAgIGlmICgrK3Jlc3VsdExlbmd0aCA9
PSBsaW1pdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICAgICAgLy8gNS4gTGV0
IHAgPSBlLgogICAgICAgICAgICAgLy8gNi4gTGV0IHEgPSBwLgpAQCAtMTMwNiwxMCArMTMwNiwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgcmVzdWx0
LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1bHRMZW5ndGgrKywganNTdWJzdHJpbmcoZXhlYywg
dGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIGlucHV0Lmxlbmd0aCgpIC0gcG9zaXRpb24pKTsK
IAogICAgIC8vIDE3LiBSZXR1cm4gQS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgbGVuID0gdVN0cmluZy5s
ZW5ndGgoKTsKICAgICB9CiAKQEAgLTEzMzUsNyArMTMzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBkb3VibGUgc3RhcnQgPSBhMC50b0ludGVnZXIo
ZXhlYyk7CiAgICAgZG91YmxlIGxlbmd0aCA9IGExLmlzVW5kZWZpbmVkKCkgPyBsZW4gOiBhMS50
b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKHN0YXJ0ID49IGxlbiB8fCBsZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKKyAgICAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAg
ICAgICBzdGFydCArPSBsZW47CiAgICAgICAgIGlmIChzdGFydCA8IDApCkBAIC0xMzQ2LDExICsx
MzQ2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICB1
bnNpZ25lZCBzdWJzdHJpbmdTdGFydCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCk7CiAg
ICAgdW5zaWduZWQgc3Vic3RyaW5nTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0
aCk7CiAgICAgaWYgKGpzU3RyaW5nKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3Ro
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCB1U3RyaW5n
LCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBqc1N1
YnN0cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCk7
CisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIHVTdHJpbmcsIHN1YnN0cmluZ1N0YXJ0LCBz
dWJzdHJpbmdMZW5ndGgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0
aW5TdHJpbmdTdWJzdHJJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYnVpbHRpblN0cmluZ1N1YnN0ckludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICAvLyBAc3Vic3RySW50ZXJuYWwgc2hvdWxkIG5vdCBoYXZlIGFueSBvYnNlcnZhYmxlIHNpZGUg
ZWZmZWN0cyAoZS5nLiBpdCBzaG91bGQgbm90IGNhbGwKICAgICAvLyBHZXRNZXRob2QoLi4uLCBA
QHRvUHJpbWl0aXZlKSBvbiB0aGUgdGhpc1ZhbHVlKS4KQEAgLTEzNjQsNyArMTM2NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmkKICAgICByZXR1cm4gc3RyaW5n
UHJvdG9GdW5jU3Vic3RyKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTEzNzQsNyArMTM3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogCiAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAt
MTM4Miw3ICsxMzgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIFJFTEVBU0VfQVNTRVJUKGxlbiA+PSAwKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEw
LnRvTnVtYmVyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZG91
YmxlIGVuZDsKICAgICBpZiAoIShzdGFydCA+PSAwKSkgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIHZh
bHVlcyBvciBOYU4KICAgICAgICAgc3RhcnQgPSAwOwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBlbmQgPSBsZW47
CiAgICAgZWxzZSB7IAogICAgICAgICBlbmQgPSBhMS50b051bWJlcihleGVjKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICghKGVuZCA+PSAwKSkg
Ly8gY2hlY2sgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvciBOYU4KICAgICAgICAgICAgIGVuZCA9IDA7
CiAgICAgICAgIGVsc2UgaWYgKGVuZCA+IGxlbikKQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIH0KICAgICB1bnNpZ25l
ZCBzdWJzdHJpbmdTdGFydCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCk7CiAgICAgdW5z
aWduZWQgc3Vic3RyaW5nTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgLSBzdWJz
dHJpbmdTdGFydDsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGV4ZWMs
IGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSk7CisgICAgcmV0dXJu
IGpzU3Vic3RyaW5nKGV4ZWMsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVu
Z3RoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNU
b0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTQxNywxNiArMTQxNywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHNWYWwg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcg
bG93ZXJjYXNlZFN0cmluZyA9IHMuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOwog
ICAgIGlmIChsb3dlcmNhc2VkU3RyaW5nLmltcGwoKSA9PSBzLmltcGwoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKKyAgICAgICAgcmV0dXJuIHNWYWw7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
bG93ZXJjYXNlZFN0cmluZykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBsb3dlcmNhc2Vk
U3RyaW5nKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMTQzNSwxNiArMTQzNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHNW
YWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKICAgICBTdHJp
bmcgdXBwZXJjYXNlZFN0cmluZyA9IHMuY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgp
OwogICAgIGlmICh1cHBlcmNhc2VkU3RyaW5nLmltcGwoKSA9PSBzLmltcGwoKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKKyAgICAgICAgcmV0dXJuIHNWYWw7CiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhl
YywgdXBwZXJjYXNlZFN0cmluZykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cHBlcmNh
c2VkU3RyaW5nKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTE0NTMsMTYgKzE0NTMsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3Ry
aW5nIHN0ciA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBqc051bWJlcihDb2xsYXRvcigpLmNvbGxhdGUo
cywgc3RyKSk7CiB9CiAKICNpZiBFTkFCTEUoSU5UTCkKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0
b0xvY2FsZUNhc2UoRXhlY1N0YXRlKiBzdGF0ZSwgaW50MzJfdCAoKmNvbnZlcnRDYXNlKShVQ2hh
ciosIGludDMyX3QsIGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgY29uc3QgY2hhciosIFVFcnJvckNv
ZGUqKSkKK3N0YXRpYyBKU1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjU3RhdGUqIHN0YXRlLCBpbnQz
Ml90ICgqY29udmVydENhc2UpKFVDaGFyKiwgaW50MzJfdCwgY29uc3QgVUNoYXIqLCBpbnQzMl90
LCBjb25zdCBjaGFyKiwgVUVycm9yQ29kZSopKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0NzQsMjEg
KzE0NzQsMjEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjUwogCiAg
ICAgLy8gMi4gTGV0IFMgYmUgVG9TdHJpbmcoTykuCiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlz
VmFsdWUudG9TdHJpbmcoc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgY29uc3QgU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoc3RhdGUpOwogCiAgICAgLy8gMy4gUmV0
dXJuSWZBYnJ1cHQoUykuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8v
IE9wdGltaXphdGlvbiBmb3IgZW1wdHkgc3RyaW5ncy4KICAgICBpZiAocy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7CisgICAgICAgIHJldHVybiBzVmFs
OwogCiAgICAgLy8gNC4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxl
TGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAKICAgICAv
LyA1LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCiAgICAgc2l6ZV90IGxlbiA9IHJlcXVlc3RlZExvY2Fs
ZXMuc2l6ZSgpOwpAQCAtMTU0NCwxNyArMTU0NCwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
dG9Mb2NhbGVDYXNlKEV4ZWNTCiAKICAgICAvLyAxOC4gUmV0dXJuIEwuCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoc3RhdGUsIGxvd2Vy
KSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRlLCBsb3dlcik7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvY2Fs
ZUxvd2VyQ2FzZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDEzLjEuMiBTdHJpbmcucHJv
dG90eXBlLnRvTG9jYWxlTG93ZXJDYXNlIChbbG9jYWxlc10pCiAgICAgLy8gaHR0cDovL2VjbWEt
aW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTQwMi5odG0KICAg
ICByZXR1cm4gdG9Mb2NhbGVDYXNlKHN0YXRlLCB1X3N0clRvTG93ZXIpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9M
b2NhbGVVcHBlckNhc2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICAvLyAxMy4xLjMgU3RyaW5n
LnByb3RvdHlwZS50b0xvY2FsZVVwcGVyQ2FzZSAoW2xvY2FsZXNdKQogICAgIC8vIGh0dHA6Ly9l
Y21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDIuaHRt
CkBAIC0xNTYzLDcgKzE1NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOVEwpCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTU3MiwxMiArMTU3MiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8YmlnPiIsIHMsICI8L2JpZz4iKSk7Cisg
ICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+IiwgcywgIjwvYmln
PiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Nt
YWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNTg2LDEyICsxNTg2
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAo
IWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0
cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTYwMCwxMiArMTYwMCwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Ymxp
bms+IiwgcywgIjwvYmxpbms+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICI8Ymxpbms+IiwgcywgIjwvYmxpbms+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNjE0LDEyICsxNjE0LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiPiIsIHMsICI8L2I+IikpOwor
ICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVk
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNG
aXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjI4LDEyICsxNjI4LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNo
ZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmlu
ZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTE2NDIsMTIgKzE2NDIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGk+IiwgcywgIjwvaT4i
KSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8
L2k+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
U3RyaWtlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY1NiwxMiAr
MTY1NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFs
U3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKSk7CisgICAgcmV0dXJuIGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3ViKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2NzAsMTIgKzE2NzAsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
PHN1Yj4iLCBzLCAiPC9zdWI+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xNjg0LDEyICsxNjg0LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKKyAg
ICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+
Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9u
dGNvbG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY5OCwx
NyArMTY5OCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAg
ICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgY29sb3IgPSBhMC50
b1dURlN0cmluZyhleGVjKTsKICAgICBjb2xvci5yZXBsYWNlV2l0aExpdGVyYWwoJyInLCAiJnF1
b3Q7Iik7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1cIiIsIGNvbG9yLCAi
XCI+IiwgcywgIjwvZm9udD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmco
ZXhlYywgIjxmb250IGNvbG9yPVwiIiwgY29sb3IsICJcIj4iLCBzLCAiPC9mb250PiIpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250
c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNzE3LDcgKzE3MTcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVj
a09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAg
PSBleGVjLT5hcmd1bWVudCgwKTsKIApAQCAtMTcyOSw3ICsxNzI5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAg
ICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZl
clNpemUsIGJ1ZmZlcik7CiAgICAgICAgIGlmICghaW1wbCkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgYnVmZmVyWzBdID0gJzwnOwogICAgICAgICBidWZmZXJbMV0gPSAn
Zic7CiAgICAgICAgIGJ1ZmZlclsyXSA9ICdvJzsKQEAgLTE3NTMsMTcgKzE3NTMsMTcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBidWZmZXJbMTkg
KyBzdHJpbmdTaXplXSA9ICduJzsKICAgICAgICAgYnVmZmVyWzIwICsgc3RyaW5nU2l6ZV0gPSAn
dCc7CiAgICAgICAgIGJ1ZmZlclsyMSArIHN0cmluZ1NpemVdID0gJz4nOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwp
KSk7CisgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBs
KSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGZvbnRTaXplID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7
CiAgICAgZm9udFNpemUucmVwbGFjZVdpdGhMaXRlcmFsKCciJywgIiZxdW90OyIpOwogCiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGZvbnRTaXplLCAiXCI+IiwgcywgIjwv
Zm9udD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxmb250
IHNpemU9XCIiLCBmb250U2l6ZSwgIlwiPiIsIHMsICI8L2ZvbnQ+Iik7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTc3MiwxNyArMTc3MiwxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBTdHJpbmcgYW5jaG9yID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CiAgICAg
YW5jaG9yLnJlcGxhY2VXaXRoTGl0ZXJhbCgnIicsICImcXVvdDsiKTsKIAogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhbmNob3IsICJcIj4iLCBzLCAiPC9hPiIpKTsKKyAgICBy
ZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGFuY2hvciwg
IlwiPiIsIHMsICI8L2E+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
NzkxLDcgKzE3OTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgbGlua1RleHQg
PSBhMC50b1dURlN0cmluZyhleGVjKTsKQEAgLTE4MDQsNyArMTgwNCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBVQ2hhciogYnVmZmVyOwogICAgIGF1
dG8gaW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSwg
YnVmZmVyKTsKICAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGJ1ZmZl
clswXSA9ICc8JzsKICAgICBidWZmZXJbMV0gPSAnYSc7CiAgICAgYnVmZmVyWzJdID0gJyAnOwpA
QCAtMTgyMiw3ICsxODIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIGJ1ZmZlclsxMiArIGxpbmtUZXh0U2l6ZSArIHN0cmluZ1NpemVdID0gJy8nOwog
ICAgIGJ1ZmZlclsxMyArIGxpbmtUZXh0U2l6ZSArIHN0cmluZ1NpemVdID0gJ2EnOwogICAgIGJ1
ZmZlclsxNCArIGxpbmtUZXh0U2l6ZSArIHN0cmluZ1NpemVdID0gJz4nOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpKTsK
KyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQog
CiBlbnVtIHsKQEAgLTE4NTksMjIgKzE4NTksMjIgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRy
aW1TdHJpbmcoRXhlY1N0YQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHIuc3Vic3RyaW5n
U2hhcmluZ0ltcGwobGVmdCwgcmlnaHQgLSBsZWZ0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCB8IFRyaW1S
aWdodCkpOworICAgIHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQg
fCBUcmltUmlnaHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCkpOworICAgIHJldHVybiB0cmlt
U3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1S
aWdodCkpOworICAgIHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0
KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25l
ZChkb3VibGUgdmFsdWUsIHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgbWF4KQpAQCAtMTg4Niw3ICsx
ODg2LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjbGFtcEFuZFRydW5jYXRlVAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTg5NiwxNiArMTg5NiwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhp
c1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3Vs
YXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90
b3R5cGUuc3RhcnRzV2l0aCBjYW5ub3QgYmUgYSBSZWdFeHAiKTsKIAogICAgIFN0cmluZyBzZWFy
Y2hTdHJpbmcgPSBhMC50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwog
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKQEAgLTE5MTQsMTMgKzE5MTQsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGVsc2UgewogICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9
IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwg
MCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5oYXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNoU3RyaW5nLCBzdGFydCkpKTsKKyAgICByZXR1cm4g
anNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uaGFzSW5maXhTdGFydGluZ0F0KHNlYXJjaFN0cmlu
Zywgc3RhcnQpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNFbmRzV2l0aChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTkzMCwxNiArMTkzMCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAg
IFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0s
IGV4ZWMsIGEwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChpc1Jl
Z3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90IGJlIGEg
UmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9XVEZTdHJpbmcoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7CiAKQEAgLTE5NDksMTMgKzE5NDksMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBlbmQgPSBz
dGQ6Om1heCgwLCBlbmRQb3NpdGlvbkFyZy5hc0ludDMyKCkpOwogICAgIGVsc2UgaWYgKCFlbmRQ
b3NpdGlvbkFyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGVuZCA9IGNsYW1wQW5kVHJ1bmNh
dGVUb1Vuc2lnbmVkKGVuZFBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVu
ZGluZ0F0KHNlYXJjaFN0cmluZywgc3RkOjptaW4oZW5kLCBsZW5ndGgpKSkpOworICAgIHJldHVy
biBqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmlu
Zywgc3RkOjptaW4oZW5kLCBsZW5ndGgpKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVzSW1wbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0cmluZyBzZWFyY2hTdHJpbmcsIEpTVmFsdWUgcG9z
aXRpb25BcmcpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVzSW1w
bChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0cmlu
ZyBzZWFyY2hTdHJpbmcsIEpTVmFsdWUgcG9zaXRpb25BcmcpCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKQEAgLTE5
NjQsMTMgKzE5NjQsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aQogICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaElu
Lmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBv
c2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5jb250YWlucyhzZWFyY2hTdHJpbmcsIHRydWUs
IHN0YXJ0KSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5jb250YWlu
cyhzZWFyY2hTdHJpbmcsIHRydWUsIHN0YXJ0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTE5ODAsMTYgKzE5ODAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50
b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmlu
Y2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9
IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTE5OTcs
NyArMTk5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICByZXR1cm4gc3RyaW5nSW5jbHVkZXNJbXBsKHZtLCBleGVjLCBzdHJpbmdUb1NlYXJjaEluLCBz
ZWFyY2hTdHJpbmcsIHBvc2l0aW9uQXJnKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ0luY2x1ZGVzSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjAwNiwxMSArMjAwNiwxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpCiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlz
VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJp
bmcgc2VhcmNoU3RyaW5nID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVu
dCgxKTsKIApAQCAtMjAxOCw3ICsyMDE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBidWlsdGluU3RyaQogICAgIHJldHVybiBzdHJpbmdJbmNsdWRlc0ltcGwodm0sIGV4ZWMsIHN0
cmluZ1RvU2VhcmNoSW4sIHNlYXJjaFN0cmluZywgcG9zaXRpb25BcmcpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGVyYXRvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMDI3LDggKzIwMjcsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU3RyaW5nSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBl
eGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c3RyaW5nSXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgc3RyaW5nKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBy
ZXR1cm4gSlNTdHJpbmdJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmpzQ2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLT5zdHJpbmdJdGVyYXRvclN0cnVjdHVyZSgpLCBzdHJpbmcpOwogfQogCiBz
dGF0aWMgSlNWYWx1ZSBub3JtYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVQ2hhciogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSkKQEAgLTIw
NTksNyArMjA1OSw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTm9ybWFsaXplKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNOb3JtYWxpemUoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjA2OCwxNCArMjA2OCwxNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmluZ1ZpZXcgdmlldyA9IHZpZXdXaXRoU3RyaW5nLnZp
ZXc7CiAKICAgICBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBW
ZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQu
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0
cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAg
IGlmIChmb3JtU3RyaW5nID09ICJORkMiKQogICAgICAgICAgICAgZm9ybSA9IFVOT1JNX05GQzsK
QEAgLTIwOTAsNyArMjA5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICB9CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShub3JtYWxpemUoZXhlYywgdmlldy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgdmll
dy5sZW5ndGgoKSwgZm9ybSkpOworICAgIHJldHVybiBub3JtYWxpemUoZXhlYywgdmlldy51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKSwgdmlldy5sZW5ndGgoKSwgZm9ybSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDEzLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAx
MywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTYxLDEwICs2MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0CiAKIFN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCwgU3RyaW5nVmlldyBzb3VyY2UsIGNvbnN0IGludCogb3ZlY3Rvciwg
UmVnRXhwKiByZWcpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1JlcGVhdENoYXJhY3RlcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGVhdENoYXJhY3RlcihFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ1N1YnN0ckludGVy
bmFsKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3Ry
aW5nSW5jbHVkZXNJbnRlcm5hbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBi
dWlsdGluU3RyaW5nU3Vic3RySW50ZXJuYWwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYnVpbHRpblN0cmluZ0luY2x1ZGVzSW50ZXJuYWwoRXhlY1N0YXRlKik7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
WXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlGb3Io
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVj
dG9yRm9yKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xD
b25zdHJ1Y3RvcktleUZvcihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC03NSwxMiArNzUsMTIgQEAg
dm9pZCBTeW1ib2xDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVgogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3ltYm9sKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFN5bWJvbChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBkZXNjcmlwdGlvbiA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmIChkZXNjcmlwdGlvbi5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCkpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMsIGRlc2NyaXB0aW9uLnRvU3RyaW5n
KGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpKTsKKyAg
ICByZXR1cm4gU3ltYm9sOjpjcmVhdGUoZXhlYywgZGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykp
OwogfQogCiBDb25zdHJ1Y3RUeXBlIFN5bWJvbENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKQpAQCAtOTQsMzYgKzk0LDM2IEBAIENhbGxUeXBlIFN5
bWJvbENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSgKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JGb3Io
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9y
Rm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHJp
bmdLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIFN0cmluZyBzdHJpbmcgPSBzdHJpbmdLZXktPnZhbHVlKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuc3ltYm9sUmVn
aXN0cnkoKS5zeW1ib2xGb3JLZXkoc3RyaW5nKSkpOworICAgIHJldHVybiBTeW1ib2w6OmNyZWF0
ZShleGVjLT52bSgpLCBleGVjLT52bSgpLnN5bWJvbFJlZ2lzdHJ5KCkuc3ltYm9sRm9yS2V5KHN0
cmluZykpOwogfQogCiBjb25zdCBjaGFyKiBjb25zdCBTeW1ib2xLZXlGb3JUeXBlRXJyb3IgPSAi
U3ltYm9sLmtleUZvciByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIHN5bWJv
bCI7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlG
b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVj
dG9yS2V5Rm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUg
c3ltYm9sVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXN5bWJvbFZhbHVlLmlz
U3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChTeW1ib2xLZXlGb3JUeXBlRXJyb3IpKSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFN5bWJv
bEtleUZvclR5cGVFcnJvcikpOwogCiAgICAgU3ltYm9sSW1wbCYgdWlkID0gYXNTeW1ib2woc3lt
Ym9sVmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpOwogICAgIGlmICghdWlkLnN5bWJvbFJlZ2lz
dHJ5KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJUKHVpZC5zeW1ib2xSZWdp
c3RyeSgpID09ICZ2bS5zeW1ib2xSZWdpc3RyeSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKGV4ZWMsIHZtLnN5bWJvbFJlZ2lzdHJ5KCkua2V5Rm9yU3ltYm9sKHVpZCkp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdm0uc3ltYm9sUmVnaXN0cnkoKS5rZXlGb3JT
eW1ib2wodWlkKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDggKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3lt
Ym9sUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3ltYm9sUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CiAKIH0K
IApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFN5bWJvbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mCiBzdGF0aWMgY29uc3QgY2hhciogU3ltYm9sVG9TdHJpbmdUeXBlRXJyb3IgPSAiU3ltYm9s
LnByb3RvdHlwZS50b1N0cmluZyByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhIHN5bWJvbCBvciBh
IHN5bWJvbCBvYmplY3QiOwogc3RhdGljIGNvbnN0IGNoYXIqIFN5bWJvbFZhbHVlT2ZUeXBlRXJy
b3IgPSAiU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIGEg
c3ltYm9sIG9yIGEgc3ltYm9sIG9iamVjdCI7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3ltYm9sUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTg4LDE3ICs4OCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN5bWJvbFByb3RvCiAgICAgICAgIHN5bWJvbCA9IGFzU3ltYm9sKGpzQ2FzdDxTeW1ib2xPYmpl
Y3QqPih0aGlzT2JqZWN0KS0+aW50ZXJuYWxWYWx1ZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBzeW1ib2wtPmRlc2NyaXB0
aXZlU3RyaW5nKCkpKTsKKyAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHN5bWJv
bC0+ZGVzY3JpcHRpdmVTdHJpbmcoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3ltYm9sUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAg
IGlmICh0aGlzVmFsdWUuaXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aGlzVmFsdWUpOworICAgICAgICByZXR1cm4gdGhpc1ZhbHVlOwogCiAgICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIFN5bWJvbFZhbHVlT2ZUeXBlRXJyb3IpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG8KICAgICBpZiAoIXRoaXNPYmplY3Qt
PmluaGVyaXRzKFN5bWJvbE9iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUsIFN5bWJvbFZhbHVlT2ZUeXBlRXJyb3IpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8U3ltYm9sT2JqZWN0Kj4odGhpc09iamVjdCktPmlu
dGVybmFsVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzQ2FzdDxTeW1ib2xPYmplY3QqPih0aGlzT2Jq
ZWN0KS0+aW50ZXJuYWxWYWx1ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDMz
ICs0NSwzMyBAQCB2b2lkIFdlYWtNYXBDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIERvbnRFbnVtIHwgUmVhZE9ubHkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2Vha01hcChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWFrTWFwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5u
b3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJXZWFrTWFwIikpOwor
ICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCAiV2Vha01hcCIpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXZWFrTWFwKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2Vha01hcChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRl
cm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1
Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFw
U3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNXZWFr
TWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUoZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7
CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVy
YWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHdlYWtNYXApOworICAgICAgICByZXR1cm4gd2Vha01hcDsKIAogICAgIEpTVmFsdWUgYWRkZXJG
dW5jdGlvbiA9IHdlYWtNYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
c2V0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQ2FsbERhdGEgYWRk
ZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9
IGdldENhbGxEYXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAg
aWYgKGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgIGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKQEAgLTk0LDcgKzk0LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBjYWxsKGV4ZWMs
IGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5jdGlvbkNhbGxE
YXRhLCB3ZWFrTWFwLCBhcmd1bWVudHMpOwogICAgIH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh3ZWFrTWFwKTsKKyAgICByZXR1cm4gd2Vha01hcDsKIH0KIAogQ29uc3RydWN0VHlw
ZSBXZWFrTWFwQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
Ni0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEwICszNCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29u
c3QgQ2xhc3NJbmZvIFdlYWtNYXBQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYWtNYXAiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYWtNYXBQcm90b3R5cGUpIH07CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxl
dGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90
b0Z1bmNXZWFrTWFwR2V0KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEhhcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBTZXQoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxldGUoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtN
YXBIYXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVu
Y1dlYWtNYXBTZXQoRXhlY1N0YXRlKik7CiAKIHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewpAQCAtNzAs
MzYgKzcwLDM2IEBAIHN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0V2Vha01hcERhdGEoQ2FsbEYKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90
b0Z1bmNXZWFrTWFwRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPnJlbW92ZShhc09iamVj
dChrZXkpKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5y
ZW1vdmUoYXNPYmplY3Qoa2V5KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByb3RvRnVuY1dlYWtNYXBHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEdldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAg
ICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
SlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICgha2V5LmlzT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXAtPmdldChhc09iamVjdChrZXkpKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBtYXAtPmdldChhc09iamVjdChr
ZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFw
SGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVu
Y1dlYWtNYXBIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgV2Vha01hcERhdGEqIG1h
cCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPmNvbnRhaW5zKGFzT2JqZWN0KGtleSkpKSk7CisgICAg
cmV0dXJuIGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPmNvbnRhaW5zKGFzT2JqZWN0
KGtleSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFr
TWFwU2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3Rv
RnVuY1dlYWtNYXBTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2Fs
bEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTEwNywxMiArMTA3LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9G
dW5jV2UKICAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9
PSAhbWFwKTsKICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1
ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICgha2V5LmlzT2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byBzZXQgYSBub24tb2JqZWN0
IGtleSBpbiBhIFdlYWtNYXAiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byBzZXQgYSBub24t
b2JqZWN0IGtleSBpbiBhIFdlYWtNYXAiKSk7CiAgICAgbWFwLT5zZXQodm0sIGFzT2JqZWN0KGtl
eSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDUsMzMgKzQ1LDMzIEBAIHZvaWQgV2Vha1NldENvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbigKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgRG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWFrU2V0KEV4ZWNTdGF0ZSog
ZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYWtTZXQoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dD
b25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwg
IldlYWtTZXQiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFz
RnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJXZWFrU2V0Iik7CiB9CiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdlYWtTZXQoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXZWFrU2V0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxP
YmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQgPSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFr
U2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUod2Vha1NldCk7CisgICAgICAgIHJldHVybiB3ZWFrU2V0OwogCiAgICAg
SlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5hZGQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5j
dGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNh
bGxEYXRhKTsKICAgICBpZiAoYWRkZXJGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlOjpOb25l
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRlcmFibGUs
IFsmXShWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0VmFsdWUpIHsKQEAgLTgwLDcg
KzgwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAg
ICBjYWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJG
dW5jdGlvbkNhbGxEYXRhLCB3ZWFrU2V0LCBhcmd1bWVudHMpOwogICAgIH0pOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrU2V0KTsKKyAgICByZXR1cm4gd2Vha1NldDsKIH0KIAog
Q29uc3RydWN0VHlwZSBXZWFrU2V0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIFdlYWtTZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYWtTZXQiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYWtTZXRQcm90b3R5cGUpIH07
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRE
ZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
cm90b0Z1bmNXZWFrU2V0SGFzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldERlbGV0ZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhhcyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChFeGVj
U3RhdGUqKTsKIAogdm9pZCBXZWFrU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CkBAIC02OCwyNSArNjgsMjUgQEAgc3Rh
dGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRgogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxl
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5j
V2Vha1NldERlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBXZWFrTWFwRGF0YSog
bWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
ICAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGtleS5pc09iamVjdCgpICYmIG1hcC0+cmVtb3ZlKGFzT2JqZWN0KGtleSkpKSk7CisgICAg
cmV0dXJuIGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPnJlbW92ZShhc09iamVjdChr
ZXkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1Nl
dEhhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1
bmNXZWFrU2V0SGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFdlYWtNYXBEYXRhKiBt
YXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGtleSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5jb250YWlucyhhc09iamVjdChrZXkpKSkpOworICAg
IHJldHVybiBqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5jb250YWlucyhhc09iamVj
dChrZXkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vh
a1NldEFkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90
b0Z1bmNXZWFrU2V0QWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNh
bGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC05NCwxMiArOTQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1
bmNXZQogICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09
ICFtYXApOwogICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVl
IGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmplY3Qg
a2V5IHRvIGEgV2Vha1NldCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxs
RnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1v
YmplY3Qga2V5IHRvIGEgV2Vha1NldCIpKTsKICAgICBtYXAtPnNldCh2bSwgYXNPYmplY3Qoa2V5
KSwganNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKIH0KIAog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsMTUg
KzYxLDE1IEBAIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6YWRkRnVuY3Rpb24oVk0KICAgICBw
dXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudHMsIGlkZW50aWZpZXIuc3RyaW5nKCksIGZ1bmN0aW9uKSk7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRl
KikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmFzaChFeGVjU3RhdGUq
KQogewogICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkRGR1RydWUoRXhlY1N0YXRlKikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25ERkdUcnVlKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGZhbHNl
KTsKIH0KIAogY2xhc3MgQ2FsbGVyRnJhbWVKSVRUeXBlRnVuY3RvciB7CkBAIC05NiwyMiArOTYs
MjIgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEpJVENvZGU6OkpJVFR5cGUgbV9qaXRUeXBlOwog
fTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25MTGludFRy
dWUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxMaW50VHJ1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFleGVjKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yIGZ1bmN0b3I7CiAgICAg
ZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Cisg
ICAgcmV0dXJuIGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25KSVRUcnVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoIWV4ZWMpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIENhbGxlckZyYW1lSklUVHlwZUZ1bmN0b3IgZnVuY3Rv
cjsKICAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZ1bmN0b3Iuaml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihmdW5jdG9yLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtMTIxLDEwICsxMjEsMTAgQEAgdm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjpnYyhF
eGVjU3RhdGUqIAogICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KICAg
ICAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0
YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU0RvbGxhclZNUHJvdG90eXBlOjpnYyhleGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCiB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmVkZW5HQyhFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0xMzQsMTAgKzEzNCwxMCBAQCB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmVk
ZW5HQyhFeGVjU3RhCiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2Nv
cGU6OkVkZW4pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRWRlbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0RvbGxhclZNUHJvdG90
eXBlOjplZGVuR0MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogYm9vbCBKU0RvbGxhclZNUHJv
dG90eXBlOjppc0luSGVhcChIZWFwKiBoZWFwLCB2b2lkKiBwdHIpCkBAIC0yNTQsMTQgKzI1NCwx
NCBAQCBDb2RlQmxvY2sqIEpTRG9sbGFyVk1Qcm90b3R5cGU6OmNvZGVCbG9jCiAgICAgcmV0dXJu
IGZ1bmN0b3IuY29kZUJsb2NrOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3JGcmFtZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGlmICghdmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIGluYyB0aGUgZnJhbWUgbnVtYmVyIGJlY2F1c2UgdGhlIGNhbGxl
ciB3b3VsZCBjb25zaWRlcgogICAgIC8vIGl0cyBvd24gZnJhbWUgYXMgZnJhbWUgMC4gSGVuY2Us
IHdlIG5lZWQgZGlzY291bnQgdGhlIGZyYW1lIGZvciB0aGlzCkBAIC0yNzEsNyArMjcxLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgIC8vIFRob3VnaCBD
b2RlQmxvY2sgaXMgYSBKU0NlbGwsIGl0IGlzIG5vdCBzYWZlIHRvIHJldHVybiBpdCBkaXJlY3Rs
eSBiYWNrIHRvIEpTIGNvZGUKICAgICAvLyBhcyBpdCBpcyBhbiBpbnRlcm5hbCB0eXBlIHRoYXQg
dGhlIEpTIGNvZGUgY2Fubm90IGhhbmRsZS4gSGVuY2UsIHdlIGZpcnN0IGVuY29kZSB0aGUKICAg
ICAvLyBDb2RlQmxvY2sqIGFzIGEgZG91YmxlIHRva2VuICh3aGljaCBpcyBzYWZlIGZvciBKUyBj
b2RlIHRvIGhhbmRsZSkgYmVmb3JlIHJldHVybmluZyBpdC4KLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoYml0d2lzZV9jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2spKSkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaykpKSk7CiB9CiAKIHN0YXRpYyBDb2RlQmxv
Y2sqIGNvZGVCbG9ja0Zyb21BcmcoRXhlY1N0YXRlKiBleGVjKQpAQCAtMzA2LDQyICszMDYsNDIg
QEAgc3RhdGljIENvZGVCbG9jayogY29kZUJsb2NrRnJvbUFyZyhFeGVjUwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CiAgICAgV1RGOjpTdHJpbmdQ
cmludFN0cmVhbSBzdHJlYW07CiAgICAgaWYgKGNvZGVCbG9jaykgewogICAgICAgICBzdHJlYW0u
cHJpbnQoKmNvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoZXhlYywgc3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHN0cmVhbS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFNvdXJjZUZvcihFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRT
b3VyY2VGb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y29kZUJsb2NrRnJvbUFyZyhleGVjKTsKICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICBjb2Rl
QmxvY2stPmR1bXBTb3VyY2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Qnl0ZUNvZGVG
b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJs
b2NrRnJvbUFyZyhleGVjKTsKICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICBjb2RlQmxvY2st
PmR1bXBCeXRlY29kZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvV1RGU3RyaW5n
KGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAg
ZGF0YUxvZyhhcmdTdHIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBjbGFzcyBQcmludEZy
YW1lRnVuY3RvciB7CkBAIC00MDQsMjAgKzQwNCwyMCBAQCB2b2lkIEpTRG9sbGFyVk1Qcm90b3R5
cGU6OnByaW50U3RhY2soQ2FsCiAgICAgSlNDOjpwcmludFN0YWNrKHRvcENhbGxGcmFtZSwgMCk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRD
YWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBXaGVuIHRo
ZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50
IHRoZWlyCiAgICAgLy8gb3duIGZyYW1lLiBTbyBza2lwIDEgZm9yIHRoaXMgZnJhbWUuCiAgICAg
cHJpbnRDYWxsRnJhbWUoZXhlYywgMSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0YWNrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBXaGVuIHRoZSBjYWxsZXJzIGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIHByaW50IHRoZQogICAgIC8vIHN0YWNrIHN0YXJ0aW5n
IHRoZWlyIG93biBmcmFtZS4gU28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgogICAgIHByaW50U3Rh
Y2soZXhlYywgMSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogdm9pZCBKU0RvbGxhclZNUHJvdG90eXBl
OjpwcmludFZhbHVlKEpTVmFsdWUgdmFsdWUpCkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBKU0Rv
bGxhclZNUHJvdG90eXBlOjpwcmludFZhbHVlKEpTVgogICAgIGRhdGFMb2codmFsdWUpOwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZhbHVlKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7
CkBAIC00MzQsMTMgKzQzNCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jCiAgICAgICAgIHN0cmVhbS5wcmludChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSk7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
c3RyZWFtLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3RyZWFtLnRv
U3RyaW5nKCkpOwogfQogCiAjaWYgIVBMQVRGT1JNKFdJTikKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0UElEKEV4ZWNTdGF0ZSopCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0UElEKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihnZXRwaWQoKSkpOworICAgIHJldHVybiBqc051bWJl
cihnZXRwaWQoKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXZWJBc3NlbWJseS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDE2ICs0
MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKEpTV2ViQXNzZW1ibHkpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKik7CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIGNh
dGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9t
aXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisg
ICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICAvLyBG
SVhNRTogTWFrZSB0aGlzIHRydWx5IGFzeW5jaHJvbm91czoKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE2CkBAIC01NywxNCArNTksMTQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIGlmIChFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgY2F0Y2hTY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBwcm9taXNlLT5yZWplY3QoZXhlYywgZXhjZXB0
aW9uKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkp
OworICAgICAgICByZXR1cm4gcHJvbWlzZS0+cHJvbWlzZSgpOwogICAgIH0KIAogICAgIHByb21p
c2UtPnJlc29sdmUoZXhlYywgbW9kdWxlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBy
b21pc2UtPnByb21pc2UoKSk7CisgICAgcmV0dXJuIHByb21pc2UtPnByb21pc2UoKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1
bmMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzIsMTEgKzc0LDExIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICBzaXplX3QgYnl0ZU9m
ZnNldDsKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21C
dWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVT
aXplKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFdhc206OlBsYW4gcGxh
bigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiAgICAgLy8gRklYTUU6IFdlIG1p
Z2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0
IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
cGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHBs
YW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTV2Vi
QXNzZW1ibHk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5KSB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDIxICs0NCwyMSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlDb21waWxlRXJyb3JDCiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBhdXRvKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmpzQ2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoc3RhdGUsIHZt
LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoc3RhdGUs
IHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIikpOworICAgIHJldHVy
biB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgIldlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciIpOwogfQogCiBXZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTMgKzQ2LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19pbmZvID0geyAiV2ViQXNz
ZW1ibHlGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoV2ViQXNzZW1ibHlGdW5jdGlvbikgfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0
aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUo
KSk7CiAgICAgaWYgKCF3YXNtRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhw
ZWN0ZWQgYSBXZWJBc3NlbWJseSBmdW5jdGlvbiIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVu
dGltZVR5cGVGb3JWYWx1ZShleGVjLT5qc0NhbGxlZSgpKSkpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVk
IGEgV2ViQXNzZW1ibHkgZnVuY3Rpb24iLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVU
eXBlRm9yVmFsdWUoZXhlYy0+anNDYWxsZWUoKSkpKTsKICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICBj
b25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CiAKQEAgLTYzLDE0ICs2MywxNCBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAgICAgICBpZiAoc2ln
bmF0dXJlLT5hcmd1bWVudChhcmdJbmRleCkgPT0gV2FzbTo6STY0KSB7CiAgICAgICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgICAgICAgICAgIldl
YkFzc2VtYmx5IGZ1bmN0aW9uIHdpdGggYW4gaTY0IGFyZ3VtZW50IGNhbid0IGJlIGNhbGxlZCBm
cm9tIEphdmFTY3JpcHQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206
Okk2NCkgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwKICAgICAg
ICAgICAgICAgICAiV2ViQXNzZW1ibHkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGk2NCBjYW4ndCBi
ZSBjYWxsZWQgZnJvbSBKYXZhU2NyaXB0Iik7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOworICAgICAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcik7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbAogICAgICAgICBjYXNlIFdhc206OkFueWZ1bmM6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGFyZyk7CiAgICAgfQog
CkBAIC0xMjQsMjAgKzEyNCwyMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsCiAKICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSB7CiAgICAgY2Fz
ZSBXYXNtOjpWb2lkOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBjYXNlIFdhc206OkkzMjoK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQz
Ml90PihyYXdSZXN1bHQpKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxp
bnQzMl90PihyYXdSZXN1bHQpKTsKICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwdXJpZnlOYU4oc3RhdGljX2Nhc3Q8ZG91YmxlPihi
aXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KHJhd1Jlc3VsdCkpKSkpKTsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihzdGF0aWNfY2FzdDxkb3VibGU+KGJp
dHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3UmVzdWx0KSkpKSk7CiAg
ICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIocHVyaWZ5TmFOKGJpdHdpc2VfY2FzdDxkb3VibGU+KHJhd1Jlc3VsdCkpKSk7CisgICAgICAg
IHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oYml0d2lzZV9jYXN0PGRvdWJsZT4ocmF3UmVzdWx0
KSkpOwogICAgIGNhc2UgV2FzbTo6STY0OgogICAgIGNhc2UgV2FzbTo6RnVuYzoKICAgICBjYXNl
IFdhc206OkFueWZ1bmM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUzLDcgKzUzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdAogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTYyLDI4ICs2MiwyOCBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgLy8gSWYgbW9kdWxl
T2JqZWN0IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBpbnN0YW5jZSwgYSBUeXBlRXJyb3Ig
aXMgdGhyb3duLgogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICgh
anNNb2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmly
c3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5
Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhl
Yy0+YXJndW1lbnQoMCkpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJn
dW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVs
ZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhlYy0+YXJn
dW1lbnQoMCkpKSk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICAvLyBJZiB0
aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9y
dE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFs
dWUgaW1wb3J0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCogaW1w
b3J0T2JqZWN0ID0gaW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBvcnRB
cmd1bWVudC5pc1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3Rh
bmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5k
ZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSk7CiAKICAgICAvLyBJZiB0
aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2Jq
ZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCiAgICAgaWYgKG1vZHVs
ZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFz
c2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1v
ZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9y
VmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vj
b25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1
c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSk7CiAKICAgICBJZGVu
dGlmaWVyIG1vZHVsZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0
ZU5hbWU6OkRlc2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKICAgICBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0
cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0
dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0
TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB7CiAgICAgICAgIC8vIEFsd2F5cyBzdGFydCB3aXRoIGEgZHVtbXkgTWVt
b3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVs
bHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCiAgICAgICAg
IFdhc206Ok1lbW9yeSBtZW1vcnk7CkBAIC0xMDEsMjIgKzEwMSwyMiBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1
bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1l
KS4KICAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0
KGV4ZWMsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5
cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKSk7CisgICAgICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRl
ciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKIAogICAgICAgICAv
LyAzLiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUp
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1
bGVWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBv
cnQuZmllbGQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAgICAgICBjYXNlIFdhc206
OkV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBm
dW5jdGlvbiBpbXBvcnQ6CiAgICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZh
bHNlLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxs
YWJsZSIpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxlIikpKTsKICAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICAgICAgLy8gaWkuIElmIHYg
aXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydCA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNz
ZW1ibHlGdW5jdGlvbio+KGNlbGwpKSB7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSBpbXBvcnRlZEV4cG9ydC0+c2lnbmF0
dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3Rl
ZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmIChpbXBvcnRl
ZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRl
ZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlv
bidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5j
dGlvbidzIHNpZ25hdHVyZSIpKSk7CiAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUg
YmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlpaS4gT3Ro
ZXJ3aXNlOgpAQCAtMTQzLDIyICsxNDMsMjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29ucwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpz
RHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odmFsdWUpOwogICAgICAgICAgICAgLy8g
aS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3QsIHRocm93IGEgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiVGFi
bGUgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWJsZSIpKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxl
IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpOwogCiAg
ICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50
YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKICAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbElu
aXRpYWwgPSB0YWJsZS0+c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBl
eHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBwcm92aWRlZCBhbiAnaW5p
dGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRp
YWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKIAogICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFhY3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9k
dWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgZG9lcyBub3QgaGF2
ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKmFjdHVhbE1heGltdW0gPiAq
ZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVy
YWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUn
cyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiSW1wb3J0ZWQgVGFibGUncyAnbWF4aW11bScgaXMg
bGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNzUsMjMgKzE3MywyMSBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2
YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9y
eSBvYmplY3QsIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgaWYg
KCFtZW1vcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9m
IFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4
ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9m
IFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CiAKICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBl
eHBlY3RlZEluaXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOwogICAg
ICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbEluaXRpYWwgPSBtZW1vcnktPm1lbW9yeSgp
LT5pbml0aWFsKCk7CiAgICAgICAgICAgICBpZiAoYWN0dWFsSW5pdGlhbCA8IGV4cGVjdGVkSW5p
dGlhbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhh
dCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2
bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0
IGlzIHRvbyBzbWFsbCIpKSk7CiAKICAgICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhw
ZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgewogICAg
ICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1v
cnkoKS0+bWF4aW11bSgpOwogICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRp
ZCBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRv
ZXMiKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBt
b2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4cGVjdGVkTWF4aW11bSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0cyAnbWF4
aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhpbXVtJyIpKSkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4
cGVjdGVkICdtYXhpbXVtJyIpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgpAQCAtMjA1LDcgKzIwMSw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAg
IEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFi
aWxpdHkgPT0gV2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwogICAgICAgICAgICAgLy8gaWkuIElm
IFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJl
IGEgbnVtYmVyIikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIG11c3QgYmUgYSBudW1iZXIiKSkpOwogICAgICAg
ICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMuCiAg
ICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJ
bmRleF0udHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CkBAIC0yMzgsNyArMjM0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAg
ICAgYm9vbCBmYWlsZWQ7CiAgICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5KG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhp
bXVtKCksIGZhaWxlZCk7CiAgICAgICAgICAgICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCiAgICAgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CiAg
ICAgICAgIH0KQEAgLTI3OCwyMiArMjc0LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5z
dGFuY2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwogICAgIEpTVmFsdWUg
c3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0
b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNz
ZW1ibHkuSW5zdGFuY2UiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNh
bGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuSW5zdGFu
Y2UiKTsKIH0KIAogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
ZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDIxICs0NCwyMSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zCiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRlKiBzdGF0
ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUxp
bmtFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUg
bWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rh
cmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoc3RhdGUsIHZtLCBzdHJ1Y3R1cmUs
IG1lc3NhZ2UpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJl
dHVybiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoc3RhdGUsIHZtLCBzdHJ1Y3R1cmUs
IG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUxpbmtFcnJvcihFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3Ry
dWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2Vi
QXNzZW1ibHkuTGlua0Vycm9yIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lkxp
bmtFcnJvciIpOwogfQogCiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3Nl
bWJseUxpbmtFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDgsMTggKzQ4LDE4IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnUKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnko
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50IikpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhwZWN0cyBl
eGFjdGx5IG9uZSBhcmd1bWVudCIpKSk7CiAKICAgICBKU09iamVjdCogbWVtb3J5RGVzY3JpcHRv
cjsKICAgICB7CiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICAgICAgaWYgKCFhcmd1bWVudC5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhwZWN0cyBpdHMg
Zmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAgICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50
IHRvIGJlIGFuIG9iamVjdCIpKSk7CiAgICAgICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nhc3Q8
SlNPYmplY3QqPihhcmd1bWVudCk7CiAgICAgfQogCkBAIC02NywxMSArNjcsMTEgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIHsKICAgICAgICAgSWRlbnRp
ZmllciBpbml0aWFsID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CiAg
ICAgICAgIEpTVmFsdWUgbWluU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMs
IGluaXRpYWwpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgICAgIHVpbnQzMl90IHNpemUgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIG1p
blNpemVWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5N
ZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKSk7CisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSAnaW5pdGlhbCcgcGFnZSBj
b3VudCBpcyB0b28gbGFyZ2UiKSkpOwogICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gV2FzbTo6
UGFnZUNvdW50KHNpemUpOwogICAgIH0KIApAQCAtNzksMTkgKzc5LDE5IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIg
bWF4aW11bSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bSIpOwogICAgICAg
ICBib29sIGhhc1Byb3BlcnR5ID0gbWVtb3J5RGVzY3JpcHRvci0+aGFzUHJvcGVydHkoZXhlYywg
bWF4aW11bSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG1heFNp
emVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAg
ICAgICB1aW50MzJfdCBzaXplID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBtYXhTaXplVmFs
dWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICAgICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5Lk1lbW9yeSAnbWF4aW11bScgcGFnZSBjb3VudCBpcyB0b28gbGFyZ2UiKSkpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSAnbWF4
aW11bScgcGFnZSBjb3VudCBpcyB0b28gbGFyZ2UiKSkpOwogICAgICAgICAgICAgbWF4aW11bVBh
Z2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKIAogICAgICAgICAgICAgaWYgKGluaXRp
YWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAotICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21heGlt
dW0nIHBhZ2UgY291bnQgbXVzdCBiZSB0aGFuIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUg
J2luaXRpYWwnIHBhZ2UgY291bnQiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIidtYXhpbXVtJyBwYWdlIGNvdW50IG11c3QgYmUg
dGhhbiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwYWdlIGNvdW50Iikp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk5LDE2ICs5OSwxNiBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgYm9vbCBmYWlsZWQ7
CiAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNv
dW50LCBmYWlsZWQpOwogICAgIGlmIChmYWlsZWQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9y
eSkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1v
dmUobWVtb3J5KSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCAiV2ViQXNzZW1ibHkuTWVtb3J5IikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiV2ViQXNz
ZW1ibHkuTWVtb3J5Iik7CiB9CiAKIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IqIFdlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsK
IH0KIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIgpAQCAtNTEs
NyArNTEsNyBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5CiBAZW5k
CiAqLwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJv
dG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOwogCiBBTFdBWVNfSU5MSU5FIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIGdldE1lbW9yeShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7CkBAIC02MCwyNCArNjAsMjQgQEAgQUxXQVlTX0lOTElORSBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBnZXRNZQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odmFsdWUpOyAKICAgICBpZiAoIW1lbW9yeSkgewot
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCAKKyAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5wcm90b3R5cGUuYnVmZmVyIGdl
dHRlciBjYWxsZWQgd2l0aCBub24gV2ViQXNzZW1ibHkuTWVtb3J5IHx0aGlzfCB2YWx1ZSIpKSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gbWVtb3J5OwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5j
QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGdldE1lbW9yeShleGVjLCBl
eGVjLT50aGlzVmFsdWUoKSk7IAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lbW9yeS0+YnVmZmVyKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBtZW1vcnktPmJ1
ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQ
cm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTIs
NyArOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAg
V2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVjLCBkZWx0YSwgc2hvdWxk
VGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3Vs
dC5wYWdlQ291bnQoKSkpOworICAgIHJldHVybiBqc051bWJlcihyZXN1bHQucGFnZUNvdW50KCkp
OwogfQogCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDIxICs1MywyMSBAQCBjb25z
dCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1CiAgQGVuZAogICovCiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1
bGUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNz
U3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
TW9kdWxlKGV4ZWMsIHN0cnVjdHVyZSkpOworICAgIHJldHVybiBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgc3RydWN0dXJlKTsKIH0KIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0
YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1i
bHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKKyAgICByZXR1cm4g
dGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsICJXZWJBc3NlbWJseS5Nb2R1bGUiKTsKIH0KIAogSlNWYWx1ZSBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjMwLDggKzIzMCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwogICAgICAgICAgICAgICAg
IGlmIChmdW5jdGlvbkluZGV4IDwgbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJF
bGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGggYW4gaW1wb3J0LiBUaGlzIGlz
IG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRWxlbWVu
dCBpcyBzZXR0aW5nIHRoZSB0YWJsZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhpcyBpcyBub3Qg
eWV0IGltcGxlbWVudGVkLiBGSVhNRS4iKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxl
LT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDE4ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlGdW5jdGlvblZhbGlkYXRlKEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5RnVuY3Rpb25WYWxp
ZGF0ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSB2YWxp
ZGF0ZSBmdW5jdGlvbiBwcm9wZXJ0eSIpKSkpOworICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihz
dGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gcHJvcGVydHkiKSkp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUZ1
bmN0aW9uQ29tcGlsZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseUZ1bmN0aW9uQ29tcGlsZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRl
LCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9l
c24ndCB5ZXQgaW1wbGVtZW50IHRoZSBjb21waWxlIGZ1bmN0aW9uIHByb3BlcnR5IikpKSk7Cisg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBjb21w
aWxlIGZ1bmN0aW9uIHByb3BlcnR5IikpKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDIxICs0NCwyMSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JDCiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBhdXRvKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmpzQ2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoc3RhdGUsIHZt
LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoc3RhdGUs
IHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIikpOworICAgIHJldHVy
biB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIpOwogfQogCiBXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNyArNDUs
NyBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjCiAgQGVuZAogICov
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTU0LDUxICs1NCw1MSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgewogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhw
ZWN0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMgZmlyc3Qg
YXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IikpKTsKICAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9
IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIElk
ZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbGVt
ZW50Iik7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudFZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+
Z2V0KGV4ZWMsIGVsZW1lbnRJZGVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgU3RyaW5nIGVsZW1lbnRTdHJpbmcgPSBlbGVtZW50
VmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGVsZW1lbnRTdHJpbmcgIT0gImFueWZ1bmMi
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5UYWJsZSBleHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAn
YW55ZnVuYyciKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJs
eS5UYWJsZSBleHBlY3RzIGl0cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAnYW55
ZnVuYyciKSkpOwogICAgIH0KIAogICAgIElkZW50aWZpZXIgaW5pdGlhbElkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7CiAgICAgSlNWYWx1ZSBpbml0aWFsU2l6
ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWxJZGVudCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgdWludDMyX3QgaW5pdGlh
bCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgaW5pdGlhbFNpemVWYWx1ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtYXhpbXVtOwogICAgIElkZW50aWZpZXIgbWF4aW11bUlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1l
bW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW1JZGVudCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKGhhc1Byb3BlcnR5KSB7
CiAgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4
ZWMsIG1heGltdW1JZGVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICAgICAgbWF4aW11bSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywg
bWF4U2l6ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogCiAgICAgICAgIGlmIChpbml0aWFsID4gKm1heGltdW0pIHsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwK
LSAgICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21h
eGltdW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSAnaW5p
dGlhbCcgcHJvcGVydHkiKSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCInbWF4aW11bScgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwcm9wZXJ0eSIpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
V2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOwor
ICAgIHJldHVybiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRpYWws
IG1heGltdW0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5
LlRhYmxlIikpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LlRhYmxlIik7CiB9CiAK
IFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlUYWJsZVBy
b3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw1MCArNTYsNTAgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseVRhYmxlKgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y0xlbmd0aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y0xlbmd0aChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRh
YmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xlbmd0aChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3Rv
RnVuY0xlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
V2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+dGhpc1Zh
bHVlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0YWJsZS0+c2l6ZSgp
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVy
biBqc051bWJlcih0YWJsZS0+c2l6ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHVpbnQzMl90IGluZGV4ID0gdG9O
b25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaWYgKCF0YWJsZS0+Z3JvdyhpbmRleCkp
IHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKICAgICAgICAgICAg
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnBy
b3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSIpKSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0
YWJsZSA9IGdldFRhYmxlKGV4ZWMsIHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRv
Tm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlmIChpbmRleCA+PSB0YWJsZS0+c2l6
ZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCiAgICAgICAg
ICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFi
bGUucHJvdG90eXBlLmdldCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzaXplIG9m
IHRoZSB0YWJsZSIpKSk7CkBAIC0xMDcsMTcgKzEwNywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgfQogCiAgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1Nl
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVjLCB2bSwgZXhlYy0+dGhp
c1ZhbHVlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odmFs
dWUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2Vi
QXNzZW1ibHkKICAgICB9CiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3JhcHBpbmdVaW50
MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogCiAgICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsKICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKQEAgLTE0Myw3ICsxNDMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgICAgIHRhYmxlLT5z
ZXRGdW5jdGlvbih2bSwgaW5kZXgsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSogV2ViQXNzZW1ibHlUYWJsZVByb3Rv
dHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NTcgQEAKKzIw
MTctMDEtMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVj
ZSB0aGUgdXNlIG9mIEVuY29kZWRKU1ZhbHVlLCBhbmQgdXNlIEpTVmFsdWUgaW5zdGVhZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjY1OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlbGV0ZWQgcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yLCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IsIGFu
ZAorICAgICAgICBjcmVhdGVKU0J1aWx0aW4gYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgdXNl
ZCBhbnl3aGVyZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIHBhdGNoIG9u
bHkgcmVmYWN0b3JzIGNvZGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93R2V0
dGVyVHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoR2V0dGVy
VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93VGhpc1R5cGVFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpyZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsbFRocm93VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydERl
cHJlY2F0ZWRHZXR0ZXJFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6Y2FsbFByb21p
c2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6Y2FsbE9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyOjpzZXRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6YXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVKU0J1aWx0aW4pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlOjpjYWxsVGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNCdWls
dGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNhbGxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpt
YWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VHZXR0
ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01JdGVy
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6SXRlcmF0b3JUcmFpdHM+OjpuZXh0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dXZWJLaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRp
bmdDYWxsZXI8SlNFdmVudFRhcmdldD46OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTSFRNTEVsZW1lbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6
Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJlcGxhY2VDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnaW5FbGVtZW50UHJv
cGVydHlHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbFBsdWdpbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmg6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRl
cik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SlNXb3JrZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0
dXBNb2R1bGVTY3JpcHRIYW5kbGVycyk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJl
ZENsb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6
CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlvbk9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6
ZXJGdW5jdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb25JdGVyYWJsZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0
cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
SW50ZXJmYWNlTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0ludGVyZmFjZU5hbWVDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3Rv
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURP
TU9iamVjdD46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0
aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2
ZURPTU9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEFjdGl2
ZURPTU9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rp
b25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlQ2FsbGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46OmNhc3RGb3JBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VS
ZWFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFj
dGlvbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9u
c0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zQXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVh
Y3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFj
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9uc0NhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2Fz
dEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJp
bmdDYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDdXN0b21O
YW1lZEdldHRlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5j
dGlvbkNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERP
TUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46
OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQW55QXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCb29sZWFuQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RET01KSVRCeXRlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RET01KSVRPY3RldEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUU2hvcnRB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVExvbmdBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0RE9NSklUTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVu
c2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEZsb2F0
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklURG91YmxlQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUVXN2U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVROb2RlQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dERPTUpJVE5vZGVOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklU
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RE9NSklUQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25HZXRBdHRyaWJ1dGVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJv
dG90eXBlRnVuY3Rpb25JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uSXRlbUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25H
ZXRFbGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lQ2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjpjYXN0
Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3RydWN0b3JB
dHRyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0Rm9yQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV4Y2VwdGlvbk5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYXN0Rm9yQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RQdWJs
aWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFs
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb25DYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZp
Y1dvcmxkQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQ2FsbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYXN0
Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aG9kMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvbkltcGxlbWVudHNNZXRob2QzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhv
ZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2QxQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDJD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25TdXBwbGVtZW50YWxNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0
aG9kNCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJdGVyYWJsZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25TeW1i
b2xJdGVyYXRvckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJsZVByb3Rv
dHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXMpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNo
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjxK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0
ZVJXQ3VzdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBl
RnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENhbGxlcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9yQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE5vZGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROb2Rl
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21p
c2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdv
cmtlclByb21pc2VQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRv
SlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FzdEZvckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqRW51bUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQnl0ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqT2N0ZXRBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpMb25nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpMb25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alVuZm9yZ2VhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpV
c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqRGljdGlvbmFyeUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVs
bGFibGVEaWN0aW9uYXJ5QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbXBsZW1l
bnRhdGlvbkVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialhNTE9iakF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVm
bGVjdGVkQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVk
VVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakN1c3RvbUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqT25mb28pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqT253ZWJraXRmb28p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqQW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak9iamVjdEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9iakltbXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alN0cmF3YmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0cnVjdG9y
U3RhdGljU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0U3Vi
T2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iakVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakJ5dGVBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9jdGV0QXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQ2xhbXBlZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5z
aWduZWRTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0F0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0
T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialhNTE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakN1c3RvbUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT25mb28pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqT253ZWJraXRmb28pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhD
YWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFj
a0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iak11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpJbW11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJh
d2JlcnJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iaklkKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialB1
dEZvcndhcmRzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNw
ZWNpZmljTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV29ybGRTcGVjaWZpY01ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1l
dGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVN
ZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CeXRlTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9k
V2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Mb25nTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTG9uZ01ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0NhbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZENhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhB
cmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0
aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSW5zdGFuY2VG
dW5jdGlvblVuZm9yZ2VhYmxlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iaklu
c3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29s
dmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJp
bmdNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdT
cGVjaWFsTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFy
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJn
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmRE
ZWZhdWx0VmFsdWVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93c0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxl
VVNWU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
Z0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhCeXRlU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3Ry
aW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Nh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlh
bGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNlcmlhbGl6ZWRWYWx1ZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25n
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
dXN0b21NZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNB
bmRQcml2YXRlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJl
bW92ZUV2ZW50TGlzdGVuZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZENhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9i
aik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZU9iakNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVP
YmpFeGNlcHRpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFy
Z3VtZW50Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5k
b3dBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhDYWxsZXJXaW5kb3dBcmd1bWVudENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0Nh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1
ZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0
aW9uYWxBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9taWNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdB
bmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZh
dWx0VmFsdWVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVk
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNO
dWxsQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1w
dHlTdHJpbmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNW
U3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91Ymxl
SXNOYU4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxGbG9hdElzTmFOQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0NhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbExvbmdMb25nSXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm9DYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxVbnNpZ25lZExvbmdMb25nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJv
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUNhbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNl
cXVlbmNlSXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eUNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xl
YW4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxCb29sZWFuQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxC
b29sZWFuSXNGYWxzZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUNhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE9iamVjdENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbE51bGxhYmxlV3JhcHBlckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJl
Y29yZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tB
bmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rp
b25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
RnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxB
cmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tB
cmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE1ldGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbE1ldGhvZDFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDJDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhv
ZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE1ldGhvZDNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkNh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q2KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Q2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDgpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kOENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTApOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTBDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMTMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMTNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFt
ZXRlcjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJDYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5p
b24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGlu
Z3Vpc2hpbmdVbmlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
MkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5p
b25zMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRp
c3Rpbmd1aXNoaW5nVW5pb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1
aXNoaW5nVW5pb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVV
bmlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGVVbmlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRp
b25hbFVuaW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxh
YmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlcjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0
aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25E
aXN0aW5ndWlzaGluZ1BhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhF
bmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
VW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRv
bVN0cmluZ0xpc3RGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRX
aXRob3V0TnVsbGFibGVTZXF1ZW5jZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVy
dDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0
MUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
dmVydDJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0Myk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29udmVydDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0NENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRh
YmxlUG9pbnRGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9yYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9yYW5nZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2RDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1l
dGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljRG91YmxlTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5p
b25NZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25BbnkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25B
bnlDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbldpdGhGbG9hdEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
RnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25DYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50
QXJndW1lbnRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Q2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VP
dmVybG9hZGVkRnVuY3Rpb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
ZEZ1bmN0aW9uMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9u
MlByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRp
Y1Byb21pc2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblByb21pc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rp
b25XaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJv
bWlzZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDFD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE92ZXJsb2FkMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zlcmxv
YWQxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zlcmxv
YWQyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Q2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFs
RGljdGlvbmFyeVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJTb3Vy
Y2VQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
NCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzNSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlMSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25O
YW1lZEl0ZW1DYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9u
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJz
dFN0cmluZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRp
b25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
b3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5pbmdDYWxsZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9i
aik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xv
bmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZz
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlw
ZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
U2V0U2hhZG93Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTZXF1ZW5jZUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VP
Zk51bGxhYmxlc0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNl
T2ZOdWxsYWJsZXNBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9m
VW5pb25zQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25VbmlvbkFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uVW5pb25BcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXApOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJs
ZVBvaW50RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0
aW9uMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0
UmVxdWlyZXNJbmNsdWRlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVy
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVu
dGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVy
KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAqIGJyaWRnZS9y
dW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdl
dHRlcik6CisgICAgICAgIChKU0M6OmNhbGxSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6ZmFsbGJhY2tPYmplY3RH
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6ZmllbGRHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6bWV0aG9kR2V0dGVy
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNhbGxSdW50aW1lT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OmNhbGxSdW50aW1lQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJyaWRn
ZS9ydW50aW1lX29iamVjdC5oOgorCiAyMDE3LTAxLTAzICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMTAyMjYpOiBmYXN0L2hpc3Rvcnkv
YmFjay1mcm9tLXBhZ2Utd2l0aC1mb2N1c2VkLWlmcmFtZS5odG1sIGNyYXNoZXMgdW5kZXIgR3Vh
cmRNYWxsb2MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNh
bXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNo
YWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTgwNSw3ICs4MDUsNyBAQCBib29s
IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUCiAgICAgcmV0dXJuICF0YXJnZXQg
fHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1
cml0eUVycm9yKTsKIH0KICAgICAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKQorc3RhdGljIEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoRXhlY1N0
YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQogewogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVz
c2FnZSk7CiB9CkBAIC04MjksMTkgKzgyOSw2IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEFyZ3VtZW50
TXVzdEJlKFN0cmluZ0IKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwog
fQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRv
IGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJm
YWNlTmFtZSwgIiBvYmplY3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci19Ci0gICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRv
IHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNl
TmFtZSwgIiBvYmplY3QuIikpOwotfQotCiB2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQogewogICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwpAQCAtODY4LDcgKzg1NSw3IEBAIHZvaWQgdGhyb3dTZWN1
cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiAKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsK
IH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRWYWx1ZXMpCitKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoRXhlY1N0
YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQog
ewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBhcHBlbmRBcmd1bWVudE11c3RCZShi
dWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgZnVuY3Rpb25OYW1lKTsKQEAgLTg3Nyw3ICs4NjQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVFCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lKQorSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihFeGVj
U3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAg
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKQEAgLTg4NSw3ICs4NzIsNyBAQCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGCiAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQorSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNj
b3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3Vt
ZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwpAQCAtOTA0LDcg
Kzg5MSw3IEBAIHZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3QKICAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VO
YW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgIiwgZXhwZWN0ZWRUeXBlKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1
aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlO
YW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCitKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1i
ZXJUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwpAQCAtOTE2LDcgKzkwMyw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclQKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUpCitKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVj
dXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKIHsKICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0
cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNv
bnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwogfQpAQCAtOTM2LDEyICs5MjMsMTIgQEAgU3RyaW5n
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IAogICAgIHJldHVybiBtYWtlU3RyaW5n
KCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4g
b25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKIH0KIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCitKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEV4
ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogewogICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQ
cm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCitKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJU
eXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKIH0KQEAgLTk1
NywxOCArOTQ0LDE4IEBAIFN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2gK
ICAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkgY2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAn
LicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK0pTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEV4ZWNT
dGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCitKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCiB7CiAgICAgcHJvbWlzZS5yZWpl
Y3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0
aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK0pTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCiB7CiAgICAgcmV0dXJuIGNyZWF0
ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVz
c2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CiB9CkBAIC05OTMsMTIgKzk4MCwxMiBA
QCB2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9wZXJhdG9yIikp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIHJldHVybiBqc051
bGwoKTsKIH0KIAogQ2FsbFR5cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0
Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgpAQCAtMTEzLDkgKzExMyw2IEBAIERPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpT
Qzo6RXhlY1N0YXQKIERPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7
CiBET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CiAKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOwotCiB2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKIFdF
QkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKIApAQCAtMTMxLDIxICsxMjgsMjEgQEAgdm9pZCB0aHJvd1NlY3VyaXR5
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLAogV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CiB2b2lkIHRocm93
VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51
bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbklu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0
ZWRWYWx1ZXMpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25J
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciog
YXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNv
bnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVu
YXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSB0aHJvd0Fy
Z3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0
QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CitXRUJDT1JF
X0VYUE9SVCBKU0M6OkpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VY
UE9SVCBKU0M6OkpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNo
YXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworSlNDOjpKU1Zh
bHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUpOwogCiBTdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CiBTdHJpbmcgbWFrZVRo
aXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
cm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNP
UkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihE
ZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBv
cGVyYXRpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBK
U0M6OkpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBl
RXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CiAKIFdFQkNPUkVfRVhQT1JU
IEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3Qm
LCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUq
IGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBj
b25zdCBKU0M6OkNsYXNzSW5mbyopOwpAQCAtMTU2LDggKzE1Myw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU08KIAogdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVu
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpT
Qzo6SlNGdW5jdGlvbiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlv
biYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCiBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZm
ZXIqKTsKIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciopOwogCkBAIC0zMTQsNyAr
MzA5LDcgQEAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgYwogU3RyaW5n
IHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKIEF0b21pY1N0cmluZyBw
cm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CiAKLXRlbXBsYXRl
PEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlv
biwgaW50IGxlbmd0aD4gSlNDOjpKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiAK
IGVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHks
IFJlamVjdFByb21pc2UsIEFzc2VydCB9OwpAQCAtMzIzLDE0ICszMTgsMTQgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgSlNDbGFzcz4KIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKICAgICB1c2luZyBBdHRy
aWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKICAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJG
dW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRo
cm93U2NvcGUmKTsKLSAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5j
b2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7
Ci0gICAgdXNpbmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVk
SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
LCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9
IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUm
KTsKKyAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLSAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0NsYXNz
KiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBz
dGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwogCiAgICAg
dGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxs
UHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHN0YXRlKTsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CkBAIC0zNDQsNyArMzM5LDcgQEAgc3Ry
dWN0IEJpbmRpbmdDYWxsZXIgewogICAgIH0KIAogICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxl
ckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxk
VGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsT3BlcmF0
aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwpAQCAtMzYyLDE4ICszNTcsMTggQEAgc3Ry
dWN0IEJpbmRpbmdDYWxsZXIgewogICAgIH0KIAogICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRl
ckZ1bmN0aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQorICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwogICAgICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4g
KHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykgPyB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwotICAgICAgICByZXR1cm4gc2V0dGVyKCpzdGF0
ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93
U2NvcGUpOworICAgICAgICByZXR1cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHZhbHVl
LCB0aHJvd1Njb3BlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5j
dGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdGF0
ZSk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUt
PnZtKCkpOwpAQCAtMzgzLDkgKzM3OCw5IEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21p
c2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQo
KSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09i
amVjdCwgdGhyb3dTY29wZSkpOworICAgICAgICByZXR1cm4gZ2V0dGVyKCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHRocm93U2NvcGUpOwogICAgIH0KIH07CiAKQEAgLTQ1MiwxMyArNDQ3LDYgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSgogICAgIHJldHVybiBKU0M6Ompz
Q2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFz
cz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5z
dG9yZWRQcm90b3R5cGUoKSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNz
OjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9i
YWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFy
Z3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLSAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKLX0KLQogaW5saW5lIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciopCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJP
d25lcigpOwpAQCAtNzYyLDkgKzc1MCw5IEBAIGlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWMKICAgICByZXR1cm4gQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/
IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogfQogCi10
ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBK
U0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwg
aW50IGxlbmd0aD4gSlNDOjpKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVu
Z3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworICAgIHJl
dHVybiBKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVu
Y3Rpb24pOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24m
JiBleGNlcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00MywxMiArNDMsMTIgQEAgcHJpdmF0
ZToKICAgICAvLyBVc3VhbGx5IGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xhc3Mu
CiAgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKSB7IH0KIAotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgewogICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgSlNDOjp0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbGxlZ2FsIGNvbnN0cnVjdG9y
IikpOwotICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc051bGwoKSk7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6
OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYgY2FsbERh
dGEpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXN1YWxseSBkZWZpbmVkIGZv
ciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgogICAgIHZvaWQgaW5pdGlhbGl6ZVByb3BlcnRp
ZXMoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0JikgeyB9CiAgICAgLy8gTXVzdCBiZSBkZWZp
bmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0
ZSopOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gY2xhc3MgSlNET01OYW1lZENv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IHsKQEAgLTEwMSw3
ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVj
aWFsaXphdGlvbiBjbGFzcy4KICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpIHsgfQogICAgIC8vIE11c3QgYmUgZGVmaW5lZCBmb3IgZWFj
aCBzcGVjaWFsaXphdGlvbiBjbGFzcy4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTQnVpbHRpbkNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IHsKQEAgLTEyMCwxMCArMTIwLDEw
IEBAIHByaXZhdGU6CiAgICAgSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgOiBCYXNlKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KSB7IH0KICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0
YXRlKik7CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChK
U0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0Jik7Ci0gICAgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0Kik7Cisg
ICAgSlNDOjpKU1ZhbHVlIGNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNP
YmplY3QmKTsKKyAgICBKU0M6OkpTVmFsdWUgY2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU09iamVjdCopOwogCiAgICAgLy8gVXN1YWxseSBkZWZpbmVkIGZvciBlYWNoIHNw
ZWNpYWxpemF0aW9uIGNsYXNzLgogICAgIHZvaWQgaW5pdGlhbGl6ZVByb3BlcnRpZXMoSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0JikgeyB9CkBAIC0yMjAsMTMgKzIyMCwxMyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgdm9pZCBKCiAgICAgaW5pdGlhbGl6ZVByb3BlcnRp
ZXModm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+Ojpj
YWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiBvYmpl
Y3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIEpTQnVp
bHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTT2JqZWN0JiBvYmplY3QpCiB7CiAgICAgY2FsbEZ1bmN0aW9uV2l0aEN1
cnJlbnRBcmd1bWVudHMoc3RhdGUsIG9iamVjdCwgKmluaXRpYWxpemVGdW5jdGlvbigpKTsKLSAg
ICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoJm9iamVjdCk7CisgICAgcmV0dXJuICZvYmpl
Y3Q7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpT
Q2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxKU0RPTU9iamVjdEluc3BlCiAgICAgcmV0dXJuIEpTQ2xhc3M6
OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2Jh
bE9iamVjdCksICZnbG9iYWxPYmplY3QsIEpTQ2xhc3M6OkRPTVdyYXBwZWQ6OmNyZWF0ZSgqY29u
dGV4dCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+Ojpj
b25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQnVpbHRpbkNvbnN0cnVjdG9y
PEpTQ2xhc3M+Ojpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VS
VChzdGF0ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IEpTQzo6anNDYXN0PEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAwOSwgMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDggKzQ4LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
a2VUaGlzVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWls
dGlucyhFeGVjU3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRE9NR2xvYmFsT2JqZWN0Ojpz
X2luZm8gPSB7ICJET01HbG9iYWxPYmplY3QiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0RPTUdsb2JhbE9iamVjdCkgfTsKIApAQCAtNzEsNyArNzEs
NyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogCiAgICAgc3RhdGlj
X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjZWxsKS0+SlNET01HbG9iYWxPYmplY3Q6On5KU0RP
TUdsb2JhbE9iamVjdCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VU
aGlzVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKiBleGVjU3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWFrZVRoaXNUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqIGV4ZWNT
dGF0ZSkKIHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5h
cmd1bWVudENvdW50KCkgPT0gMik7CkBAIC04MiwxMCArODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cAogICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgYXV0byBmdW5jdGlvbk5hbWUgPSBleGVjU3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwogICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlwZUVycm9y
KGV4ZWNTdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgp
LmRhdGEoKSwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgcmV0dXJuIGNyZWF0
ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VO
YW1lLnV0ZjgoKS5kYXRhKCksIGZ1bmN0aW9uTmFtZS51dGY4KCkuZGF0YSgpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRlclR5cGVFcnJvckZvckJ1aWx0aW5z
KEV4ZWNTdGF0ZSogZXhlY1N0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJU
eXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqIGV4ZWNTdGF0ZSkKIHsKICAgICBBU1NFUlQo
ZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0gMik7
CkBAIC05Niw3ICs5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRl
clQKICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1
dG8gYXR0cmlidXRlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3Ry
aW5nKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBtYWtlR2V0dGVy
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRhKCksIGF0dHJpYnV0ZU5h
bWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWNTdGF0
ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgp
LCBhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6YWRkQnVpbHRpbkdsb2JhbHMoVk0mIHZtKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBDYW5vbiwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG5leHQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbmV4dChKU0M6OkV4ZWNTdGF0ZSopOwogCiBwcml2
YXRlOgogICAgIEpTRE9NSXRlcmF0b3JQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogQmFzZSh2bSwgc3RydWN0dXJlKSB7IH0KQEAgLTI0MiwxNiArMjQy
LDE2IEBAIEpTQzo6SlNWYWx1ZSBKU0RPTUl0ZXJhdG9yPEpTV3JhcHBlciwgSXQKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTV3Jh
cHBlciwgSXRlcmF0b3JUcmFpdHM+OjpuZXh0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRE9NSXRlcmF0b3JQcm90b3R5cGU8SlNXcmFwcGVyLCBJ
dGVyYXRvclRyYWl0cz46Om5leHQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgYXV0byBpdGVyYXRvciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9NSXRl
cmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz4qPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgbmV4
dCgpIG9uIGEgbm9uLUl0ZXJhdG9yIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgbmV4dCgpIG9u
IGEgbm9uLUl0ZXJhdG9yIG9iamVjdCIpKTsKIAotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVu
Y29kZShpdGVyYXRvci0+bmV4dCgqc3RhdGUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm5leHQo
KnN0YXRlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVy
YXRvclRyYWl0cz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzQsNyArMTc0LDcg
QEAgUmVmPERlZmVycmVkUHJvbWlzZT4gY3JlYXRlRGVmZXJyZWRQcm9taQogICAgIHJldHVybiBE
ZWZlcnJlZFByb21pc2U6OmNyZWF0ZShkb21XaW5kb3csICpkZWZlcnJlZCk7CiB9CiAKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQorSlNDOjpKU1ZhbHVl
IGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBBU1NFUlQoc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUg
Y3JlYXRlUmVqZWN0ZWRQcm9taXMKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7
CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZWplY3Rpb25WYWx1ZSk7CiAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGwoJnN0YXRlLCByZWplY3RGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBwcm9taXNlQ29uc3RydWN0b3IsIGFyZ3VtZW50cykpOworICAgIHJldHVybiBjYWxsKCZz
dGF0ZSwgcmVqZWN0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgcHJvbWlzZUNvbnN0cnVj
dG9yLCBhcmd1bWVudHMpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBwYXJzZUFz
SlNPTihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihSZWY8RGVm
ZXJyZWQKIHZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoUmVmPERlZmVycmVkUHJv
bWlzZT4mJiwgQXJyYXlCdWZmZXIqKTsKIHZvaWQgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZm
ZXIoUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiB2b2lkIHJl
amVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQmKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
Y3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IFN0cmluZyYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmKTsKIAogdXNpbmcgUHJvbWlzZUZ1bmN0
aW9uID0gdm9pZChKU0M6OkV4ZWNTdGF0ZSYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCkBA
IC0yMjcsNyArMjI3LDcgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9u
KAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotdXNpbmcgQmlu
ZGluZ1Byb21pc2VGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKK3VzaW5nIEJpbmRpbmdQcm9taXNlRnVuY3Rpb24g
PSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
IHRlbXBsYXRlPEJpbmRpbmdQcm9taXNlRnVuY3Rpb24gYmluZGluZ0Z1bmN0aW9uPgogaW5saW5l
IHZvaWQgYmluZGluZ1Byb21pc2VGdW5jdGlvbkFkYXB0ZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMTAsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0RPTVdp
bmRvd0luc3RhbmNlRnVuY3Rpb25TaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uU2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0ZSopOwogCiB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKQEAgLTU1LDEyICs1NSwxMiBAQCB2b2lkIEpTRE9N
V2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiB9CiAKICNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93V2ViS2l0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitz
dGF0aWMgSlNWYWx1ZSBqc0RPTVdpbmRvd1dlYktpdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNET01XaW5kb3cqIGNhc3RlZFRoaXMg
PSB0b0pTRE9NV2luZG93KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU0RPTVdp
bmRvdyogY2FzdGVkVGhpcyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKICAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBjYXN0ZWRU
aGlzLT53cmFwcGVkKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndlYmtpdE5hbWVzcGFjZSgp
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiB0b0pTKGV4ZWMs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkud2Via2l0
TmFtZXNwYWNlKCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MSwxMCArNTEsMTAgQEAgcHJpdmF0ZToKIHN0ZDo6dW5pcXVlX3B0cjxKU0V2ZW50VGFy
Z2V0V3JhcHBlcj4ganNFdmVudFRhcmdldENhc3QoSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSk7CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdDYWxsZXI8SlNFdmVudFRhcmdldD4gewotICAgIHVz
aW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTRXZlbnRUYXJnZXRXcmFwcGVyKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAg
dXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0V2ZW50VGFyZ2V0V3JhcHBlciosIEpTQzo6VGhyb3dTY29wZSYpOwogCiAgICAgdGVt
cGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyPgotICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2Fs
bE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RhdGUpOwogICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKQEAgLTY1LDcgKzY1LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ0NhbGxlcjxKU0V2ZW50VAogCiAgICAgICAgIGlmIChh
dXRvKiB3aW5kb3cgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkudG9ET01XaW5kb3coKSkgewogICAg
ICAgICAgICAgaWYgKCF3aW5kb3ctPmZyYW1lKCkgfHwgIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgKndpbmRvdywgVGhyb3dTZWN1cml0eUVycm9y
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09i
amVjdC5nZXQoKSwgdGhyb3dTY29wZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsMTMgKzUxLDEzIEBAIHN0
YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlJiBzdGEKIH0KIAogLy8gSFRNTEFsbENv
bGxlY3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBib3RoIGdldCBhbmQg
Y2FsbC4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29s
bGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICAvLyBEbyBub3QgdXNlIHRoaXNPYmogaGVyZS4gSXQgY2FuIGJlIHRoZSBKU0hUTUxEb2N1
bWVudCwgaW4gdGhlIGRvY3VtZW50LmZvcm1zKGkpIGNhc2UuCiAgICAgSlNIVE1MQWxsQ29sbGVj
dGlvbioganNDb2xsZWN0aW9uID0ganNDYXN0PEpTSFRNTEFsbENvbGxlY3Rpb24qPihleGVjLT5q
c0NhbGxlZSgpKTsKQEAgLTY4LDIzICs2OCwyMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAg
ICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAgICAgICAg
IFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKnN0cmluZy5pbXBsKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+
Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24uaXRlbShpbmRleC52YWx1ZSgpKSkpOworICAgICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29s
bGVjdGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKTsKIAogICAgICAgICAvLyBTdXBwb3J0IGZvciBk
b2N1bWVudC5pbWFnZXMoJzxuYW1lPicpIGV0Yy4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShuYW1lZEl0ZW1zKCpleGVjLCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgc3RyaW5nKSkpOworICAgICAgICByZXR1cm4gbmFtZWRJdGVtcygqZXhlYywganND
b2xsZWN0aW9uLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0cmluZykpOwogICAgIH0K
IAogICAgIC8vIFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRl
bSB3ZSB3YW50CiAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqZXhlYy0+YXJndW1lbnQoMSku
dG9XVEZTdHJpbmcoZXhlYykuaW1wbCgpKSkgewogICAgICAgICBpZiAoYXV0byogaXRlbSA9IGNv
bGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0cmluZywgaW5kZXgudmFsdWUoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5n
bG9iYWxPYmplY3QoKSwgKml0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGpz
Q29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksICppdGVtKTsKICAgICB9CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCiBDYWxsVHlwZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwq
LCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNIVE1MRWxlbWVudChFeGVjU3RhdGUmIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNIVE1MRWxlbWVudChFeGVjU3RhdGUmIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTc3LDM0ICs3NywzNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
CiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1MRWxl
bWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50U3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4ZWMsIG5l
d1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVs
ZW1lbnQ6OmNyZWF0ZShlbGVtZW50SW50ZXJmYWNlLT5uYW1lKCksIGRvY3VtZW50KTsKICAgICAg
ICAgZWxlbWVudC0+c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgqZWxlbWVudEludGVyZmFjZSk7
CiAgICAgICAgIGF1dG8qIGpzRWxlbWVudCA9IEpTSFRNTEVsZW1lbnQ6OmNyZWF0ZShuZXdFbGVt
ZW50U3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQuZ2V0KCkpOwogICAgICAgICBjYWNo
ZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBlbGVtZW50LnB0cigpLCBqc0VsZW1lbnQp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRWxlbWVudCk7CisgICAgICAgIHJl
dHVybiBqc0VsZW1lbnQ7CiAgICAgfQogCiAgICAgRWxlbWVudCogZWxlbWVudFRvVXBncmFkZSA9
IGVsZW1lbnRJbnRlcmZhY2UtPmxhc3RFbGVtZW50SW5Db25zdHJ1Y3Rpb25TdGFjaygpOwogICAg
IGlmICghZWxlbWVudFRvVXBncmFkZSkgewogICAgICAgICB0aHJvd0ludmFsaWRTdGF0ZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBpbnN0YW50aWF0ZSBhIGN1c3RvbSBl
bGVtZW50IGluc2lkZSBpdHMgb3duIGNvbnN0cmN1dG9yIGR1cmluZyB1cGdyYWRlcyIpKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSBlbGVtZW50V3JhcHBlclZh
bHVlID0gdG9KUygmZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksICplbGVtZW50
VG9VcGdyYWRlKTsKICAgICBBU1NFUlQoZWxlbWVudFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsK
IAogICAgIEpTVmFsdWUgbmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIEpTT2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRX
cmFwcGVyVmFsdWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJP
YmplY3QsICZleGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQg
Ki8pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBlbGVtZW50SW50ZXJm
YWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNrKCk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVsZW1lbnRXcmFwcGVyVmFsdWUpOworICAgIHJldHVybiBl
bGVtZW50V3JhcHBlclZhbHVlOwogfQogCiBKU1Njb3BlKiBKU0hUTUxFbGVtZW50OjpwdXNoRXZl
bnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00
Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2
ZXIoRXhlY1N0YXRlJiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTTXV0
YXRpb25PYnNlcnZlcihFeGVjU3RhdGUmIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTYxLDcgKzYx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIEpTT2Jq
ZWN0KiBqc09ic2VydmVyID0gYXNPYmplY3QodG9KU05ld2x5Q3JlYXRlZCgmZXhlYywganNDb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIE11dGF0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShXVEZNb3Zl
KGNhbGxiYWNrKSkpKTsKICAgICBQcml2YXRlTmFtZSBwcm9wZXJ0eU5hbWU7CiAgICAganNPYnNl
cnZlci0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIG9iamVjdCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc09ic2VydmVyKTsKKyAgICByZXR1cm4ganNPYnNlcnZlcjsKIH0KIAog
Ym9vbCBKU011dGF0aW9uT2JzZXJ2ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDktMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDktMjAxMCwgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIxLDcgKzEyMSw3IEBAIEpTVmFsdWUgSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhlY1N0YXRl
JiAKICAgICBKU1ZhbHVlIG5ld0NoaWxkVmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBhdXRvKiBuZXdDaGlsZCA9IEpTTm9kZTo6dG9XcmFwcGVkKG5ld0NoaWxkVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghbmV3Q2hpbGQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAibm9kZSIsICJO
b2RlIiwgImluc2VydEJlZm9yZSIsICJOb2RlIikpOworICAgICAgICByZXR1cm4gdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAiaW5zZXJ0QmVm
b3JlIiwgIk5vZGUiKTsKIAogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHdy
YXBwZWQoKS5pbnNlcnRCZWZvcmUoKm5ld0NoaWxkLCBKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgxKSkpKTsKICAgICByZXR1cm4gbmV3Q2hpbGRWYWx1ZTsKQEAgLTE0
MCw4ICsxNDAsOCBAQCBKU1ZhbHVlIEpTTm9kZTo6cmVwbGFjZUNoaWxkKEV4ZWNTdGF0ZSYgCiAg
ICAgYXV0byogb2xkQ2hpbGQgPSBKU05vZGU6OnRvV3JhcHBlZChvbGRDaGlsZFZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW5ld0NoaWxkIHx8ICFvbGRDaGlsZCkpIHsKICAgICAgICAgaWYgKCFu
ZXdDaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAicmVwbGFjZUNoaWxk
IiwgIk5vZGUiKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJjaGlsZCIsICJOb2RlIiwgInJlcGxhY2VDaGls
ZCIsICJOb2RlIikpOworICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCAwLCAibm9kZSIsICJOb2RlIiwgInJlcGxhY2VDaGlsZCIsICJOb2RlIik7
CisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwg
ImNoaWxkIiwgIk5vZGUiLCAicmVwbGFjZUNoaWxkIiwgIk5vZGUiKTsKICAgICB9CiAKICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkucmVwbGFjZUNoaWxkKCpu
ZXdDaGlsZCwgKm9sZENoaWxkKSk7CkBAIC0xNTYsNyArMTU2LDcgQEAgSlNWYWx1ZSBKU05vZGU6
OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSYgcwogICAgIEpTVmFsdWUgY2hpbGRWYWx1ZSA9IHN0YXRl
LmFyZ3VtZW50KDApOwogICAgIGF1dG8qIGNoaWxkID0gSlNOb2RlOjp0b1dyYXBwZWQoY2hpbGRW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjaGlsZCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjpkZWNvZGUodGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjaGlsZCIs
ICJOb2RlIiwgInJlbW92ZUNoaWxkIiwgIk5vZGUiKSk7CisgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNoaWxkIiwgIk5vZGUiLCAicmVtb3Zl
Q2hpbGQiLCAiTm9kZSIpOwogCiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCBzY29wZSwg
d3JhcHBlZCgpLnJlbW92ZUNoaWxkKCpjaGlsZCkpOwogICAgIHJldHVybiBjaGlsZFZhbHVlOwpA
QCAtMTcwLDcgKzE3MCw3IEBAIEpTVmFsdWUgSlNOb2RlOjphcHBlbmRDaGlsZChFeGVjU3RhdGUm
IHMKICAgICBKU1ZhbHVlIG5ld0NoaWxkVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBh
dXRvIG5ld0NoaWxkID0gSlNOb2RlOjp0b1dyYXBwZWQobmV3Q2hpbGRWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFuZXdDaGlsZCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodGhy
b3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAiYXBw
ZW5kQ2hpbGQiLCAiTm9kZSIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCAwLCAibm9kZSIsICJOb2RlIiwgImFwcGVuZENoaWxkIiwgIk5vZGUi
KTsKIAogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5hcHBl
bmRDaGlsZCgqbmV3Q2hpbGQpKTsKICAgICByZXR1cm4gbmV3Q2hpbGRWYWx1ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVu
Y3Rpb25zLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC05NCwxOSArOTQsMTkgQEAgSlNPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdChFeGVjU3Rh
dGUqIAogICAgIHJldHVybiBpbnN0YW5jZS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKIH0K
ICAgICAKLUVuY29kZWRKU1ZhbHVlIHBsdWdpbkVsZW1lbnRQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK0pTVmFsdWUgcGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNIVE1MRWxlbWVudCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU0hU
TUxFbGVtZW50KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNIVE1MRWxlbWVudCo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNPYmplY3QqIHNjcmlwdE9iamVjdCA9IHBs
dWdpblNjcmlwdE9iamVjdChleGVjLCB0aGlzT2JqZWN0KTsKICAgICBpZiAoIXNjcmlwdE9iamVj
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzY3JpcHRPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gc2Ny
aXB0T2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogYm9vbCBwbHVnaW5FbGVt
ZW50Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBKU0hUTUxFbGVtZW50KiBlbGVtZW50
KQpAQCAtMTMyLDcgKzEzMiw3IEBAIGJvb2wgcGx1Z2luRWxlbWVudEN1c3RvbVB1dChFeGVjU3Rh
dGUqIGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBqc0Nhc3Q8SlNIVE1MRWxlbWVudCo+KGV4ZWMtPmpzQ2FsbGVlKCkpOwog
CkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbAogCiAgICAgLy8gQ2FsbCB0aGUgb2JqZWN0LgogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fs
bChleGVjLCBzY3JpcHRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+dGhpc1ZhbHVl
KCksIGFyZ3VtZW50TGlzdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxUeXBlIHBsdWdpbkVsZW1lbnRHZXRDYWxsRGF0
YShKU0hUTUxFbGVtZW50KiBlbGVtZW50LCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LTIwMDgs
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgSlNDOjpCaW5kaW5n
czo6SW5zdGFuY2UqIHBsdWdpbkluc3RhbmNlKEhUTUxFbGVtZW50Jik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgSlNDOjpKU09iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0KEpTQzo6RXhlY1N0YXRlKiwg
SlNIVE1MRWxlbWVudCopOwogCi0gICAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwbHVnaW5FbGVtZW50
UHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisgICAgSlNDOjpKU1ZhbHVlIHBsdWdpbkVsZW1lbnRQcm9wZXJ0eUdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwog
ICAgIGJvb2wgcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYsIEpTSFRNTEVsZW1l
bnQqKTsKICAgICBib29sIHBsdWdpbkVsZW1lbnRDdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0hUTUxFbGVtZW50KiwgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpOwogICAgIEpTQzo6Q2FsbFR5cGUgcGx1Z2lu
RWxlbWVudEdldENhbGxEYXRhKEpTSFRNTEVsZW1lbnQqLCBKU0M6OkNhbGxEYXRhJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0
cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0
cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIFB1YmxpYyBKUyBSZWFkYWJsZVN0cmVhbVJlYWRlciBhbmQg
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjb25zdHJ1Y3RvciBjYWxsYmFja3MuCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlcihFeGVjU3RhdGUmIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKEV4ZWNTdGF0ZSYgZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtNDYsNyArNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTCiAKICNpZiBFTkFCTEUoUkVBREFCTEVfQllURV9TVFJFQU1fQVBJKQog
Ly8gUHVibGljIEpTIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY29uc3RydWN0b3IgY2Fs
bGJhY2suCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVC
eXRlU3RyZWFtQ29udHJvbGxlcihFeGVjU3RhdGUmIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKEV4ZWNTdGF0ZSYgZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNTQsNyArNTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTCiB9CiAjZW5kaWYKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihFeGVjU3RhdGUmIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1
bHRSZWFkZXIoRXhlY1N0YXRlJiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02OCw3ICs2OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24s
IGNhbGxEYXRhKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBub0FyZ3VtZW50czsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoJmV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgc3RyZWFtLCBub0FyZ3VtZW50cykpOworICAgIHJldHVybiBjYWxsKCZleGVjLCBq
c0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHN0cmVhbSwgbm9Bcmd1bWVudHMpOwogfQog
CiAvLyBQcml2YXRlIEpTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBhbmQgUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlciBjb25zdHJ1Y3RvcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMDksIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V29ya2VyKEV4ZWNTdGF0ZSYgc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNXb3JrZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUxLDEzICs1MSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0VVJMID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgLy8gU2VlIHNlY3Rpb24gNC44LjIgc3RlcCAxNCBvZiBXZWJXb3JrZXJz
IGZvciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICBhdXRvJiB3aW5k
b3cgPSBhc0pTRE9NV2luZG93KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQo
KTsKIAogICAgIEFTU0VSVCh3aW5kb3cuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHNjb3BlLCBXb3Jr
ZXI6OmNyZWF0ZSgqd2luZG93LmRvY3VtZW50KCksIHNjcmlwdFVSTCwgZ2xvYmFsT2JqZWN0LnJ1
bnRpbWVGbGFncygpKSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHNjb3BlLCBXb3JrZXI6OmNyZWF0ZSgqd2luZG93LmRvY3VtZW50KCksIHNjcmlw
dFVSTCwgZ2xvYmFsT2JqZWN0LnJ1bnRpbWVGbGFncygpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM3NSw3ICszNzUs
NyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0CiAgICAgYXV0byYg
ZnVsZmlsbEhhbmRsZXIgPSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHN0YXRlLnZtKCks
IHNoZWxsLndpbmRvdygpLCAxLCBTdHJpbmcoKSwgW21vZHVsZVNjcmlwdF0oRXhlY1N0YXRlKiBl
eGVjKSB7CiAgICAgICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0ganNWYWx1ZVRvTW9kdWxlS2V5
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICAgICAgbW9kdWxlU2NyaXB0LT5ub3RpZnlM
b2FkQ29tcGxldGVkKCptb2R1bGVLZXkuaW1wbCgpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfSk7CiAKICAgICBhdXRvJiByZWplY3RIYW5kbGVyID0gKkpTTmF0aXZlU3RkRnVuY3Rpb246
OmNyZWF0ZShzdGF0ZS52bSgpLCBzaGVsbC53aW5kb3coKSwgMSwgU3RyaW5nKCksIFttb2R1bGVT
Y3JpcHQsIG1vZHVsZUxvYWRlckFscmVhZHlSZXBvcnRlZEVycm9yU3ltYm9sLCBtb2R1bGVMb2Fk
ZXJGZXRjaGluZ0lzQ2FuY2VsZWRTeW1ib2xdKEV4ZWNTdGF0ZSogZXhlYykgewpAQCAtMzg2LDEy
ICszODYsMTIgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXR1cE1vZHVsZVNjcmlwdAogICAg
ICAgICAgICAgICAgICAgICBMb2FkYWJsZVNjcmlwdDo6RXJyb3JUeXBlOjpDYWNoZWRTY3JpcHQs
CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVsbG9wdAogICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChzeW1ib2wtPnByaXZhdGVOYW1lKCkgPT0gbW9kdWxlTG9hZGVyRmV0Y2hp
bmdJc0NhbmNlbGVkU3ltYm9sKSB7CiAgICAgICAgICAgICAgICAgbW9kdWxlU2NyaXB0LT5ub3Rp
ZnlMb2FkV2FzQ2FuY2VsZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0CiAgICAgICAgICAgICAgICAgcmV0cmll
dmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBlcnJvciwgc2NvcGUpLAogICAgICAgICAgICAgfQog
ICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfSk7CiAKICAgICBwcm9taXNl
LnRoZW4oJnN0YXRlLCAmZnVsZmlsbEhhbmRsZXIsICZyZWplY3RIYW5kbGVyKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcAkocmV2aXNp
b24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1
Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgQVNTRVJUKHN0YXRlKTsKICAgICBBU1NFUlQoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7CkBA
IC00NywxMCArNDcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1Y3R1cmVk
QwogICAgICAgICB0aHJvd0RhdGFDbG9uZUVycm9yKCpzdGF0ZSwgc2NvcGUpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJy
YXlCdWZmZXJTdHJ1Y3R1cmUoQXJyYXlCdWZmZXJTaGFyaW5nTW9kZTo6RGVmYXVsdCksIEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSkp
OworICAgIHJldHVybiBKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hh
cmluZ01vZGU6OkRlZmF1bHQpLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgQVNTRVJUKHN0YXRlLT5hcmd1
bWVudENvdW50KCkpOwpAQCAtNjksMjggKzY5LDI4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RydWN0dXJlZEMKICAgICBhdXRvIGJ1ZmZlckNsb25lID0gQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogCiAgICAgaWYg
KGpzRHluYW1pY0Rvd25jYXN0PEpTSW50OEFycmF5Kj4odmFsdWUpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTSW50OEFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0
cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgp
LCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNJbnQ4QXJyYXk6OmNy
ZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUp
LCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBp
ZiAoanNEeW5hbWljRG93bmNhc3Q8SlNJbnQxNkFycmF5Kj4odmFsdWUpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50MTZBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3
LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZz
ZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTSW50MTZBcnJh
eTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJD
bG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwog
ICAgIGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU0ludDMyQXJyYXkqPih2YWx1ZSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNJbnQzMkFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZl
clZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0
ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNJbnQz
MkFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1
ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgo
KSk7CiAgICAgaWYgKGpzRHluYW1pY0Rvd25jYXN0PEpTVWludDhBcnJheSo+KHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1VpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0ZSwg
YnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3
LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBK
U1VpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1v
dmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxl
bmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93bmNhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+
KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1VpbnQ4Q2xhbXBlZEFy
cmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZl
ckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkp
OworICAgICAgICByZXR1cm4gSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZm
ZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5
dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwogICAgIGlmIChqc0R5bmFtaWNEb3du
Y2FzdDxKU1VpbnQxNkFycmF5Kj4odmFsdWUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVWludDE2QXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCks
IFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZp
ZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU1VpbnQxNkFycmF5OjpjcmVhdGUoc3Rh
dGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVy
Vmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpzRHlu
YW1pY0Rvd25jYXN0PEpTVWludDMyQXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNVaW50MzJBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1
Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwg
YnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVWludDMyQXJyYXk6OmNy
ZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUp
LCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBp
ZiAoanNEeW5hbWljRG93bmNhc3Q8SlNGbG9hdDMyQXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGbG9hdDMyQXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVy
Vmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRl
T2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU0Zsb2F0
MzJBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShi
dWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3Ro
KCkpOwogICAgIGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU0Zsb2F0NjRBcnJheSo+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlKHN0
YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZl
clZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0
dXJuIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgp
LCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJW
aWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpzRHluYW1pY0Rvd25jYXN0PEpTRGF0YVZpZXcqPih2
YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNEYXRhVmlldzo6Y3JlYXRl
KHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1
ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAg
cmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCks
IFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZp
ZXctPmxlbmd0aCgpKTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1cmVkQ2xvbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCwx
NCArMjQsMTUgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKLXVzaW5nIEVuY29kZWRKU1ZhbHVlID0gaW50NjRfdDsKIGNsYXNz
IEV4ZWNTdGF0ZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RydWN0dXJlZENsb25lQXJyYXlCdWZmZXIoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1Y3R1cmVkQ2xvbmVB
cnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJ1Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlclZpZXcoSlNDOjpF
eGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDA2LTIwMTAsIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1j
Yy5pZC5hdT4KICMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0xODcyLDcgKzE4NzIsNyBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRj
b25kaXRpb25hbEF0dHJpYnV0ZSA/ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbEF0dHJpYnV0ZSkgOiB1bmRlZjsK
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmlu
Z31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5h
bWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKTsK
LSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAk
e2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAg
ICB9CiAKQEAgLTE4ODgsMTAgKzE4ODgsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAg
ICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25k
aXRpb25hbFN0cmluZygkYXR0cmlidXRlKTsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
ICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZh
Y2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgICAgICBp
ZiAoIUlzUmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICBteSAkc2V0dGVy
ID0gR2V0QXR0cmlidXRlU2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmli
dXRlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiYm9vbCAke3NldHRl
cn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJib29sICR7
c2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTtcbiIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRp
ZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICB9CkBAIC0xOTIzLDcgKzE5MjMs
NyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgIGlmIChIYXNDdXN0b21Db25zdHJ1Y3Rvcigk
aW50ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLy8gQ3VzdG9tIGNv
bnN0cnVjdG9yXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3Rh
dGUmKTtcblxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUmKTtcblxu
Iik7CiAgICAgfQogCiAgICAgaWYgKE5lZWRzSW1wbGVtZW50YXRpb25DbGFzcygkaW50ZXJmYWNl
KSkgewpAQCAtMjM0OSw5ICsyMzQ5LDkgQEAgc3ViIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9u
T3JDb25zdHJ1YwogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb25kaXRpb25hbEF0dHJp
YnV0ZSA/ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJp
YnV0ZVZhbHVlKCRjb25kaXRpb25hbEF0dHJpYnV0ZSkgOiB1bmRlZjsKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwogICAgIGlmICgkaXNDb25zdHJ1Y3RvcikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NsYXNzTmFtZX1D
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NsYXNz
TmFtZX1Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKICAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9
KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8
RU5EKTsgICAgCiB7CkBAIC0yNzU5LDcgKzI3NTksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvbmRpdGlvbmFsQXR0
cmlidXRlID8gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0
cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsQXR0cmlidXRlKSA6IHVuZGVmOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25k
aXRpb25hbFN0cmluZzsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlv
bk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVu
Y3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6
OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntET01KSVR9KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRE9N
SklUSURMVHlwZS5oIn0gPSAxOwogICAgICAgICAgICAgICAgIG15ICR1bnNhZmVGdW5jdGlvbk5h
bWUgPSAidW5zYWZlIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbk5hbWUp
OwpAQCAtMjc4OCwyMSArMjc4OCwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRl
Q29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OwogICAgICAgICAgICAgbXkgJGdldHRlciA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVy
ZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICAgICAgaWYg
KCFJc1JlYWRvbmx5KCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgbXkgJHNldHRlciA9
IEdldEF0dHJpYnV0ZVNldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0
ZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7c2V0dGVyfShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7c2V0dGVy
fShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTtcbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKE5l
ZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewogICAgICAgICAgICAgbXkgJGdl
dHRlciA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSAke2dldHRlcn0o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpOwog
ICAgICAgICB9CiAKICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpT
IiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJib29sICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KQEAgLTMyODEsMTcgKzMyODEsMTYgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgbXkgJGNhc3RpbmdGdW5jdGlvbiA9
ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3Qi
fSA/ICJ0byR7Y2xhc3NOYW1lfSIgOiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50
ZXJmYWNlKTsKICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIEltcGxpY2l0VGhpcyBrZXl3b3JkIGFz
IGl0IGlzIG5vIGxvbmdlciBkZWZpbmVkIGJ5IFdlYklETCBzcGVjIGFuZCBpcyBvbmx5IHVzZWQg
aW4gRE9NV2luZG93LgogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkltcGxpY2l0VGhpcyJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRl
bXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogQmluZGluZ0NhbGxlcjwke2NsYXNzTmFtZX0+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlu
bGluZSAke2NsYXNzTmFtZX0qIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6Y2FzdEZvckF0
dHJpYnV0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8gZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZGVj
b2RlZFRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKVxuIik7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgZGVjb2RlZFRoaXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1
ZSgpLnRvVGhpcygmc3RhdGUsIE5vdFN0cmljdE1vZGUpO1xuIik7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbihkZWNvZGVkVGhpc1Zh
bHVlKTsiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHRoaXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1ZSgpLnRvVGhpcygmc3RhdGUs
IE5vdFN0cmljdE1vZGUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbih0aGlzVmFsdWUpOyIpOwogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSAke2NsYXNzTmFtZX0qIEJpbmRp
bmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidGVtcGxhdGU8PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NO
YW1lfT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpXG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzMjks
NyArMzMyOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9u
TmFtZX1HZXR0ZXIoRXhlY1N0YXRlJiwgJHtjbGFzc05hbWV9JiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7XG5cbiIpOwogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNv
ZGVkSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NOYW1lfT46OmF0dHJpYnV0
ZTwke3RlbXBsYXRlUGFyYW1ldGVyc30+KHN0YXRlLCB0aGlzVmFsdWUsIFwiJG5hbWVcIik7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CkBAIC0zMzQw
LDEwICszMzM5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGlu
ZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUmKTtcblxuIik7CiAK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0
RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7
Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3RhdGUpKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2dldEZ1bmN0aW9uTmFtZX1HZXR0
ZXIoKnN0YXRlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGlu
ZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUmIHN0YXRlKVxuIik7
CkBAIC0zNDU5LDMzICszNDU4LDMyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgIGlmIChOZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGludGVyZmFjZSkpIHsKICAgICAgICAg
ICAgIG15ICRjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZSA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAu
ICJDb25zdHJ1Y3RvciI7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2Rl
ZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNz
TmFtZX1Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PCR7Y2xhc3NOYW1l
fVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPih0aGlzVmFsdWUp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFko
IWRvbU9iamVjdCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKTsKIAogICAg
ICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb0ludGVyZmFj
ZU9iamVjdH0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yID0gJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZS0+
dm0oKSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0o
KSwgKmRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pm9iamVjdFByb3RvdHlwZSgpKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIC8vIFNoYWRvd2luZyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSB0byBlbnN1cmUgcmV1
c2luZyB0aGUgc2FtZSBjb25zdHJ1Y3RvciBvYmplY3RcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0g
fCBSZWFkT25seSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAg
ICAgICB9CiAKICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAu
ICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKIAotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgImJvb2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y29uc3RydWN0b3JGdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTtcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFt
ZX1Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PCR7Y2xhc3NOYW1lfVBy
b3RvdHlwZSo+KHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpO1xuIik7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsK
QEAgLTM1NjUsOSArMzU2Myw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRl
ckZ1bmN0aW9ufShFeGVjU3RhdGUmLCAke2NsYXNzTmFtZX0mLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7XG5cbiIpOwogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7
cHV0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpXG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NOYW1lfT46OnNldEF0dHJp
YnV0ZTwke3RlbXBsYXRlUGFyYW1ldGVyc30+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgXCIkbmFtZVwiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NOYW1lfT46OnNldEF0dHJpYnV0ZTwke3Rl
bXBsYXRlUGFyYW1ldGVyc30+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCBcIiRuYW1lXCIpO1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIGJvb2wgJHtzZXR0
ZXJGdW5jdGlvbn0oRXhlY1N0YXRlJiBzdGF0ZSwgJHtjbGFzc05hbWV9JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CkBAIC0zNTc1LDEyICsz
NTczLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtc
biIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgImJvb2wgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7cHV0RnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIHN0YXRlUG9pbnRlciwgSlNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSlcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7XG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50
ZXI7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURf
UEFSQU0oc3RhdGUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgYXV0byB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDRVJlYWN0aW9uc30pIHsKQEAgLTM3NjcsMTIgKzM3NjQsMTIgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG15
ICRmdW5jdGlvblJldHVybiA9ICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIjsKKyAgICAg
ICAgICAgIG15ICRmdW5jdGlvblJldHVybiA9ICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwiOwogICAg
ICAgICAgICAgaWYgKCEkaXNDdXN0b20gJiYgJGlzT3ZlcmxvYWRlZCkgewogICAgICAgICAgICAg
ICAgICMgQXBwZW5kIGEgbnVtYmVyIHRvIGFuIG92ZXJsb2FkZWQgbWV0aG9kJ3MgbmFtZSB0byBt
YWtlIGl0IHVuaXF1ZToKICAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9u
TmFtZSAuICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9OwogICAgICAgICAgICAgICAgICMgTWFr
ZSB0aGlzIGZ1bmN0aW9uIHN0YXRpYyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncywgc2luY2Ug
d2UgZG9uJ3QgZ2VuZXJhdGUgYSBwcm90b3R5cGUgZm9yIGl0IGluIHRoZSBoZWFkZXIuCi0gICAg
ICAgICAgICAgICAgJGZ1bmN0aW9uUmV0dXJuID0gInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUiOworICAgICAgICAgICAgICAgICRmdW5jdGlvblJldHVybiA9ICJzdGF0aWMgaW5saW5lIEpT
VmFsdWUiOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgPSAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVk
QXN9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+bmFtZSk7CkBAIC0z
NzgyLDIyICszNzc5LDIyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBpZiAoISRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgICAgICBteSAkY2xhc3NQ
YXJhbWV0ZXJUeXBlID0gJGNsYXNzTmFtZSBlcSAiSlNFdmVudFRhcmdldCIgPyAiSlNFdmVudFRh
cmdldFdyYXBwZXIqIiA6ICIke2NsYXNzTmFtZX0qIjsKICAgICAgICAgICAgICAgICBteSAkb3B0
aW9uYWxQcm9taXNlUGFyYW1ldGVyID0gKElzUmV0dXJuaW5nUHJvbWlzZSgkZnVuY3Rpb24pICYm
ICEkaXNDdXN0b20pID8gIiBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCIgOiAiIjsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCAke2NsYXNzUGFyYW1l
dGVyVHlwZX0sJHtvcHRpb25hbFByb21pc2VQYXJhbWV0ZXJ9IEpTQzo6VGhyb3dTY29wZSYpO1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCAke2NsYXNz
UGFyYW1ldGVyVHlwZX0sJHtvcHRpb25hbFByb21pc2VQYXJhbWV0ZXJ9IEpTQzo6VGhyb3dTY29w
ZSYpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlv
bikgJiYgISRpc0N1c3RvbSkgewogICAgICAgICAgICAgICAgIG15ICRzY29wZSA9ICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0V4cG9zZWR9ID8gIldpbmRvd09yV29ya2VyIiA6ICJX
aW5kb3dPbmx5IjsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0YXRlKiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1Q
cm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCiAke2Z1bmN0aW9u
UmV0dXJufSAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQo
c3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjwk
e2Z1bmN0aW9uTmFtZX1Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OiR7c2NvcGV9Pigq
c3RhdGUpKTsKKyAgICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjwke2Z1bmN0aW9uTmFtZX1Q
cm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OiR7c2NvcGV9Pigqc3RhdGUpOwogfQogCi1z
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0
YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogRU5ECiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtmdW5jdGlvblJldHVybn0gJHtmdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKQEAgLTM4MTUsNyArMzgxMiw3IEBAIEVO
RAogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgICAg
ICBpZiAoJGlzQ3VzdG9tKSB7CiAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRz
Q291bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRpbnRlcmZhY2UpOwotICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKCR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoc3Rh
dGUpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihz
dGF0ZSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwpAQCAtMzgzNCw3ICszODMxLDcgQEAgRU5E
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPCRjbGFzc05hbWU+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjwke3RlbXBsYXRlUGFy
YW1ldGVyc30+KHN0YXRlLCBXVEZNb3ZlKHByb21pc2UpLCBcIiR7bWV0aG9kTmFtZX1cIik7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzTmFt
ZX0qIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRjbGFz
c1BhcmFtZXRlclR5cGUgPSAkY2xhc3NOYW1lIGVxICJKU0V2ZW50VGFyZ2V0IiA/ICJKU0V2ZW50
VGFyZ2V0V3JhcHBlcioiIDogIiR7Y2xhc3NOYW1lfSoiOwogICAgICAgICAgICAgICAgICAgICBt
eSAkdGVtcGxhdGVQYXJhbWV0ZXJzID0gIiR7ZnVuY3Rpb25OYW1lfUNhbGxlciI7CkBAIC0zODQ5
LDcgKzM4NDYsNyBAQCBFTkQKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JGNsYXNzTmFtZT46OmNhbGxPcGVyYXRpb248JHt0
ZW1wbGF0ZVBhcmFtZXRlcnN9PihzdGF0ZSwgXCIke21ldGhvZE5hbWV9XCIpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgJHtmdW5j
dGlvbk5hbWV9Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc1BhcmFtZXRlclR5
cGV9IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NQ
YXJhbWV0ZXJUeXBlfSBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpXG4i
KTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwpAQCAtMzg2MiwxMSArMzg1OSwxMSBAQCBFTkQKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUs
IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKCRpc0N1c3RvbSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25J
bXBsZW1lbnRhdGlvbk5hbWUgLiAiKCpzdGF0ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9u
SW1wbGVtZW50YXRpb25OYW1lIC4gIigqc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCkBAIC00MTg5LDcgKzQxODYsNyBA
QCBzdWIgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24KICAgICBteSAkc2VyaWFsaXplck5hdGl2
ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4g
IlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxp
emVyRnVuY3Rpb25OYW1lKTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oPiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Q2FsbGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlu
bGluZSBKU1ZhbHVlICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1DYWxsZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlMkaW50ZXJmYWNlTmFtZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3Qoc3RhdGUpO1xuIik7CkBAIC00MjE5LDEwICs0MjE2LDEwIEBAIHN1YiBHZW5lcmF0ZVNlcmlh
bGl6ZXJGdW5jdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgfQog
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3Nlcmlh
bGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTJGludGVyZmFjZU5hbWU+OjpjYWxsT3BlcmF0aW9uPCR7c2VyaWFs
aXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1DYWxsZXI+KHN0YXRlLCBcIiRzZXJpYWxpemVyRnVuY3Rp
b25OYW1lXCIpO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKQEAgLTQzOTUs
NyArNDM5Miw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgIGlmICghJGZ1bmN0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3Rvcn0pIHsKICAgICAgICAgbXkgJG5h
bWUgPSAkZnVuY3Rpb24tPm5hbWU7CiAgICAgICAgICRxdW90ZWRGdW5jdGlvbk5hbWUgPSAiXCIk
bmFtZVwiIjsKLSAgICAgICAgcHVzaChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQ
b2ludGVycygkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxXaXRofSwgXEAkb3V0
cHV0QXJyYXksICJKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkiLCAkZnVuY3Rpb24pKTsK
KyAgICAgICAgcHVzaChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygk
ZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxXaXRofSwgXEAkb3V0cHV0QXJyYXks
ICJqc1VuZGVmaW5lZCgpIiwgJGZ1bmN0aW9uKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgJHF1
b3RlZEZ1bmN0aW9uTmFtZSA9ICJudWxscHRyIjsKICAgICB9CkBAIC00NDQwLDcgKzQ0MzcsNyBA
QCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIG15ICRJRExUeXBlID0g
R2V0SURMVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBhdXRvICR7bmFtZX0gPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8JHtJ
RExUeXBlfT4oKnN0YXRlLCAke2FyZ3VtZW50SW5kZXh9KTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4iKTsKIAogICAgICAgICAg
ICAgJHZhbHVlID0gIldURk1vdmUoJHtuYW1lfS5hcmd1bWVudHMudmFsdWUoKSkiOwogCkBAIC00
NDc4LDcgKzQ0NzUsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKIAogICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siSlMkY2xhc3NOYW1lLmgifSA9IDEgaWYgJGNvZGVHZW5lcmF0b3It
PklzRXh0ZXJuYWxFbnVtVHlwZSgkdHlwZSk7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIkaW5kZW50ICAgICRkZWZpbmVPcHRpb25hbFZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjwk
Y2xhc3NOYW1lPigqc3RhdGUsICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiJGluZGVudCAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZ
KCEkb3B0aW9uYWxWYWx1ZSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiRpbmRlbnQgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkdmlzaWJsZUludGVy
ZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czwkY2xhc3NOYW1lPigpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
JGluZGVudCAgICAkbmFtZSA9IG9wdGlvbmFsVmFsdWUudmFsdWUoKTtcbiIpIGlmICRvcHRpb25h
bFZhbHVlIG5lICRuYW1lOwpAQCAtNDUxNCw3ICs0NTExLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrCiAgICAgICAgICAgICBteSAoJG5hdGl2ZVZhbHVlLCAkbWF5VGhyb3dFeGNlcHRp
b24pID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJGlubmVyLCAkY29u
ZGl0aW9uYWwsICJzdGF0ZSIsICIqc3RhdGUiLCAiKmNhc3RlZFRoaXMiLCAkZ2xvYmFsT2JqZWN0
UmVmZXJlbmNlLCAkYXJndW1lbnRFeGNlcHRpb25UaHJvd2VyKTsKIAogICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5hbWUgPSAke291dGVyfSR7bmF0aXZlVmFsdWV9
O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTtcbiIpIGlmICRtYXlUaHJvd0V4
Y2VwdGlvbjsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4iKSBpZiAkbWF5VGhyb3dFeGNlcHRpb247CiAK
ICAgICAgICAgICAgICR2YWx1ZSA9IFBhc3NBcmd1bWVudEV4cHJlc3Npb24oJG5hbWUsICRhcmd1
bWVudCk7CiAgICAgICAgIH0KQEAgLTQ4ODcsMTAgKzQ4ODQsMTAgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogCiAgICAgaWYgKCRmdW5jdGlvbi0+dHlwZS0+bmFt
ZSBlcSAidm9pZCIgfHwgSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikpIHsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiJGZ1bmN0aW9uU3RyaW5nO1xuIik7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAicmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBteSAk
dGhpc09iamVjdCA9ICRmdW5jdGlvbi0+aXNTdGF0aWMgPyAwIDogImNhc3RlZFRoaXMiOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KCIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRmdW5jdGlvbiwgMSwgJGludGVyZmFj
ZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiKTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZVVzaW5n
UG9pbnRlcnMoJGZ1bmN0aW9uLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlz
T2JqZWN0KSAuICI7XG4iKTsKICAgICB9CiB9CiAKQEAgLTQ5NTYsOSArNDk1Myw5IEBAIEVORAog
CiAgICAgICAgIGlmICgkcHJvcGVydHlOYW1lIGVxICJmb3JFYWNoIikgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICA8PEVORCk7Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
ICR7ZnVuY3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKUyRpbnRlcmZhY2VOYW1l
KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVy
ZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yRm9yRWFjaDwke2l0ZXJhdG9yTmFtZX0+
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JG
b3JFYWNoPCR7aXRlcmF0b3JOYW1lfT4oKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
CiB9CiAKIEVORApAQCAtNDk2OSwxNiArNDk2NiwxNiBAQCBFTkQKICAgICAgICAgICAgICRpdGVy
YXRpb25LaW5kID0gIlZhbHVlIiBpZiAkcHJvcGVydHlOYW1lIGVxICJbU3ltYm9sLkl0ZXJhdG9y
XSIgYW5kIG5vdCAkaW50ZXJmYWNlLT5pdGVyYWJsZS0+aXNLZXlWYWx1ZTsKIAogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICA8PEVORCk7Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqLCBKUyRpbnRlcmZhY2VOYW1lKiB0
aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlICR7ZnVu
Y3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqLCBKUyRpbnRlcmZhY2VOYW1lKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0
b3JDcmVhdGU8JHtpdGVyYXRvck5hbWV9PigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6JHtp
dGVyYXRpb25LaW5kfSkpOworICAgIHJldHVybiBpdGVyYXRvckNyZWF0ZTwke2l0ZXJhdG9yTmFt
ZX0+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjoke2l0ZXJhdGlvbktpbmR9KTsKIH0KIAog
RU5ECiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIDw8RU5EKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVj
U3RhdGUqIHN0YXRlKQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjwkY2xh
c3NOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke2Z1bmN0aW9uTmFtZX1DYWxsZXI+KHN0YXRlLCAiJHtw
cm9wZXJ0eU5hbWV9Iik7CiB9CkBAIC01ODA3LDcgKzU4MDQsNyBAQCBzdWIgR2VuZXJhdGVDb25z
dHJ1Y3RvckRlZmluaXRpb24KIAogICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGludGVyZmFjZSkp
IHsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUNv
bnN0cnVjdG9yfSkgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFt
ZX06OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjKVxu
Iik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoZXhlYyk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gY29uc3RydWN0JHtjbGFzc05hbWV9KCpl
eGVjKTtcbiIpOwpAQCAtNTgxNSw5ICs1ODEyLDkgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWZpbml0aW9uCiAgICAgICAgICB9IGVsc2lmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVy
ZmFjZSkgJiYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOYW1lZENvbnN0cnVj
dG9yfSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICAgICBteSAk
aXNPdmVybG9hZGVkID0gJGZ1bmN0aW9uLT57b3ZlcmxvYWRzfSAmJiBAeyRmdW5jdGlvbi0+e292
ZXJsb2Fkc319ID4gMTsKICAgICAgICAgICAgIGlmICgkaXNPdmVybG9hZGVkKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0kZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fShFeGVjU3Rh
dGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3Rh
dGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfSRmdW5jdGlvbi0+e292ZXJs
b2FkSW5kZXh9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3QoRXhl
Y1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
InRlbXBsYXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9
Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKQEAgLTU4NzQsNyArNTg3MSw3IEBA
IHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIG9iamVjdCA9ICR7aW50ZXJmYWNlTmFtZX06OmNyZWF0
ZSgke2NvbnN0cnVjdG9yQXJnfSk7XG4iKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7XG4iKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1
dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3RvckNh
bGxXaXRofSwgIlNjcmlwdFN0YXRlIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pO1xuIikgaWYgJGNvZGVH
ZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Q29uc3RydWN0b3JDYWxsV2l0aH0sICJTY3JpcHRTdGF0ZSIpOwogCiAgICAg
ICAgICAgICBteSAkSURMVHlwZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJGludGVyZmFjZS0+
dHlwZSk7CiAKQEAgLTU4ODQsNyArNTg4MSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVm
aW5pdGlvbgogICAgICAgICAgICAgcHVzaChAY29uc3RydWN0aW9uQ29udmVyc2lvbkFyZ3VtZW50
cywgInRocm93U2NvcGUiKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25z
dHJ1Y3Rvck1heVRocm93RXhjZXB0aW9ufTsKICAgICAgICAgICAgIHB1c2goQGNvbnN0cnVjdGlv
bkNvbnZlcnNpb25Bcmd1bWVudHMsICJXVEZNb3ZlKG9iamVjdCkiKTsKIAotICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5
Q3JlYXRlZDwke0lETFR5cGV9PigiIC4gam9pbigiLCAiLCBAY29uc3RydWN0aW9uQ29udmVyc2lv
bkFyZ3VtZW50cykgLiAiKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDwke0lETFR5cGV9PigiIC4gam9pbigiLCAiLCBA
Y29uc3RydWN0aW9uQ29udmVyc2lvbkFyZ3VtZW50cykgLiAiKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U0ludGVyZmFjZU5hbWUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMK
IAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc0ludGVyZmFj
ZU5hbWVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNJbnRlcmZhY2VO
YW1lUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBA
IC0xMjIsMjIgKzEyMiwyMSBAQCB2b2lkIEpTSW50ZXJmYWNlTmFtZTo6ZGVzdHJveShKU0M6OkpT
Q2VsCiAgICAgdGhpc09iamVjdC0+SlNJbnRlcmZhY2VOYW1lOjp+SlNJbnRlcmZhY2VOYW1lKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTSW50ZXJm
YWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNJbnRlcmZh
Y2VOYW1lUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTSW50
ZXJmYWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNJbnRl
cmZhY2VOYW1lUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50ZXJmYWNlTmFtZTo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gSlNJbnRlcmZhY2VOYW1lOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTSW50ZXJmYWNlTmFtZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTSW50ZXJmYWNlTmFtZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZl
RE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
RnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RN
ZXNzYWdlKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RB
Y3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdEV4Y2l0aW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAg
LTE0Nyw5ICsxNDcsOSBAQCB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZGVzdHJveShKU0M6
CiAgICAgdGhpc09iamVjdC0+SlNUZXN0QWN0aXZlRE9NT2JqZWN0Ojp+SlNUZXN0QWN0aXZlRE9N
T2JqZWN0KCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEFjdGl2ZURPTU9iamVjdCog
QmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+OjpjYXN0Rm9yQXR0cmlidXRlKEV4
ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdEFjdGl2ZURPTU9iamVjdCogQmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAg
IHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEFjdGl2ZURPTU9iamVjdCo+KHRoaXNWYWx1ZSk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdEFjdGl2ZURPTU9iamVjdCogQmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+
OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNTksNyArMTU5LDcgQEAg
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KgogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RBY3RpdmVET01PYmplY3RF
eGNpdGluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJleGNpdGluZ0F0dHIiKTsKIH0K
QEAgLTE3NSwyMiArMTc1LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVE
T01PYmoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFk
b21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RBY3RpdmVET01PYmplY3Q6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgcmV0dXJuIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEFj
dGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RB
Y3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0LDM2ICsyMDMsMzYg
QEAgSlNWYWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cgogICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dEFjdGl2ZURPTU9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1
bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25DYWxs
ZXI+KHN0YXRlLCAiZXhjaXRpbmdGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNp
dGluZ0Z1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlv
bkV4Y2l0aW5nRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKHN0YXRl
LCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbmV4dENoaWxkID0gY29udmVydDxJRExJ
bnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJuZXh0Q2hpbGQiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJleGNpdGluZ0Z1bmN0aW9uIiwgIk5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5leGNpdGluZ0Z1bmN0aW9uKCpu
ZXh0Q2hpbGQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0
TWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1l
c3NhZ2VDYWxsZXI+KHN0YXRlLCAicG9zdE1lc3NhZ2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9u
UG9zdE1lc3NhZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01P
YmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9u
UG9zdE1lc3NhZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01P
YmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTI0
MSw5ICsyNDAsOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG1lc3NhZ2UgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAogYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3RPd25lcjo6aXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTggKzM3LDE4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENFUmVhY3Rpb25zKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rp
b25zKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RDRVJlYWN0
aW9uc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpA
QCAtMTQxLDkgKzE0MSw5IEBAIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnM6OmRlc3Ryb3koSlNDOjpK
U0MKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDRVJlYWN0aW9uczo6fkpTVGVzdENFUmVhY3Rpb25z
KCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zKiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDRVJlYWN0aW9u
cyogQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46OmNhc3RGb3JBdHRyaWJ1dGUoRXhl
Y1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdENFUmVhY3Rpb25zKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9ucyo+KHRoaXNWYWx1ZSk7
CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zKiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQpA
QCAtMTUzLDcgKzE1Myw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zKiBC
aW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25z
Pjo6YXR0cmlidXRlPGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7CiB9CkBA
IC0xNjksNyArMTY5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
QQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rp
b25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjphdHRyaWJ1dGU8anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0
QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVj
dEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyIpOwogfQpAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1IKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6YXR0cmlidXRlPGpzVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdpZmllckF0dHJp
YnV0ZSIpOwogfQpAQCAtMTk5LDIyICsxOTksMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q0VSZWFjdGlvbnNQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25z
UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENFUmVhY3Rpb25zOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rl
c3RDRVJlYWN0aW9uczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGUqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI1
LDkgKzIyNCw5IEBAIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGUKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VS
ZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rp
b25zPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVh
Y3Rpb25zPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0
aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtMjQ1LDkgKzI0NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RDRVJlYWN0aW9uc0EKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
UmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dENFUmVhY3Rpb25zJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlv
bnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdEF0
dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yNjUsOSArMjY0LDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdENFUmVhY3Rpb25zJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJz
dHJpbmdpZmllckF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQpAQCAtMjg5LDIxICsyODgsMjEgQEAgSlNWYWx1ZSBKU1Rlc3RDRVJlYWN0
aW9uczo6Z2V0Q29uc3RydWN0bwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RD
RVJlYWN0aW9uc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9u
c0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdENFUmVhY3Rpb25zKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0Q0VSZWFjdGlvbnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9ucyhFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrOwogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVh
Y3Rpb25zPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhDRVJlYWN0aW9u
cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9uc0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogYm9vbCBKU1Rlc3RDRVJlYWN0aW9uc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxNCArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlv
bnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJv
dG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVz
CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllclZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKQEAgLTEzMyw5ICsxMzMsOSBAQCB2b2lkIEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXI6OmRlc3RyCiAgICAgdGhpc09iamVjdC0+SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllcjo6fkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIoKTsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogQmluZGluZ0NhbGxlcjxKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAg
IHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogQmluZGluZ0NhbGxlcjxK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUm
IHN0YXRlKQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllcj46OmF0dHJpYnV0ZTxqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ2YWx1ZSIpOwogfQpAQCAtMTU5LDIyICsxNTksMjEgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKj4o
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE4NSw5ICsxODQsOSBAQCBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJD
b25zCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXI+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZh
bHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInZhbHVlIik7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ2YWx1ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTIwOCwxOSArMjA3LDE5IEBAIEpT
VmFsdWUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2UKICAgICByZXR1cm4gZ2V0RE9N
Q29uc3RydWN0b3I8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVu
Y3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmlu
ZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cj46OmNhbGxPcGVyYXRpb248anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1
bmN0aW9uVG9TdHJpbmdDYWxsZXI+KHN0YXRlLCAidG9TdHJpbmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90
b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIGltcGwudmFsdWUoKSkpOworICAgIHJldHVybiB0b0pTPElETERPTVN0cmluZz4oKnN0YXRl
LCBpbXBsLnZhbHVlKCkpOwogfQogCiBib29sIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBj
bGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTI4LDIyICsxMjgsMjEgQEAg
dm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcgogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp+SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlw
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
ZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKIAogdXNpbmcgSlNUZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvciA9IEpTRE9NQ29u
c3RydWN0b3I8SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+Owog
Ci10ZW1wbGF0ZTw+IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTw+IEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0
b3I6OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZXhlYyk7
CiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0KCpleGVjKTsKQEAgLTEyOCwyNSArMTI4LDI0IEBAIHZvaWQgSlNUZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmYKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6fkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gSlNU
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHN0YXRlLT52bSgpLCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoc3RhdGUtPnZtKCksICpkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5
cGUoKSksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7CiAgICAgLy8gU2hhZG93aW5nIGNvbnN0cnVjdG9yIHByb3BlcnR5IHRvIGVuc3VyZSBy
ZXVzaW5nIHRoZSBzYW1lIGNvbnN0cnVjdG9yIG9iamVjdAogICAgIGRvbU9iamVjdC0+cHV0RGly
ZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RvciwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjb25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCi1ib29sIHNldEpT
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEN1c3RvbUNvbnN0cnVj
dG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3Rv
dHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQ
cm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewog
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmgJKHJldmlzaW9uIDIxMDI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw3IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1MKIGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3Q+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNy
ZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6
anNOdWxsKCk7IH0KIAogLy8gQ3VzdG9tIGNvbnN0cnVjdG9yCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QoSlNDOjpFeGVjU3RhdGUmKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KEpT
Qzo6RXhlY1N0YXRlJik7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+IHsKICAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIg
KzM1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5v
dGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRl
ckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OwogCiBjbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTcwLDIyICsxNzAsMjEgQEAgdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZQogICAgIHJldHVybiBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTksMTQgKzE5OCwxNCBA
QCBKU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zCiAgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclBy
b3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90
aGVyRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
ciosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdl
dHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVy
RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAiYW5vdGhlckZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVy
UHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwpAQCAtMjE0LDkgKzIxMyw5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmFub3RoZXJGdW5jdGlvbihXVEZN
b3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01K
SVQuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNTYgKzQy
LDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90
b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCos
IERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW0o
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBl
PElETFVuc2lnbmVkU2hvcnQ+LCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVk
U2hvcnQ+KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1
bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdERPTUpJVCopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVs
ZW1lbnRCeUlkKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklUOjpJRExKU0Fy
Z3VtZW50VHlwZTxJRExET01TdHJpbmc+KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25HZXRFbGVtZW50c0J5TmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIERP
TUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPik7CiAKIC8vIEF0dHJpYnV0ZXMK
IAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRM
b25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUVXN2U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RET01KSVRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEFueUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RET01KSVRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0RE9NSklUT2N0ZXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RE
T01KSVRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZEZsb2F0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklURG9t
U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0RE9NSklUVXN2U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5
dGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldE51bGxhYmxlQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUVW5z
aWduZWRTaG9ydE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2ln
bmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxl
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
VW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklURG9tU3Ry
aW5nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dERPTUpJVE5vZGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKIAogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgY29uc3QgSlNDOjpET01K
SVQ6OlNpZ25hdHVyZSBET01KSVRTaWduYXR1cmVGb3JUZXN0RE9NSklUR2V0QXR0cmlidXRlKCh1
aW50cHRyX3QpdW5zYWZlSnNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGUs
IERPTUpJVDo6Y2hlY2tET008VGVzdERPTUpJVD4sIEpTVGVzdERPTUpJVDo6aW5mbygpLCBKU0M6
OkRPTUpJVDo6RWZmZWN0Ojpmb3JSZWFkKERPTUpJVDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
RE9NKSwgRE9NSklUOjpJRExSZXN1bHRUeXBlRmlsdGVyPElETE51bGxhYmxlPElETERPTVN0cmlu
Zz4+Ojp2YWx1ZSwgRE9NSklUOjpJRExBcmd1bWVudFR5cGVGaWx0ZXI8SURMRE9NU3RyaW5nPjo6
dmFsdWUpOwpAQCAtMjQzLDkgKzI0Myw5IEBAIEpTT2JqZWN0KiBKU1Rlc3RET01KSVQ6OnByb3Rv
dHlwZShWTSYgdm0KICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERPTUpJVD4odm0s
IGdsb2JhbE9iamVjdCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERPTUpJVCogQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERPTUpJVCog
QmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYs
IEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RET01KSVQqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVCo+KHRoaXNWYWx1ZSk7CiB9CiAKIHRlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdERPTUpJVCogQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjpjYXN0Rm9y
T3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0yNTUsNyArMjU1LDcgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBCaW5kaW5nQwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUQW55QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQW55QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0RE9NSklUQW55QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAiYW55QXR0ciIpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIEpTQzo6RE9NSklU
OjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29s
ZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUQm9vbGVhbkF0dHJH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJib29sZWFuQXR0ciIpOwogfQpAQCAtMzA5LDcgKzMw
OSw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUQnl0
ZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJieXRlQXR0ciIpOwogfQpAQCAtMzM2LDcg
KzMzNiw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9N
SklUT2N0ZXRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CkBA
IC0zNjMsNyArMzYzLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVy
UwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFNo
b3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxq
c1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzaG9ydEF0dHIi
KTsKIH0KQEAgLTM5MCw3ICszOTAsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21K
SVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNo
b3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KQEAg
LTQxNyw3ICs0MTcsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJT
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVz
dERPTUpJVExvbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibG9uZ0F0dHIiKTsKIH0K
QEAgLTQ0NCw3ICs0NDQsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0
ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdBdHRyIik7CiB9CkBAIC00NzEsNyArNDcx
LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rl
c3RET01KSVRMb25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ0F0
dHIiKTsKIH0KQEAgLTQ5OCw3ICs0OTgsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBk
b21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25n
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVu
c2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKIH0KQEAgLTUyNSw3ICs1MjUsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0
dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRG
bG9hdEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0RE9NSklURmxvYXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImZsb2F0QXR0ciIpOwogfQpAQCAtNTUyLDcgKzU1Miw3IEBAIEpTQzo6RE9NSklUOjpH
ZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01K
SVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUVW5yZXN0cmljdGVkRmxvYXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0
ZWRGbG9hdEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1
dGU8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAidW5yZXN0cmljdGVkRmxvYXRBdHRyIik7CiB9CkBAIC01NzksNyArNTc5LDcgQEAgSlND
OjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01K
SVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklURG91YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVREb3VibGVB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZG91YmxlQXR0ciIpOwogfQpAQCAtNjA2LDcg
KzYwNiw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91
YmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERvdWJsZUF0dHIi
KTsKIH0KQEAgLTYzMyw3ICs2MzMsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21K
SVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJkb21TdHJpbmdBdHRyIik7CiB9CkBAIC02NjAsNyArNjYwLDcgQEAgSlND
OjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVEJ5dGVTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RE
T01KSVRCeXRlU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVTdHJpbmdB
dHRyIik7CiB9CkBAIC02ODcsNyArNjg3LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciog
ZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAidXN2U3RyaW5nQXR0ciIpOwogfQpAQCAtNzE0LDcgKzcxNCw3IEBA
IEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERP
TUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVROb2RlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUTm9kZUF0dHJH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJub2RlQXR0ciIpOwogfQpAQCAtNzQxLDcgKzc0MSw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERP
TUpJVEJvb2xlYW5OdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01K
SVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgImJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTc2OCw3ICs3Njgs
NyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRCeXRlTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRC
eXRlTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0
cmlidXRlPGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJieXRlTnVsbGFibGVBdHRyIik7CiB9CkBAIC03OTUsNyArNzk1LDcgQEAgSlNDOjpET01K
SVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9N
SklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVE9jdGV0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldE51bGxhYmxl
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rl
c3RET01KSVRPY3RldE51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0
TnVsbGFibGVBdHRyIik7CiB9CkBAIC04MjIsNyArODIyLDcgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUU2hvcnROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0
TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRT
aG9ydE51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0TnVsbGFibGVB
dHRyIik7CiB9CkBAIC04NDksNyArODQ5LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciog
ZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWdu
ZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWdu
ZWRTaG9ydE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51
bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0
ZTxqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAidW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ciIpOwogfQpAQCAtODc2LDcgKzg3Niw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVExv
bmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRy
aWJ1dGU8anNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImxvbmdOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTkwMyw3ICs5MDMsNyBAQCBKU0M6OkRPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklU
VW5zaWduZWRMb25nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ciIpOwogfQpAQCAt
OTMwLDcgKzkzMCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJs
ZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ051bGxhYmxlQXR0ciIpOwog
fQpAQCAtOTU3LDcgKzk1Nyw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdl
dHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xv
bmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9u
Z0xvbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdO
dWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1
dGU8anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTk4NCw3
ICs5ODQsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dERPTUpJVEZsb2F0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAiZmxvYXROdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTEwMTEsNyArMTAxMSw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklU
VW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1
bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0ciIpOwogfQpAQCAtMTAzOCw3ICsxMDM4LDcgQEAg
SlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVERv
dWJsZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0
dHJpYnV0ZTxqc1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJkb3VibGVOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTEwNjUsNyArMTA2NSw3IEBAIEpT
Qzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5y
ZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyIik7CiB9CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBK
U0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9N
SklURG9tU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImRvbVN0cmluZ051bGxhYmxlQXR0ciIpOwogfQpAQCAtMTExOSw3
ICsxMTE5LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVs
bGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ051bGxhYmxlQXR0
ciIpOwogfQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciog
ZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3Ry
aW5nTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdO
dWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01K
SVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZTdHJp
bmdOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTExNzMsNyArMTE3Myw3IEBAIEpTQzo6RE9NSklUOjpH
ZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVE5vZGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5v
ZGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklU
Tm9kZU51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm5vZGVOdWxsYWJsZUF0
dHIiKTsKIH0KQEAgLTExOTgsMjIgKzExOTgsMjEgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRl
ciogZG9tSklUR2V0dGVyUwogICAgIHJldHVybiAmY29tcGlsZXIuZ2V0KCk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4odGhpc1ZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdERPTUpJVDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0RE9NSklUOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdERPTUpJ
VENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RET01KSVRQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVFByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RET01KSVRQcm90b3R5cGUqIGRvbU9iamVj
dCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJVFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjI3LDE0
ICsxMjI2LDE0IEBAIEpTVmFsdWUgSlNUZXN0RE9NSklUOjpnZXRDb25zdHJ1Y3RvcihWTSYKICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RE9NSklUQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5j
dGlvbkdldEF0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
UHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uR2V0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RE9NSklUPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RET01KSVRQcm90b3R5cGVG
dW5jdGlvbkdldEF0dHJpYnV0ZUNhbGxlcj4oc3RhdGUsICJnZXRBdHRyaWJ1dGUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uR2V0QXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9N
SklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0
ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTI0Miw4ICsxMjQxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJp
bmc+Pigqc3RhdGUsIGltcGwuZ2V0QXR0cmlidXRlKFdURk1vdmUobmFtZSkpKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETE51
bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5nZXRBdHRyaWJ1dGUoV1RGTW92ZShu
YW1lKSkpOwogfQogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8
SURMRE9NU3RyaW5nPiBlbmNvZGVkTmFtZSkKQEAgLTEyNTksMTQgKzEyNTgsMTQgQEAgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIGltcGwuZ2V0QXR0
cmlidXRlKFdURk1vdmUobmFtZSkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdERPTUpJVD46OmNhbGxPcGVyYXRpb248anNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25JdGVtQ2FsbGVyPihzdGF0ZSwgIml0ZW0iKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC0xMjc0LDEwICsxMjczLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8geCA9IGNvbnZlcnQ8SURMVW5z
aWduZWRTaG9ydD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHkgPSBjb252ZXJ0PElETFVuc2lnbmVkU2hvcnQ+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
RE9NU3RyaW5nPigqc3RhdGUsIGltcGwuaXRlbShXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpKSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9K
UzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5pdGVtKFdURk1vdmUoeCksIFdURk1vdmUoeSkp
KTsKIH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERP
TUpJVCogY2FzdGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExVbnNpZ25lZFNo
b3J0PiBlbmNvZGVkWCwgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExVbnNpZ25lZFNob3J0
PiBlbmNvZGVkWSkKQEAgLTEyOTUsMTkgKzEyOTQsMTkgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIHVuc2FmZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5pdGVtKFdURk1vdmUoeCksIFdURk1vdmUoeSkpKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJ
VCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlw
ZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RET01KSVRQcm90
b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUNhbGxlcj4oc3RhdGUsICJoYXNBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0
dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExCb29s
ZWFuPihpbXBsLmhhc0F0dHJpYnV0ZSgpKTsKIH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzKQpAQCAtMTMy
MSwxNCArMTMyMCwxNCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZl
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0
cmlidXRlKCkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmNhbGxPcGVy
YXRpb248anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcj4o
c3RhdGUsICJnZXRFbGVtZW50QnlJZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtMTMzNiw4ICsxMzM1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBlbGVtZW50SWQg
PSBBdG9taWNTdHJpbmcoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRl
KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhzdGF0ZSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEludGVyZmFjZTxFbGVtZW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9K
UzxJRExJbnRlcmZhY2U8RWxlbWVudD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVudElkKSkpOwogfQogCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJ
VCogY2FzdGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExET01TdHJpbmc+IGVu
Y29kZWRFbGVtZW50SWQpCkBAIC0xMzUzLDE0ICsxMzUyLDE0IEBAIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiB1bnNhZmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRzQnlOYW1lQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0RE9NSklUKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFt
ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFBy
b3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVDYWxsZXI+KHN0YXRlLCAi
Z2V0RWxlbWVudHNCeU5hbWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTEzNjgsOCArMTM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gZWxlbWVudE5h
bWUgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21p
Y1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJm
YWNlPE5vZGVMaXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
Z2V0RWxlbWVudHNCeU5hbWUoV1RGTW92ZShlbGVtZW50TmFtZSkpKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFj
ZTxOb2RlTGlzdD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdl
dEVsZW1lbnRzQnlOYW1lKFdURk1vdmUoZWxlbWVudE5hbWUpKSk7CiB9CiAKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRzQnlOYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBj
YXN0ZWRUaGlzLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETERPTVN0cmluZz4gZW5jb2Rl
ZEVsZW1lbnROYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMyAr
ODAsMTMgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjbwogCiAvLyBB
dHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CiAjaWYgRU5BQkxFKFNQRUNJQUxfRVZFTlQpCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwcml2YXRlOgogCiB1c2luZyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OwogCi10
ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjUs
MTEgKzEyNSwxMSBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGF1dG8gZXZlbnRJbml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdD4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9
IFRlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGUoV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShldmVu
dEluaXREaWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdEV2ZW50Q29uc3RydWN0b3I+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQpAQCAtMTkyLDE0ICsxOTIsMTQgQEAgSlNPYmplY3QqIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OnByb3RvdAogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3IqIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmNh
c3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogQmluZGluZ0NhbGxlcjxKU1Rl
c3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVl
IHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KHRoaXNWYWx1ZSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjEiKTsKIH0KQEAgLTIxNSw3ICsyMTUs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjIiKTsKIH0KQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAjaWYgRU5BQkxFKFNQRUNJQUxf
RVZFTlQpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIz
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3ImLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIz
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyM0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHIzIik7CiB9CkBAIC0yNDgs
MjIgKzI0OCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAK
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEy
ICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbkl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtKEpTQzo6RXhlY1N0YXRlKik7CiAK
IC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OwogCiBjbGFzcyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTY4LDIyICsxNjgsMjEgQEAgdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0RXZlbnRUYXJnZXQqIEJpbgogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RFdmVudFRhcmdldCo+KHN0YXRlLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RXZlbnRU
YXJnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJu
IEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSo+KHRo
aXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yMTAsMTQgKzIwOSwxNCBAQCBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1
Y3RvCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEV2
ZW50VGFyZ2V0KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdEV2ZW50VGFyZ2V0KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0
ZW0oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50VGFyZ2V0Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcj4oc3RhdGUsICJpdGVtIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2
ZW50VGFyZ2V0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
SXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50VGFyZ2V0KiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0yMjUsOCArMjI0LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxOb2RlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaXRlbShX
VEZNb3ZlKGluZGV4KSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSk7CiB9CiAKIHZv
aWQgSlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNl
cHRpb25OYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RFeGNlcHRpb25OYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM4LDE0ICsxMzgsMTQgQEAg
dm9pZCBKU1Rlc3RFeGNlcHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbAogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdEV4Y2VwdGlvbjo6fkpTVGVzdEV4Y2VwdGlvbigpOwogfQogCi10ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3RFeGNlcHRpb24qIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXhjZXB0aW9uPjo6Y2Fz
dEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3RFeGNlcHRpb24qIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXhjZXB0
aW9uPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsK
LSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9uKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RF
eGNlcHRpb24qPih0aGlzVmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RFeGNlcHRpb24mLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEV4Y2VwdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAibmFtZSIpOwogfQpAQCAtMTU5LDIyICsxNTksMjEgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9uUHJv
dG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXhjZXB0aW9u
UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CkBAIC0xMjIsMjIgKzEyMiwyMSBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OmRlc3Ryb3koCiAgICAgdGhpc09iamVjdC0+SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6
fkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwzMSArNDAsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlv
bnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVj
dEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
UmVndWxhck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5k
aWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGQoSlNDOjpFeGVjU3RhdGUqKTsKICNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlm
CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RSZWd1bGFyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFy
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOwogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlv
bmFsQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5k
UHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIHVzaW5nIEpTVGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNU
ZXN0R2xvYmFsT2JqZWN0PjsKIApAQCAtMTc4LDkgKzE3OCw5IEBAIHZvaWQgSlNUZXN0R2xvYmFs
T2JqZWN0OjpkZXN0cm95KEpTQzo6SlMKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RHbG9iYWxPYmpl
Y3Q6On5KU1Rlc3RHbG9iYWxPYmplY3QoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
R2xvYmFsT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhc3RGb3JB
dHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0R2xvYmFsT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9i
amVjdD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0R2xvYmFsT2JqZWN0Kj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0R2xvYmFsT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhc3RG
b3JPcGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTE5MCw3ICsxOTAsNyBAQCB0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxPYmplY3QqIEJpCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1
dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7CiB9CkBAIC0y
MDYsNyArMjA2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdAog
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9i
amVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIp
OwogfQpAQCAtMjIzLDcgKzIyMyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNB
bmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicHVibGlj
QW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlIik7CiB9CkBAIC0yNDIsNyArMjQyLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdAogI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEdsb2JhbE9iamVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZSIpOwogfQpAQCAtMjU4LDIyICsyNTgsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdAogCiAjZW5kaWYKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90
b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RH
bG9iYWxPYmplY3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKj4odGhp
c1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTI4NCw5ICsyODMsOSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEV4
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVndWxhckF0dHJpYnV0ZSIpOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAicmVndWxhckF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTMwMyw5ICszMDIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTMyMyw5ICszMjIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNB
bmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNDQsOSArMzQzLDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdAogI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjcsMTQgKzM2NiwxNCBAQCBK
U1ZhbHVlIEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3RydWN0CiAgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxj
b25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
blJlZ3VsYXJPcGVyYXRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblJlZ3VsYXJPcGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmNhbGxPcGVyYXRpb248anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
blJlZ3VsYXJPcGVyYXRpb25DYWxsZXI+KHN0YXRlLCAicmVndWxhck9wZXJhdGlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC0zODIsMjAgKzM4MSwyMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5yZWd1bGFyT3BlcmF0aW9uKFdURk1v
dmUodGVzdFBhcmFtKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9i
YWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjEoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcj4oc3RhdGUsICJlbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNDAzLDIyICs0
MDIsMjIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJh
bSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2Jh
bE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9i
amVjdD46OmNhbGxPcGVyYXRpb248anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC00MjYsMTUgKzQy
NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTQ1NCwxNCArNDUzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
R2xvYmEKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNw
ZWNpZmljV29ybGQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZChFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9i
amVjdD46OmNhbGxPcGVyYXRpb248anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRJblNwZWNpZmljV29ybGRDYWxsZXI+KHN0YXRlLCAiZW5hYmxlZEluU3BlY2lmaWNXb3Js
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC00NjksMjYgKzQ2OCwyNiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmVuYWJs
ZWRJblNwZWNpZmljV29ybGQoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlv
bkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZh
dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFBy
aXZhdGVGdW5jdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oc3Rh
dGUsICJ0ZXN0UHJpdmF0ZUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVG
dW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RQcml2YXRl
RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3Qq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwudGVzdFByaXZhdGVGdW5jdGlv
bigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3OCArNDgs
NzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRnVuY3Rpb25zCiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
b2QxKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEpTQzo6RXhlY1N0YXRl
Kik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24y
MykKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxl
bWVudHNNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2Qz
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEpTQzo6RXhlY1N0YXRlKik7
CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBs
ZW1lbnRzTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRo
b2QxKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDEoSlNDOjpFeGVjU3Rh
dGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRh
bE1ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhKU0M6OkV4
ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDQoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0KEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKIAog
Ly8gQXR0cmlidXRlcwogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1w
bGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFj
ZUltcGxlbWVudHNOb2RlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25s
eUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVu
dGFsU3RhdGljQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
U3VwcGxlbWVudGFsU3RhdGljQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAjZW5kaWYKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMjE3LDcgKzIxNyw3IEBAIHN0
YXRpY19hc3NlcnQoVGVzdFN1cHBsZW1lbnRhbDo6U1VQUExFTUUKIHN0YXRpY19hc3NlcnQoVGVz
dFN1cHBsZW1lbnRhbDo6Q09OU1RfSU1QTCA9PSAyLCAiQ09OU1RfSU1QTCBpbiBUZXN0U3VwcGxl
bWVudGFsIGRvZXMgbm90IG1hdGNoIHZhbHVlIGZyb20gSURMIik7CiAjZW5kaWYKIAotdGVtcGxh
dGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIyNywxNCArMjI3LDE0IEBAIHRlbXBs
YXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHIy
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImRlZmF1
bHRTdHJpbmciKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gdGhyb3dDb25z
dHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RJbnRlcmZh
Y2U6OmNyZWF0ZSgqY29udGV4dCwgV1RGTW92ZShzdHIxKSwgV1RGTW92ZShzdHIyKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0
SW50ZXJmYWNlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETElu
dGVyZmFjZTxUZXN0SW50ZXJmYWNlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMzk4LDkg
KzM5OCw5IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWwKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RJbnRlcmZhY2U6On5KU1Rlc3RJbnRlcmZhY2UoKTsKIH0KIAotdGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVy
ZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEludGVyZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlz
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0SW50ZXJmYWNlKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0SW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmNhc3RGb3JP
cGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTQxMSwxMCArNDExLDEwIEBAIHRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdEludGVyZmFjZSogQmluZGkKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJik7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVt
ZW50c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVu
dHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0
ZXIoKnN0YXRlKSk7CisgICAgcmV0dXJuIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVt
ZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9u
bHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC00MjksMTAgKzQyOSwxMCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQo
c3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICByZXR1cm4ganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcigqc3RhdGUp
OwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJ
bXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtNDQ3LDcgKzQ0
Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0
cmlidXRlPGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAiaW1wbGVtZW50c1N0cjEiKTsKIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNT
dHIyIik7CiB9CkBAIC00ODUsNyArNDg1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUltcAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlv
bjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOwogfQpAQCAtNTAy
LDcgKzUwMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNl
Pjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAiaW1wbGVtZW50c05vZGUiKTsKIH0KQEAgLTUyMSwxMCArNTIxLDEwIEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRl
cihFeGVjU3RhdGUmKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICByZXR1cm4ganNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoKnN0YXRlKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxl
bWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC01Mzks
MTAgKzUzOSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVy
KCpzdGF0ZSkpOworICAgIHJldHVybiBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1l
bnRhbFN0YXRpY0F0dHJHZXR0ZXIoKnN0YXRlKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlKQpAQCAtNTU3LDcgKzU1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxT
dHIxIik7CiB9CkBAIC01NzYsNyArNTc2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjIiKTsK
IH0KQEAgLTU5NSw3ICs1OTUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMyIpOwogfQpAQCAt
NjEyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxOb2RlIik7CiB9CkBAIC02MjgsMjIg
KzYyOCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwCiAKICNl
bmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21P
YmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0
dXJuIEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPih0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjc1LDEyICs2
NzQsMTEgQEAgYm9vbCBKU1Rlc3RJbnRlcmZhY2U6OnB1dEJ5SW5kZXgoSlNDZWxsKgogfQogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1ib29sIHNldEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEpTVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKHN0YXRlUG9pbnRlcik7CiAgICAgYXV0byYgc3RhdGUgPSAqc3RhdGVQb2ludGVyOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oc3RhdGUsIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBUZXN0
SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CkBAIC02OTIsOSArNjkwLDkgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbQogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVt
ZW50c1N0cjIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC03MTMsOSArNzExLDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c1N0cjMiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJpbXBsZW1lbnRzU3Ry
MyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC03MzEsOSArNzI5
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c05vZGUiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC03NTAsMTIgKzc0OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1l
bnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgSlNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc3RhdGVQb2ludGVyKTsKICAgICBh
dXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtNzY3LDkgKzc2
NCw5IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGUKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVudGFs
U3RyMiIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTc4OCw5ICs3ODUsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjMiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
InN1cHBsZW1lbnRhbFN0cjMiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJ
bnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC04MDYsOSArODAzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVy
ZmFjZVN1cAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJzdXBwbGVtZW50YWxOb2RlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5v
ZGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdXBwbGVtZW50YWxOb2RlIik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxO
b2RlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtODMwLDMzICs4Mjcs
MzMgQEAgSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKAogfQogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBs
ZW1lbnRzTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdEludGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50
c01ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2Qx
Q2FsbGVyPihzdGF0ZSwgImltcGxlbWVudHNNZXRob2QxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxl
bWVudHNNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNN
ZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLmltcGxlbWVudHNNZXRob2QxKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVO
QUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxl
bWVudHNNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
SW1wbGVtZW50c01ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXI+KHN0YXRlLCAiaW1wbGVtZW50
c01ldGhvZDIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKQEAgLTg2NSw3MyArODYyLDczIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRl
c3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAib2JqQXJnIiwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVt
ZW50c01ldGhvZDIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmltcGxlbWVudHNNZXRob2QyKCpjb250ZXh0LCBXVEZN
b3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50
c01ldGhvZDIoKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uSW1wbGVtZW50c01ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRl
cmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDNDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
bkltcGxlbWVudHNNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMyhFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFj
ZT46OmNhbGxPcGVyYXRpb248anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kM0NhbGxlcj4oc3RhdGUsICJpbXBsZW1lbnRzTWV0aG9kMyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25JbXBsZW1lbnRzTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c01ldGhvZDMoKnN0YXRl
KSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmltcGxlbWVudHNNZXRob2QzKCpzdGF0ZSk7CiB9
CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aG9kNChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTWV0aG9k
NCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvblN1cHBsZW1lbnRhbE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRl
cmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDEoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMUNhbGxlcj4o
c3RhdGUsICJzdXBwbGVtZW50YWxNZXRob2QxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRh
bE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0
aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3Vw
cGxlbWVudGFsTWV0aG9kMShpbXBsKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3Vw
cGxlbWVudGFsTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSos
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBw
bGVtZW50YWxNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNl
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1l
bnRhbE1ldGhvZDJDYWxsZXI+KHN0YXRlLCAic3VwcGxlbWVudGFsTWV0aG9kMiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvblN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
QEAgLTk0MCw0MSArOTM3LDQxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAxLCAib2JqQXJnIiwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMiIs
ICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDIoaW1w
bCwgKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihpbXBsLCAq
Y29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBw
bGVtZW50YWxNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBs
ZW1lbnRhbE1ldGhvZDMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDMoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVu
dGFsTWV0aG9kM0NhbGxlcj4oc3RhdGUsICJzdXBwbGVtZW50YWxNZXRob2QzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0
aW9uU3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9k
Mygqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9kMygq
c3RhdGUpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rp
b25TdXBwbGVtZW50YWxNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJp
YnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZVJlYWRvbmx5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmVSZWFkb25seShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xh
c3MgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEyNSwxNCArMTI1LDE0IEBAIHZvaWQg
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmQKICAgICB0aGlzT2JqZWN0LT5KU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6fkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUp
Cit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSogQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT46OmNhc3RGb3JBdHRy
aWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSo+KHRoaXNWYWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5R2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlUmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlUmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJl
YWRvbmx5R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHkiKTsKIH0KQEAgLTE0Niwy
MiArMTQ2LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWEKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFk
b21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTYgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVBy
b3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5j
dGlvblZhbHVlcyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqKTsK
IAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNz
IEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CkBAIC0xNDEsMjIgKzE0MSwyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJ
dGVyYWJsZSogQmluZGluCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEl0ZXJh
YmxlKj4oc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVy
YWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNUZXN0SXRlcmFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJ
dGVyYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0SXRlcmFibGU6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RJ
dGVyYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJdGVyYWJs
ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRlcmFibGVQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0SXRlcmFibGVQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKj4odGhp
c1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTE4NSw1MiArMTg0LDUyIEBAIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIFRlc3RJdGVyYWJsZUl0ZXJh
dG8KIHRlbXBsYXRlPD4KIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIFRlc3RJdGVyYWJsZUl0ZXJhdG9y
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0SXRlcmFibGUgSXRlcmF0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlc3RJdGVyYWJsZUl0ZXJhdG9yUHJvdG90eXBl
KSB9OwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90
eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3RJdGVyYWJs
ZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3JDYWxsZXIoRXhlY1N0
YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVy
YXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZhbHVlKSk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yQ3JlYXRlPFRlc3RJdGVyYWJsZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9u
S2luZDo6VmFsdWUpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90
eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SXRlcmFibGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcj4oc3RhdGUsICJb
U3ltYm9sLkl0ZXJhdG9yXSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJhYmxl
SXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpLZXlWYWx1ZSkpOworICAgIHJl
dHVybiBpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0
ZXJhdGlvbktpbmQ6OktleVZhbHVlKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVyYWJsZT46OmNhbGxPcGVyYXRpb248anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXI+KHN0YXRlLCAiZW50cmllcyIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25LZXlzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxl
UHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0
aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVy
YXRpb25LaW5kOjpLZXkpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJhYmxl
SXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpLZXkpOwogfQogCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlv
bktleXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEl0ZXJhYmxlPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0NhbGxlcj4oc3RhdGUsICJr
ZXlzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3RJdGVyYWJsZSog
dGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCp0aGlz
T2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1ZSkpOworICAgIHJldHVybiBpdGVyYXRvckNyZWF0
ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZhbHVl
KTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxl
UHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SXRlcmFibGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25W
YWx1ZXNDYWxsZXI+KHN0YXRlLCAidmFsdWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZVByb3Rv
dHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJdGVyYWJs
ZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JGb3JFYWNoPFRlc3RJdGVyYWJsZUl0ZXJhdG9yPigq
c3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yRm9y
RWFjaDxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJs
ZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFj
aChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0SXRlcmFibGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQ2FsbGVyPihzdGF0ZSwgImZvckVhY2giKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTUgKzM0LDE1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3Rv
bUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0
aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b20oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVS
V0N1c3RvbShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlQ3VzdG9tKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRl
UldDdXN0b20oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0
b20oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM5LDkg
KzEzOSw5IEBAIHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3kKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6fkpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Y2FzdEZv
ckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogQmluZGluZ0NhbGxlcjxKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNW
YWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJl
dHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHRoaXNW
YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Y2FzdEZvck9wZXJh
dGlvbihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMTUxLDcgKzE1MSw3IEBAIHRlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVD
dXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1
c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6
YXR0cmlidXRlPGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RBdHRyaWJ1dGVDdXN0b20iKTsKIH0KQEAgLTE2
NSw3ICsxNjUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uCiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRy
aWJ1dGVSV0N1c3RvbUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIpOwogfQpAQCAtMTc3LDIyICsxNzcsMjEgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnRlc3RBdHRyaWJ1dGVSV0N1c3RvbShzdGF0ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUq
Pih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjAzLDkgKzIwMiw5IEBAIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3ImLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9t
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RBdHRyaWJ1dGVS
V0N1c3RvbSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAidGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMjIyLDE4ICsyMjEsMTggQEAgSlNWYWx1
ZSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0QwogICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2Fz
dDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90
b3R5cGVGdW5jdGlvblRlc3RDdXN0b21GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0
aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21GdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQ2FsbGVyPihzdGF0ZSwg
InRlc3RDdXN0b21GdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0
b21GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlw
ZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRl
c3RDdXN0b21GdW5jdGlvbigqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+dGVzdEN1
c3RvbUZ1bmN0aW9uKCpzdGF0ZSk7CiB9CiAKIHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIg
KzM1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlRnVuY3Rpb25NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzUsMjIg
KzEzNSwyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpCiAgICAg
cmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihz
dGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkp
IHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE2NCwxNCArMTYzLDE0IEBAIEpTVmFsdWUgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6Z2UKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENhbGxlcj4oc3RhdGUs
ICJtZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTE3OSw5ICsx
NzgsOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGxpc3RlbmVyID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0
aW9uPEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciIsICJtZXRob2QiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2QobGlzdGVuZXIucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAogYm9vbCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBB
dHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC04MCw3ICs4MCw3
IEBAIHRlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ28KIAogdGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJUZXN0TmFtZWRDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OwogCi10ZW1w
bGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8
PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtOTAsMTMgKzkwLDEzIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCAKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBBU0NJSUxpdGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgYXV0byBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkg
PyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgyKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3Qg
PSBUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcigqY2FzdGVkVGhp
cy0+ZG9jdW1lbnQoKSwgV1RGTW92ZShzdHIxKSwgV1RGTW92ZShzdHIyKSwgV1RGTW92ZShzdHIz
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE5hbWVkQ29uc3RydWN0b3I+Pigqc3RhdGUsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RGTW92ZShvYmplY3QpKTsK
IH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0
cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBAIC0xNTksMjIgKzE1OSwyMSBAQCB2b2lkIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDCiAgICAgdGhpc09iamVjdC0+SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6fkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RO
YW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
OwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewog
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywyMCArMzcsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5j
dGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uU3lt
Ym9sSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRlc3RXb3JrZXJQcm9taXNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04o
SlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5vZGVOYW1lKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE5vZGVQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTc5
LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAogdXNpbmcgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yID0gSlNE
T01Db25zdHJ1Y3RvcjxKU1Rlc3ROb2RlPjsKIAotdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
c3RhdGUpCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtODcsNyArODcsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3ROb2RlQ29uc3RydWN0b3IqPihz
dGF0ZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8gb2Jq
ZWN0ID0gVGVzdE5vZGU6OmNyZWF0ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlPD4gSlNWYWx1ZSBK
U1Rlc3ROb2RlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKQEAgLTE3Miw5ICsxNzIsOSBA
QCBKU09iamVjdCogSlNUZXN0Tm9kZTo6cHJvdG90eXBlKFZNJiB2bSwgCiAgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0Tm9kZSogQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FzdEZv
ckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3ROb2RlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9y
QXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlKj4odGhpc1ZhbHVlKTsK
IH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Tm9kZSogQmluZGluZ0NhbGxlcjxKU1Rlc3RO
b2RlPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMTg0LDcgKzE4NCw3
IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5vZGUqIEJpbmRpbmdDYWwKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vZGUm
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5h
bWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
Tm9kZT46OmF0dHJpYnV0ZTxqc1Rlc3ROb2RlTmFtZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
Im5hbWUiKTsKIH0KQEAgLTE5OCwyMiArMTk4LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3ROb2RlTmFtZUdldHQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0Tm9kZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROb2RlOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJl
dHVybiBKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IEpTVGVzdE5vZGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dE5vZGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0
Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Tm9kZVBy
b3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yMjQsOSArMjIzLDkgQEAgYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3ROb2RlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3ROb2Rl
TmFtZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE5vZGVOYW1lRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
Im5hbWUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE5vZGVOYW1lRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
bmFtZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMjQ2LDI4ICsyNDUsMjggQEAgSlNWYWx1ZSBK
U1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdgogICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3ROb2RlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0Tm9kZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdv
cmtlclByb21pc2VQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwor
c3RhdGljIEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21p
c2VQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3Jr
ZXJQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFBy
b21pc2VGdW5jdGlvbjxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlz
ZVByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+KCpzdGF0ZSkp
OworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5k
b3dPcldvcmtlcj4oKnN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZVByb21pc2UoRXhlY1N0
YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJv
bWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNhbGxQcm9taXNlT3BlcmF0
aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyPihz
dGF0ZSwgV1RGTW92ZShwcm9taXNlKSwgInRlc3RXb3JrZXJQcm9taXNlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25U
ZXN0V29ya2VyUHJvbWlzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUq
IGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShw
cm9taXNlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogc3RydWN0IFRlc3ROb2RlSXRlcmF0b3JUcmFp
dHMgewpAQCAtMjg1LDU3ICsyODQsNTcgQEAgY29uc3QgSlNDOjpDbGFzc0luZm8gVGVzdE5vZGVJ
dGVyYXRvcjo6cwogdGVtcGxhdGU8PgogY29uc3QgSlNDOjpDbGFzc0luZm8gVGVzdE5vZGVJdGVy
YXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGUgSXRlcmF0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFRlc3ROb2RlSXRlcmF0b3JQcm90b3R5cGUpIH07
CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uU3ltYm9sSXRlcmF0b3JDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSogdGhpc09iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb2Rl
KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJh
dGlvbktpbmQ6OlZhbHVlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRlc3ROb2RlSXRl
cmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1ZSk7CiB9CiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1i
b2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNh
bGxPcGVyYXRpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3JDYWxs
ZXI+KHN0YXRlLCAiW1N5bWJvbC5JdGVyYXRvcl0iKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxlcihF
eGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRv
cj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleVZhbHVlKSk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yQ3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5k
OjpLZXlWYWx1ZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJp
ZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJp
ZXNDYWxsZXI+KHN0YXRlLCAiZW50cmllcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXIoRXhlY1N0YXRlKiwg
SlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0Tm9kZUl0ZXJhdG9yPigqdGhpc09i
amVjdCwgSXRlcmF0aW9uS2luZDo6S2V5KSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRl
c3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpLZXkpOwogfQogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyPihzdGF0ZSwgImtleXMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25WYWx1ZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25WYWx1ZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlND
OjpUaHJvd1Njb3BlJikKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yQ3Jl
YXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1ZSkp
OworICAgIHJldHVybiBpdGVyYXRvckNyZWF0ZTxUZXN0Tm9kZUl0ZXJhdG9yPigqdGhpc09iamVj
dCwgSXRlcmF0aW9uS2luZDo6VmFsdWUpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblZhbHVlcyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNhbGxPcGVyYXRpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVmFsdWVzQ2FsbGVyPihzdGF0ZSwgInZhbHVlcyIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbkZvckVhY2hDYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogdGhpc09i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaXRlcmF0b3JGb3JFYWNoPFRlc3ROb2RlSXRlcmF0b3I+KCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHRocm93U2NvcGUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JGb3JFYWNoPFRlc3ROb2Rl
SXRlcmF0b3I+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogfQogCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9y
RWFjaChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyPihzdGF0ZSwgImZvckVhY2gi
KTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogdGhpc09i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChzdGF0ZSk7CkBAIC0zNDQsMTAgKzM0MywxMCBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQCiAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJuYW1lIiksIG5hbWVWYWx1ZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RO
b2RlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxs
ZXI+KHN0YXRlLCAidG9KU09OIik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsMzU1ICsxMDU1LDM1NSBAQCB0ZW1wbGF0ZTw+IFRl
c3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyCiAvLyBGdW5jdGlvbnMKIAogI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V29ybGRTcGVjaWZpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZChKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CeXRlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3Rl
dE1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9i
ak1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpJbnN0
YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVN0cmluZ01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z1N0YXRpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFs
TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoVVNWU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
TnVsbGFibGVVU1ZTdHJpbmdBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQnl0ZVN0cmluZ0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51
bGxhYmxlQnl0ZVN0cmluZ0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQoSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdz
KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25QdWJsaWNBbmRQcml2YXRlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExp
c3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0U3RhdGVPYmooSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZv
aWRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGUoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoRG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlckRvY3Vt
ZW50QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dBcmd1bWVu
dChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFy
Z3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGwoSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmco
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlT
dHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmlu
Z0lzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERv
dWJsZUlzTmFOKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElz
TmFOKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8o
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4oSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBbnkoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE9iamVjdChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVs
bGFibGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxs
YWJsZVdyYXBwZXJJc051bGwoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
UmVjb3JkKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25B
cmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0
aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNr
QW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENh
bGxiYWNrQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2QoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVm9pZE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQnl0ZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT2N0ZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJn
cyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFy
Z3MoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
WFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0
aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNW
U3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZChKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b25SZXR1cm5pbmdMb25nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5p
bmdPYmplY3QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2QoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVy
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlVm9pZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmooSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnQoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENh
bGxlcldpbmRvd0FyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxVU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWlj
U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZh
dWx0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbChKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxGbG9hdElzTmFOKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25n
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxTZXF1ZW5jZUlzRW1wdHkoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVh
bihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051
bGwoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZChKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0
aG9kMihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMoSlND
OjpFeGVjU3RhdGUqKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9u
cyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlz
aGluZ1VuaW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9u
KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1l
dGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNs
YXNzTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbihKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZFdpdGhOdWxsYWJsZVVuaW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFs
VW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
Q2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDIoSlND
OjpFeGVjU3RhdGUqKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSop
OwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoVW5zaWduZWRMb25nU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5
RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
R2V0U1ZHRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0MihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDMoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9p
bnRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRp
Y1N0cmluZ01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2Qo
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
VGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoQ2xhbXAoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdBcnJheUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29udmVydDEoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJs
ZVBvaW50RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNO
b2RlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2QoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQW55KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92
ZXJsb2FkZWRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
Kik7CiAjaWYgRU5BQkxFKENPTkRJVElPTjEpIHx8IEVOQUJMRShDT05ESVRJT04yKQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxPdmVybG9hZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKEpTQzo6
RXhlY1N0YXRlKik7CiAjZW5kaWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9w
ZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmco
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRp
b25hbE92ZXJsb2FkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CdWZmZXJTb3VyY2VQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQnl0
ZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpPY3RldEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hv
cnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNo
b3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9y
dEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9u
Z0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakxvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9ialVzdnN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9i
akF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialRlc3RO
dWxsYWJsZU9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRl
c3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3Jk
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3Jk
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ09i
alJlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFi
bGVPYmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29y
ZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak51bGxhYmxl
RGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50
YXRpb25FbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5B
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
VVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJl
YWRPbmx5VGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yVGVzdFN1Yk9iaihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpCeXRlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpT
aG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVk
U2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2Jq
TG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExv
bmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpMZW5pZW50VGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3Jk
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZURp
Y3Rpb25hcnlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNyZWF0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFs
dWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29s
ZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqRW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqVHlwZWRBcnJheUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVy
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
bmZvbyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqT25mb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT253ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJy
YXlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdp
dGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RP
YmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iak9uZm9vKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iak9ud2Via2l0Zm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25k
aXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b24xKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlm
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnRlbnREb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJs
ZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakltbXV0YWJs
ZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE9ialN0cmF3YmVycnkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
RGVzY3JpcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iaklkKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RPYmpJZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCb29sZWFuQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVTdHJpbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ2Fj
aGVkQXR0cmlidXRlMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpBbnlBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
ak9iamVjdEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
Q29udGVudERvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
ak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpJbW11
dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnko
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqRGVzY3JpcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpJZChKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpJ
ZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpIYXNoKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3Vi
bGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iakF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUHV0
Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNTMzLDcgKzE1MzMsNyBAQCBzdGF0aWNf
YXNzZXJ0KFRlc3RPYmo6OkNPTlNUX1ZBTFVFXzE0ID09CiBzdGF0aWNfYXNzZXJ0KFRlc3RPYmo6
OkNPTlNUX0lNUEwgPT0gMTUsICJDT05TVF9JTVBMIGluIFRlc3RPYmogZG9lcyBub3QgbWF0Y2gg
dmFsdWUgZnJvbSBJREwiKTsKIHN0YXRpY19hc3NlcnQoVGVzdE9iajo6cmVhZG9ubHkgPT0gMCwg
InJlYWRvbmx5IGluIFRlc3RPYmogZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKIAot
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1NDMsMTYgKzE1NDMsMTYgQEAgdGVtcGxhdGU8
PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byB0ZXN0Q2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENh
bGxiYWNrSW50ZXJmYWNlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0
YXRlLCBzY29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgbnVsbHB0cik7IH0p
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdGVz
dENhbGxiYWNrRnVuY3Rpb24gPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0
ZSwgc2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0T2JqZWN0IiwgbnVsbHB0
cik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iik7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSk7CiAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE9iajo6Y3JlYXRlKGRvY3VtZW50LCB0ZXN0
Q2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSwgdGVzdENhbGxiYWNrRnVuY3Rpb24ucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElE
TEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1v
dmUob2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RPYmpDb25zdHJ1Y3Rv
cjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMTk2Myw5ICsxOTYzLDkgQEAgYm9vbCBKU1Rlc3RPYmo6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZQogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAKLXRlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdE9iaiogQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYXN0Rm9y
QXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdE9iaiogQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYXN0Rm9yQXR0
cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiB9CiAK
IHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE9iaiogQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xOTc1LDcgKzE5NzUsNyBAQCB0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RPYmoqIEJpbmRpbmdDYWxsCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlYWRP
bmx5TG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkT25seUxvbmdBdHRyIik7
CiB9CkBAIC0xOTkxLDcgKzE5OTEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlMCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOwogfQpAQCAtMjAwNyw3ICsyMDA3
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5UwogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9u
bHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
cmVhZE9ubHlUZXN0T2JqQXR0ciIpOwogfQpAQCAtMjAyMywxMCArMjAyMywxMCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJik7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9u
bHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdGF0
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRp
Y1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoKnN0YXRlKSk7CisgICAgcmV0dXJuIGpzVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcigqc3RhdGUpOwogfQogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0yMDM4LDEwICsyMDM4LDEwIEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3QKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRl
cigqc3RhdGUpKTsKKyAgICByZXR1cm4ganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdB
dHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTIw
NTMsNyArMjA1Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3QK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iaiIpOwogfQpAQCAtMjA2Nyw3ICsyMDY3LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKIH0KQEAgLTIwODYsNyArMjA4
Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2IKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqRW51bUF0dHJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJlbnVtQXR0ciIpOwogfQpAQCAtMjEwMiw3ICsyMTAyLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyRwogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImJ5dGVBdHRyIik7CiB9CkBAIC0yMTE4LDcgKzIxMTgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQnl0ZUF0dHJHCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpP
Y3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmli
dXRlPGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0QXR0
ciIpOwogfQpAQCAtMjEzNCw3ICsyMTM0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak9jdGV0QXR0cgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialNo
b3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rl
c3RPYmpTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzaG9ydEF0dHIiKTsKIH0K
QEAgLTIxNTAsNyArMjE1MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9y
dEF0dHIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKIH0KQEAgLTIxNjYsNyArMjE2Niw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2gKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9y
dEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyIik7CiB9CkBAIC0yMTgyLDcgKzIxODIsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KQEAg
LTIxOTgsNyArMjE5OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZFMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTG9uZ0F0dHJH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOwogfQpAQCAtMjIxNCw3ICsyMjE0
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyRwogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpMb25nTG9uZ0F0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0KQEAgLTIyMzAs
NyArMjIzMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0EKIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQpAQCAtMjI0Niw3ICsyMjQ2LDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTAogCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0ciIpOwogfQpAQCAtMjI2Miw3ICsyMjYyLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidXN2c3RyaW5nQXR0ciIpOwogfQpAQCAtMjI3OCw3
ICsyMjc4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZwogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpUZXN0T2Jq
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RPYmpBdHRyIik7CiB9CkBAIC0yMjk0
LDcgKzIyOTQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7CiB9CkBAIC0yMzEwLDcgKzIzMTAsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
akxlbmllbnRUZXN0T2JqQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJldHVy
bkVhcmx5PihzdGF0ZSwgdGhpc1ZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CiB9CkBAIC0y
MzI2LDcgKzIzMjYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRl
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVW5m
b3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVuZm9y
Z2VhYmxlQXR0ciIpOwogfQpAQCAtMjM0Miw3ICsyMzQyLDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuZm9yZ2VhYgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nIik7CiB9CkBAIC0yMzU4LDcgKzIzNTgsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVzdnN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KQEAgLTIzNzQs
NyArMjM3NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmcKIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nIik7CiB9CkBAIC0yMzkwLDcgKzIzOTAsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQnl0ZVN0cmluCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTG9u
Z1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0xv
bmdSZWNvcmRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTG9uZ1JlY29yZEF0
dHIiKTsKIH0KQEAgLTI0MDYsNyArMjQwNiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdMb24KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVj
b3JkQXR0ciIpOwogfQpAQCAtMjQyMiw3ICsyNDIyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialVzdnN0cmluZwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2
c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xv
bmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3Zz
dHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xv
bmdSZWNvcmRBdHRyIik7CiB9CkBAIC0yNDM4LDcgKzI0MzgsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdPYmpSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpS
ZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ09ialJl
Y29yZEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdPYmpSZWNvcmRBdHRyIik7
CiB9CkBAIC0yNDU0LDcgKzI0NTQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nT2JqCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJs
ZU9ialJlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxhYmxlT2Jq
UmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0
cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmlu
Z051bGxhYmxlT2JqUmVjb3JkQXR0ciIpOwogfQpAQCAtMjQ3MCw3ICsyNDcwLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bAogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRpY3Rp
b25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImRpY3Rpb25hcnlBdHRyIik7CiB9CkBAIC0yNDg2LDcg
KzI0ODYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZURpY3Rpb25hcnlBdHRyIik7CiB9CkBAIC0yNTAyLDcg
KzI1MDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVECiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiB9CkBAIC0yNTE4LDcg
KzI1MTgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50CiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialhNTE9iakF0dHJH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJYTUxPYmpBdHRyIik7CiB9CkBAIC0yNTM0LDcgKzI1
MzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0CiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNyZWF0ZUdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImNyZWF0ZSIpOwogfQpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNyZWF0ZUdldAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIp
OwogfQpAQCAtMjU2Niw3ICsyNTY2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNW
U3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJp
bmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIp
OwogfQpAQCAtMjU4Miw3ICsyNTgyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50
ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKIH0K
QEAgLTI1OTgsNyArMjU5OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
UmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJy
ZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogfQpAQCAtMjYxNCw3ICsyNjE0LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxq
c1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJl
ZmxlY3RlZEJvb2xlYW5BdHRyIik7CiB9CkBAIC0yNjMwLDcgKzI2MzAsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVUkxBdHRyIik7CiB9CkBAIC0y
NjQ2LDcgKzI2NDYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CiB9CkBAIC0yNjYyLDcgKzI2NjIsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZs
ZWN0ZWRTdHJpbmdBdHRyIik7CiB9CkBAIC0yNjc4LDcgKzI2NzgsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogfQpAQCAtMjY5NCw3
ICsyNjk0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29s
ZWFuQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5B
dHRyIik7CiB9CkBAIC0yNzEwLDcgKzI3MTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21V
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbVVSTEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21VUkxB
dHRyIik7CiB9CkBAIC0yNzI3LDcgKzI3MjcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiB9CkBAIC0yNzQ1
LDcgKzI3NDUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJy
YXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidHlwZWRBcnJheUF0
dHIiKTsKIH0KQEAgLTI3NjEsNyArMjc2MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpUeXBlZEFycmEKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZVdpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdp
dGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KQEAgLTI3NzcsNyArMjc3Nyw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4
Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNl
cHRpb24iKTsKIH0KQEAgLTI3OTMsNyArMjc5Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMjgwOSw3
ICsyODA5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dAogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0yODI1LDcgKzI4MjUsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJjdXN0b21BdHRyIik7CiB9CkBAIC0yODM5LDcgKzI4MzksNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpPbmZvb0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iak9uZm9vR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib25mb28iKTsKIH0KQEAgLTI4
NTMsNyArMjg1Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHQK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqT253
ZWJraXRmb29HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJvbndlYmtpdGZvbyIpOwogfQpAQCAt
Mjg2Nyw3ICsyODY3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
ZgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUi
KTsKIH0KQEAgLTI4ODMsNyArMjg4Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0
aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqV2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogfQpAQCAtMjg5OSw3ICsyODk5LDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsVwogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7CiB9CkBAIC0yOTE4LDcgKzI5MTgsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyIpOwogfQpAQCAtMjkzNCw3ICsyOTM0LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CiB9
CkBAIC0yOTUzLDcgKzI5NTMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlIik7CiB9CkBAIC0yOTcyLDcgKzI5NzIsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzIik7CiB9CkBAIC0yOTkxLDcgKzI5OTEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKIH0KQEAgLTMwMTAsNyArMzAxMCw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUi
KTsKIH0KQEAgLTMwMjcsNyArMzAyNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjFHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHIxIik7CiB9CkBA
IC0zMDQ2LDcgKzMwNDYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFs
QXR0cjIiKTsKIH0KQEAgLTMwNjUsNyArMzA2NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAiY29uZGl0aW9uYWxBdHRyMyIpOwogfQpAQCAtMzA4NCw3ICszMDg0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKQog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NENvbnN0cnVjdG9yR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIp
OwogfQpAQCAtMzEwMSw3ICszMTAxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjVDb25zdHJ1Y3RvckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjUi
KTsKIH0KQEAgLTMxMTgsNyArMzExOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI2Q29uc3RydWN0b3JHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2
Iik7CiB9CkBAIC0zMTM0LDcgKzMxMzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRy
aWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJjYWNoZWRBdHRyaWJ1dGUxIik7CiB9CkBAIC0zMTUzLDcgKzMxNTMsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0CiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNhY2hl
ZEF0dHJpYnV0ZTJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRBdHRyaWJ1dGUyIik7
CiB9CkBAIC0zMTcyLDcgKzMxNzIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q2FjaGVkQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2Jq
QW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImFueUF0dHJp
YnV0ZSIpOwogfQpAQCAtMzE4OCw3ICszMTg4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakFueUF0dHJpYgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJvYmplY3RBdHRyaWJ1dGUiKTsKIH0KQEAgLTMyMDQsNyArMzIwNCw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHQKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29udGVudERv
Y3VtZW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29udGVudERvY3VtZW50Iik7CiB9CkBA
IC0zMjIwLDcgKzMyMjAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29udGVu
dERvCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTXV0YWJs
ZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9iak11dGFibGVQb2ludEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm11dGFibGVQb2ludCIp
OwogfQpAQCAtMzIzNiw3ICszMjM2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak11dGFibGVQbwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9p
bnRHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImltbXV0YWJsZVBvaW50Iik7CiB9CkBAIC0zMjUyLDcgKzMyNTIsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJzdHJhd2JlcnJ5Iik7CiB9CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqU3RyYXdiZXJyCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpEZXNjcmlwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6YXR0cmlidXRlPGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAiZGVzY3JpcHRpb24iKTsKIH0KQEAgLTMyODQsNyArMzI4NCw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGkKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqSWQo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqSWRH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJpZCIpOwogfQpAQCAtMzMwMCw3ICszMzAwLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0
dHJpYnV0ZTxqc1Rlc3RPYmpIYXNoR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaGFzaCIpOwog
fQpAQCAtMzMxNiw3ICszMzE2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhh
c2hHZXR0ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiB9CkBAIC0zMzMy
LDcgKzMzMzIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFiCiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKIH0KQEAg
LTMzNDgsNyArMzM0OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZUQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiB9CkBAIC0zMzY0
LDcgKzMzNjQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMCiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0
ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwog
fQpAQCAtMzM4MCw3ICszMzgwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlQgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nQXR0cmlidXRl
Iik7CiB9CkBAIC0zMzk2LDcgKzMzOTYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpz
VGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTM0MTIsNyArMzQx
Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUwKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTM0MjgsNyArMzQyOCw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVMKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVVU1ZT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxl
VVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTM0NDQsNyArMzQ0NCw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVUKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFi
bGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJu
dWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzQ2MCw3ICszNDYw
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQgogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
bnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogfQpAQCAtMzQ3Niw3ICszNDc2LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyaWJ1dGUiKTsKIH0KQEAgLTM0OTIsNyArMzQ5Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogfQpAQCAt
MzUwOCw3ICszNTA4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CiB9CkBAIC0zNTI0LDcgKzM1
MjQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyCiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFi
bGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdXRGb3J3YXJkc051bGxhYmxl
QXR0cmlidXRlIik7CiB9CkBAIC0zNTQwLDcgKzM1NDAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUHV0Rm9yd2FyCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ2lmaWVy
QXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUi
KTsKIH0KQEAgLTM1NTQsMjIgKzM1NTQsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ2lmaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVj
dCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
T2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RPYmpQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTc4
LDEyICszNTc3LDExIEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoRXhlY1N0YXRlKiAK
ICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9i
akNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgSlNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc3RhdGVQb2ludGVyKTsKICAgICBh
dXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAg
ICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzU5Myw5ICszNTkxLDkgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgdmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM2MDksOSArMzYw
Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2IKIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakVudW1B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW51bUF0
dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW51bUF0dHIiKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqRW51bUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJlbnVtQXR0
ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjMwLDkgKzM2MjgsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpCeXRlQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVBdHRyIik7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakJ5dGVBdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYnl0ZUF0dHIiKTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtMzY0OSw5ICszNjQ3LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakJ5dGVBdHRyRgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAib2N0ZXRBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm9jdGV0QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpA
QCAtMzY2OCw5ICszNjY2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9jdGV0
QXR0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU2hv
cnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAic2hvcnRBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCB2YWx1ZSwgInNob3J0QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzY4Nyw5
ICszNjg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRK
U1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ2xhbXBl
ZFNob3J0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNsYW1wZWRTaG9y
dEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9y
dEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNzA2LDkgKzM3MDQsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNoCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAiZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCkBAIC0zNzI1LDkgKzM3MjMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRW5mb3JjZVJhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialVuc2lnbmVkU2hv
cnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVuc2lnbmVk
U2hvcnRBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtMzc0NCw5ICszNzQyLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialVuc2lnbmVkUwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
LWJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJsb25nQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgImxvbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM3NjMs
OSArMzc2MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckYKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rl
c3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakxvbmdM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImxvbmdMb25nQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKQEAgLTM3ODIsOSArMzc4MCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpMb25nTG9uZ0EKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5zaWdu
ZWRMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
dW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zODAxLDkgKzM3OTksOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0ciIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nQXR0
ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM4MjAsOSArMzgxOCw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJp
bmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJ1c3ZzdHJpbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzgz
OSw5ICszODM3LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNU
ZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJ0ZXN0T2JqQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInRlc3RPYmpBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTM4NTgsOSArMzg1Niw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0
T2JqQXQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0
dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2Jq
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0TnVsbGFi
bGVPYmpBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQpAQCAtMzg3Nyw5ICszODc1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialRlc3ROdWxsYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVu
aWVudFRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJGdW5jdGlvbiwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJldHVybkVh
cmx5PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJsZW5pZW50VGVzdE9iakF0dHIi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24sIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpSZXR1cm5FYXJseT4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJsZW5pZW50VGVzdE9i
akF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM4OTYsOSArMzg5NCw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGUKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCkBAIC0zOTE1LDkgKzM5MTMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialVzdnN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmciKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpAQCAtMzkzNCw5ICszOTMyLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alVzdnN0cmluZwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpCeXRlU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtMzk1Myw5ICszOTUxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakJ5dGVTdHJpbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9u
Z1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJp
bmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzdHJpbmdMb25nUmVjb3JkQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM5NzIsOSArMzk3MCw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb24KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialVz
dnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpV
c3ZzdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0
dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zOTkxLDkgKzM5ODksOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25n
UmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9u
Z1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVl
LCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtNDAxMCw5ICs0MDA4LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialVzdnN0cmluZwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2Jq
UmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdP
YmpSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0
cmluZ09ialJlY29yZEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ09ialJlY29yZEF0dHIiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MDI5LDkgKzQwMjcsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
TnVsbGFibGVPYmpSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0
ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdOdWxsYWJs
ZU9ialJlY29yZEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRy
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9i
alJlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MDQ4LDkgKzQw
NDYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RP
YmpEaWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqRGljdGlv
bmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImRpY3Rpb25hcnlBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiZGljdGlvbmFyeUF0dHIiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQpAQCAtNDA2Nyw5ICs0MDY1LDkgQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakRpY3Rpb25hcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25h
cnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25h
cnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlRGljdGlvbmFyeUF0dHIiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFi
bGVEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm51bGxh
YmxlRGljdGlvbmFyeUF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlRGljdGlvbmFyeUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC00MDg2LDkgKzQwODQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVECiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1B
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakltcGxlbWVu
dGF0aW9uRW51bUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
aW1wbGVtZW50YXRpb25FbnVtQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiaW1wbGVtZW50YXRpb25FbnVtQXR0ciIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVt
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQxMDcsOSArNDEwNSw5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnQKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqWE1MT2Jq
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJYTUxPYmpBdHRy
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJY
TUxPYmpBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDEyNiw5ICs0MTI0LDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dAogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY3JlYXRlIik7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNyZWF0ZSIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNDE0NSw5ICs0MTQzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNy
ZWF0ZUZ1bgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3Rl
ZFN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCkBAIC00MTY0LDkgKzQxNjIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVj
dGVkVVNWU3RyaW5nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTQxODMsOSArNDE4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50
ZWdyYWxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxl
Y3RlZEludGVncmFsQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQyMDIsOSArNDIwMCw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
cmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRV
bnNpZ25lZEludGVncmFsQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC00MjIxLDkgKzQyMTksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxl
Y3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDI0MCw5ICs0MjM4LDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MjU5LDkgKzQyNTcsOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAicmVmbGVjdGVkVVNWVVJMQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRy
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVkVVNWVVJMQXR0ciIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQyNzgsOSArNDI3Niw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0
ZWRTdHJpbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDI5Nyw5
ICs0Mjk1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtNDMxNiw5ICs0MzE0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9v
bGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCB2YWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQzMzUsOSArNDMzMyw5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUs
ICJyZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpAQCAtNDM1NSw5ICs0MzUzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Mzc1LDkgKzQzNzMsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFy
cmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInR5cGVkQXJyYXlBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAidHlwZWRBcnJheUF0dHIiKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtNDM5NCw5ICs0MzkyLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialR5cGVkQXJyYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNl
cHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NDEzLDkgKzQ0MTEsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
U2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYXR0cmli
dXRlV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKQEAgLTQ0MzIsOSArNDQzMCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
biIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NDUxLDkg
KzQ0NDksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDQ3MCw5ICs0NDY4LDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImN1c3RvbUF0dHIiKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
Q3VzdG9tQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImN1c3RvbUF0dHIi
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NDg2LDkgKzQ0ODQsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpPbmZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIm9uZm9vIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAib25mb28iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak9uZm9vRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDUwMiw5ICs0NTAw
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vRnVuYwogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqT253
ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpPbndlYmtpdGZvb0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJv
bndlYmtpdGZvbyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCB2YWx1ZSwgIm9ud2Via2l0Zm9vIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ1MTgs
OSArNDUxNiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGYKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAot
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ1MzcsOSAr
NDUzNSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXAKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhB
bmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdp
dGhBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRo
QW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFs
dWUsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTU2LDkgKzQ1NTQs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtNDU3OCw5ICs0NTc2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
c0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpA
QCAtNDU5Nyw5ICs0NTk1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlcyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTQ2MTksOSArNDYxNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDY0MSw5ICs0
NjM5LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC00NjYzLDkgKzQ2NjEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NDY4NSw5ICs0NjgzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC00NzA1LDkgKzQ3MDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIx
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NzI2LDkgKzQ3MjQsOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJM
RShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIy
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFs
dWUsICJjb25kaXRpb25hbEF0dHIyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NDc0Nyw5ICs0NzQ1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMyIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMyIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ3NjgsOSArNDc2Niw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3Ry
dWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI0Iik7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjRDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNvbmRpdGlv
bmFsQXR0cjQiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ3
ODYsOSArNDc4NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb24K
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiY29uZGl0aW9uYWxBdHRyNSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00ODA0LDkgKzQ4MDIsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFs
QXR0cjYiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNiIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDgyMSw5ICs0ODE5LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYW55QXR0cmlidXRlIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImFu
eUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDg0MCw5ICs0ODM4LDkg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYgogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak9i
amVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm9iamVjdEF0dHJpYnV0ZSIpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDg1OSw5ICs0ODU3LDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak9iamVjdEF0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibXV0YWJsZVBvaW50Iik7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm11dGFi
bGVQb2ludCIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBv
aW50RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDg3OCw5ICs0ODc2LDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQbwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqSW1tdXRh
YmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJpbW11dGFibGVQb2ludCIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImltbXV0YWJsZVBvaW50Iik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKQEAgLTQ4OTcsOSArNDg5NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpJbW11dGFibGUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmF3YmVy
cnlGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJzdHJhd2JlcnJ5Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJhd2JlcnJ5Iik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtNDkxNiw5ICs0OTE0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialN0cmF3YmVycgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iaklkKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJ
ZEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpZCIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJ
ZEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImlkIik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTQ5MzUsOSArNDkzMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1
bmN0aW8KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVwbGFj
ZWFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00OTUxLDkgKzQ5NDksOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFiCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibnVsbGFibGVMb25nU2V0
dGFibGVBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNDk3MCw5ICs0OTY4LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC00OTg5LDkgKzQ5ODcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNW
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTUwMDgsOSArNTAwNiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51
bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFi
bGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAibnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MDI3LDkg
KzUwMjUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTUwNDYsOSArNTA0NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZVMKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhS
ZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVz
ZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51
bVR5cGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MDY3LDkgKzUwNjUs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rl
c3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQpAQCAtNTA4Nyw5ICs1MDg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alB1dEZvcndhcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxh
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MTA5LDkgKzUxMDcsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
c3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpA
QCAtNTE0MSwxNCArNTEzOSwxNCBAQCBKU1ZhbHVlIEpTVGVzdE9iajo6Z2V0Q29uc3RydWN0b3Io
Vk0mIHZtCiB9CiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24x
KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcj4o
c3RhdGUsICJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01MTU2LDIyICs1MTU0LDIyIEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24yQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUxNzks
MTUgKzUxNzcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBh
cmFtKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUyMDcs
MTQgKzUyMDUsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
fQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVj
aWZpY01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZChFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyPihzdGF0
ZSwgIndvcmxkU3BlY2lmaWNNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC01MjIyLDM1ICs1MjIwLDM1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFt
ID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwud29ybGRTcGVjaWZpY01ldGhvZChX
VEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Vm9pZE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVyPihzdGF0ZSwgInZvaWRNZXRob2QiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVm9pZE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpbXBsLnZvaWRNZXRob2QoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lk
TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZv
aWRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Wb2lkTWV0aG9kV2l0aEFyZ3NDYWxsZXI+KHN0YXRlLCAidm9pZE1ldGhvZFdpdGhBcmdzIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUyNTgsMzggKzUyNTYs
MzggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iakFy
ZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgyKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAyLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAidm9pZE1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC52b2lkTWV0
aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2QoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkJ5dGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0
ZU1ldGhvZENhbGxlcj4oc3RhdGUsICJieXRlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETEJ5dGU+KGltcGwuYnl0ZU1ldGhvZCgpKSk7CisgICAgcmV0
dXJuIHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9k
V2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQnl0ZU1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRo
b2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRl
TWV0aG9kV2l0aEFyZ3NDYWxsZXI+KHN0YXRlLCAiYnl0ZU1ldGhvZFdpdGhBcmdzIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ5dGVNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0
aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUyOTcsMzcgKzUyOTUsMzcgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBieXRlQXJnID0gY29udmVydDxJRExCeXRlPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8g
c3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iakFyZyA9IGNv
bnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgyKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAyLCAib2JqQXJnIiwgIlRl
c3RPYmplY3QiLCAiYnl0ZU1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kV2l0aEFyZ3Mo
V1RGTW92ZShieXRlQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExCeXRl
PihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGJ5dGVBcmcpLCBXVEZNb3ZlKHN0ckFy
ZyksICpvYmpBcmcpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PY3RldE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PY3RldE1ldGhvZENhbGxlcj4oc3RhdGUsICJvY3RldE1ldGhvZCIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3Rl
dE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkp
KTsKKyAgICByZXR1cm4gdG9KUzxJRExPY3RldD4oaW1wbC5vY3RldE1ldGhvZCgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXI+KHN0YXRlLCAib2N0ZXRNZXRo
b2RXaXRoQXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTUzMzUsMzcgKzUzMzMsMzcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvY3RldEFyZyA9IGNvbnZlcnQ8SURM
T2N0ZXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvY3RldE1ldGhvZFdpdGhBcmdzIiwg
IlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMT2N0ZXQ+
KGltcGwub2N0ZXRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKG9jdGV0QXJnKSwgV1RGTW92ZShzdHJB
cmcpLCAqb2JqQXJnKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKKyAgICByZXR1cm4gdG9KUzxJRExPY3RldD4oaW1wbC5vY3RldE1ldGhvZFdpdGhBcmdzKFdU
Rk1vdmUob2N0ZXRBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9u
Z01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Mb25nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RDYWxsZXI+KHN0YXRlLCAibG9u
Z01ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdN
ZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25n
PihpbXBsLmxvbmdNZXRob2QoKSkpOworICAgIHJldHVybiB0b0pTPElETExvbmc+KGltcGwubG9u
Z01ldGhvZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01l
dGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQ2FsbGVyPihzdGF0
ZSwgImxvbmdNZXRob2RXaXRoQXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC01MzczLDM3ICs1MzcxLDM3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNv
bnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgImxvbmdNZXRob2RXaXRo
QXJncyIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TExvbmc+KGltcGwubG9uZ01ldGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUo
c3RyQXJnKSwgKm9iakFyZykpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kV2l0aEFyZ3Mo
V1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9i
ak1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PYmpNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9iak1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZENhbGxlcj4oc3RhdGUsICJvYmpNZXRo
b2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxU
ZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0
aG9kKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm9iak1ldGhvZCgpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2JqTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
YmpNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PYmpNZXRob2RXaXRoQXJnc0NhbGxlcj4oc3RhdGUsICJvYmpNZXRob2RXaXRoQXJncyIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RX
aXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTQxMSwzNyArNTQwOSwzNyBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0
byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAi
VGVzdE9iamVjdCIsICJvYmpNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7IH0pOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kV2l0aEFyZ3MoV1RGTW92
ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm9iak1l
dGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW5zdGFu
Y2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2QoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpJbnN0YW5jZUZ1
bmN0aW9uVW5mb3JnZWFibGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9iakluc3RhbmNl
RnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZENhbGxlcj4oc3RhdGUsICJ1bmZvcmdlYWJsZU1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW5z
dGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3Jn
ZWFibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExMb25nPihpbXBsLnVuZm9yZ2VhYmxlTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExM
b25nPihpbXBsLnVuZm9yZ2VhYmxlTWV0aG9kKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhB
cmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVy
PihzdGF0ZSwgIm1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC01NDQ5LDE5ICs1NDQ3LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJn
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
Zyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKGFyZykpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXJDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRl
cihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlcihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVy
UGFyYW1ldGVyQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0
ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC01NDY5LDQyICs1NDY3LDQyIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
cmVzb2x2ZXIgPSBjb252ZXJ0PElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5TUmVzb2x2ZXI+Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoWFBhdGhO
U1Jlc29sdmVyUGFyYW1ldGVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXIoKnJlc29sdmVyKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxs
YWJsZVN0cmluZ01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRob2QoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm51bGxhYmxlU3Ry
aW5nTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLm51
bGxhYmxlU3RyaW5nTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExOdWxsYWJsZTxJRExE
T01TdHJpbmc+Pigqc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdNZXRob2QoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51
bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGlj
TWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExO
dWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIFRlc3RPYmo6Om51bGxhYmxlU3RyaW5nU3Rh
dGljTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+
Pigqc3RhdGUsIFRlc3RPYmo6Om51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKCkpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJs
ZVN0cmluZ1NwZWNpYWxNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhv
ZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z1NwZWNpYWxNZXRob2RDYWxsZXI+KHN0YXRlLCAibnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9k
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTU1MTIsMTggKzU1MTAsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8
SURMVW5zaWduZWRMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5udWxs
YWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoV1RGTW92ZShpbmRleCkpKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETE51bGxhYmxl
PElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2Qo
V1RGTW92ZShpbmRleCkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcj4oc3Rh
dGUsICJtZXRob2RXaXRoRW51bUFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwpAQCAtNTUzMywyMiArNTUzMSwyMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgYXV0byBlbnVtQXJnVmFsdWUgPSBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgVGVzdE9iajo6RW51bVR5cGUgZW51bUFyZzsKICAgICBhdXRvIG9wdGlv
bmFsVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVu
dW1BcmdWYWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvcHRpb25hbFZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CiAgICAgZW51bUFyZyA9IG9wdGlvbmFsVmFsdWUudmFs
dWUoKTsKICAgICBpbXBsLm1ldGhvZFdpdGhFbnVtQXJnKGVudW1BcmcpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1B
cmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxv
bmVFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoU3RhbmRhbG9u
ZUVudW1BcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNTU1OCwyMiArNTU1NiwyMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgYXV0byBlbnVtQXJnVmFsdWUgPSBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgVGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbiBlbnVtQXJnOwog
ICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVF
bnVtZXJhdGlvbj4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoU3RhbmRhbG9uZUVu
dW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RTdGFuZGFsb25lRW51bWVyYXRp
b24+KCkpOwogICAgIGVudW1BcmcgPSBvcHRpb25hbFZhbHVlLnZhbHVlKCk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcoZW51bUFyZyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVu
dW1BcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU1ODIsMjIg
KzU1ODAsMjIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IHN0ZDo6b3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+IGVudW1Bcmc7CiAgICAgaWYgKCFlbnVt
QXJnVmFsdWUuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBlbnVtQXJnID0gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghZW51bUFyZykpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVu
dW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAi
bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVz
dE9iajo6RW51bVR5cGU+KCkpOwogICAgIH0KICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEVu
dW1BcmcoZW51bUFyZyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
RW51bUFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFs
dWVDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFs
dWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU2MDgsMjMgKzU2MDYsMjMgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgICAgICBlbnVtQXJnID0g
VGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7CiAgICAgZWxzZSB7CiAgICAgICAgIGF1dG8g
b3B0aW9uYWxWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0
ZSwgZW51bUFyZ1ZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1B
cmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVu
dW1UeXBlPigpKTsKICAgICAgICAgZW51bUFyZyA9IG9wdGlvbmFsVmFsdWUudmFsdWUoKTsKICAg
ICB9CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKGVu
dW1BcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxs
QXJnc0FuZFRocm93cyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3MiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93c0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhy
b3dzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NjMyLDIwICs1NjMwLDIwIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRv
IG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETElu
dGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwubWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhXVEZNb3Zl
KHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93cyhXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3Ry
aW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdDYWxsZXI+KHN0
YXRlLCAibWV0aG9kV2l0aFVTVlN0cmluZ0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3Ry
aW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU2NTMsMTkgKzU2NTEsMTkgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHIgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFVT
VlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOdWxsYWJsZVVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmdDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
dWxsYWJsZVVTVlN0cmluZ0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5n
QXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
dWxsYWJsZVVTVlN0cmluZ0FyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoTnVsbGFibGVVU1ZT
dHJpbmdBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwpAQCAtNTY3MywxOSArNTY3MSwxOSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0
ciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVVNWU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0
aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJp
bmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3Ry
aW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5n
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNTY5MywxOSArNTY5MSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVVNW
U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmlu
Z0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEJ5dGVTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5n
QXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRl
U3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NzEzLDE5ICs1NzExLDE5
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExCeXRlU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
aW1wbC5tZXRob2RXaXRoQnl0ZVN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0
ZVN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyhFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQ2FsbGVyPihzdGF0ZSwg
Im1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51
bGxhYmxlQnl0ZVN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFi
bGVCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NzMzLDE5ICs1
NzMxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExOdWxsYWJsZTxJRExCeXRl
U3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyhX
VEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5n
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcj4oc3RhdGUsICJt
ZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTc1MywxOSArNTc1MSwxOSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMQnl0ZVN0cmluZz4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TZXJpYWxpemVkVmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZUNhbGxlcj4oc3RhdGUsICJzZXJpYWxpemVkVmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNTc3MywxOSArNTc3MSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcmlhbGl6
ZWRBcmcgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5zZXJpYWxpemVkVmFsdWUo
V1RGTW92ZShzZXJpYWxpemVkQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFJlY29yZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoUmVjb3JkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVj
b3JkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhS
ZWNvcmRDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aFJlY29yZCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoUmVjb3JkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU3OTMsOTMgKzU3OTEsOTMgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBy
ZWNvcmRQYXJhbWV0ZXIgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoUmVjb3JkKFdURk1v
dmUocmVjb3JkUGFyYW1ldGVyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4
Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFeGNlcHRpb25DYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJu
aW5nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb25SZXR1cm5pbmdMb25nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nQ2FsbGVyPihzdGF0ZSwg
Im1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhF
eGNlcHRpb25SZXR1cm5pbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb25SZXR1cm5pbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTG9uZz4oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRp
b25SZXR1cm5pbmdMb25nKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExMb25nPigqc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVy
bmluZ09iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdChFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Q2FsbGVy
PihzdGF0ZSwgIm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0
aW9uUmV0dXJuaW5nT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QoKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZENhbGxlcj4oc3Rh
dGUsICJjdXN0b21NZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpzdGF0ZSkpOworICAg
IHJldHVybiBjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2QoKnN0YXRlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9t
TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcj4oc3RhdGUsICJjdXN0b21NZXRob2RX
aXRoQXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3Mo
KnN0YXRlKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZFdpdGhBcmdzKCpz
dGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZChFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uUHJpdmF0ZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Qcml2YXRlTWV0aG9kQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pihz
dGF0ZSwgInByaXZhdGVNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01
ODg3LDE4ICs1ODg1LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJndW1lbnQgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLnByaXZhdGVNZXRob2QoV1RGTW92ZShhcmd1
bWVudCkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAg
IHJldHVybiB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLnByaXZhdGVNZXRob2QoV1RG
TW92ZShhcmd1bWVudCkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2
YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRl
TWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0Fu
ZFByaXZhdGVNZXRob2RDYWxsZXI+KHN0YXRlLCAicHVibGljQW5kUHJpdmF0ZU1ldGhvZCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1Ymxp
Y0FuZFByaXZhdGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU5MDYsMTgg
KzU5MDQsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
RE9NU3RyaW5nPigqc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFy
Z3VtZW50KSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Cisg
ICAgcmV0dXJuIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0
ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50
TGlzdGVuZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxl
cj4oc3RhdGUsICJhZGRFdmVudExpc3RlbmVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwpAQCAtNTkyNSwyMyArNTkyMywyMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2
ZW50TGlzdGVuZXI8SlNFdmVudExpc3RlbmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksICpjYXN0ZWRUaGlzKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLmFkZEV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwgV1RGTW92
ZShsaXN0ZW5lciksIFdURk1vdmUodXNlQ2FwdHVyZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQ2FsbGVyPihzdGF0ZSwgInJlbW92ZUV2ZW50
TGlzdGVuZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01
OTQ5LDI2OCArNTk0NywyNjggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBhdXRvIGxpc3RlbmVyID0gY29udmVydDxJRExFdmVudExpc3RlbmVy
PEpTRXZlbnRMaXN0ZW5lcj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAq
Y2FzdGVkVGhpcyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgYXV0byB1c2VDYXB0dXJlID0gY29udmVydDxJRExCb29sZWFuPigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgyKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksIFdURk1vdmUobGlzdGVu
ZXIpLCBXVEZNb3ZlKHVzZUNhcHR1cmUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0U3RhdGVWb2lkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdFN0YXRlVm9pZENhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0U3RhdGVWb2lk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdFN0YXRlVm9pZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC53aXRoU2NyaXB0U3RhdGVWb2lk
KCpzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRT
dGF0ZU9iakNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmooRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
Q2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZU9iaiIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
U3RhdGVPYmpDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+
Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3Rh
dGVPYmooKnN0YXRlKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4o
KnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRl
T2JqKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRT
dGF0ZVZvaWRFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJ3
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZv
aWRFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2Vw
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgaW1wbC53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCpzdGF0ZSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRl
T2JqRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0U3RhdGVP
YmpFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0
YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dENhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCpjb250ZXh0
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcj4oc3Rh
dGUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoKnN0YXRlLCAqY29udGV4dCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXI+KHN0YXRlLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVPYmpFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgKmNvbnRleHQpKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0
YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsICpj
b250ZXh0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyhFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDYWxsZXI+KHN0YXRlLCAid2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50
ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygqc3Rh
dGUsICpjb250ZXh0KSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzKCpzdGF0ZSwgKmNvbnRleHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tDYWxsZXI+KHN0YXRlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxT
dGFjayIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKElu
c3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKHN0YXRlLCAwKSk7CiAgICAgaW1wbC53aXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKFdURk1vdmUoc2NyaXB0QXJndW1lbnRzKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnRD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhEb2N1bWVudEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudChFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENh
bGxlcj4oc3RhdGUsICJ3aXRoRG9jdW1lbnRBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1l
bnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQoY29udGV4
dC0+aXNEb2N1bWVudCgpKTsKICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CiAgICAgaW1wbC53aXRoRG9jdW1lbnRBcmd1bWVudChkb2N1bWVudCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlckRvY3Vt
ZW50QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVy
RG9jdW1lbnRBcmd1bWVudChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcj4oc3RhdGUsICJ3aXRoQ2FsbGVyRG9j
dW1lbnRBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byogZG9jdW1lbnQgPSBjYWxsZXJET01XaW5kb3coc3RhdGUpLmRvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC53aXRoQ2Fs
bGVyRG9jdW1lbnRBcmd1bWVudCgqZG9jdW1lbnQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhDYWxsZXJXaW5kb3dBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dB
cmd1bWVudChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dBcmd1bWVudENhbGxl
cj4oc3RhdGUsICJ3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxl
cldpbmRvd0FyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dBcmd1
bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoY2FsbGVy
RE9NV2luZG93KHN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25h
bEFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnKFdU
Rk1vdmUob3B0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
QW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdB
bmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlQ2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25nPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUo
b3B0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5k
T3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcj4oc3RhdGUsICJt
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwpAQCAtNjIxOCwyMSArNjIxNiwyMSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbk9wdCA9IGNvbnZl
cnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1Vu
ZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxJRExMb25nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoV1RG
TW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJn
cyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwpAQCAtNjI0MCw1MDkgKzYyMzgsNTA5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uT3B0ID0gY29udmVy
dDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb3B0MSA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1Vu
ZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxJRExMb25nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8g
c3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgyKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKFdURk1vdmUobm9u
T3B0KSwgV1RGTW92ZShvcHQxKSwgV1RGTW92ZShvcHQyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5n
Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0
cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxVU1ZTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25h
bFVTVlN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkg
OiBjb252ZXJ0PElETFVTVlN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
VVNWU3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQXRvbWljU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJp
bmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEF0b21p
Y1N0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0
b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21p
Y1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcoV1RGTW92ZShzdHIpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0
VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Fu
ZERlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXI+KHN0YXRlLCAibWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImZv
byIpIDogY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21p
Y1N0cmluZ0FuZERlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWlj
U3RyaW5nQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxl
cj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERl
ZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3Rh
dGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmRE
ZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc051bGwoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
TnVsbChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc051bGxDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSXNOdWxsIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJp
bmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1Vu
ZGVmaW5lZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGVy
PihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc1VuZGVmaW5lZChXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJ
c051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENhbGxl
cj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGwiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJp
bmcoc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0
cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5
U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJp
bmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJp
bmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0
cmluZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3Ry
aW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0
cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBjb252ZXJ0PElETFVTVlN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmlu
Z0lzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5
U3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1w
dHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0
eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJp
bmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlBdG9tIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlz
TmFOQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRG91YmxlSXNOYU4oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5DYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsRG91YmxlSXNOYU4iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNO
YU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5DYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOKFdU
Rk1vdmUobnVtYmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
RmxvYXRJc05hTkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElz
TmFOKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU5D
YWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsb2F0SXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVy
dDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxMb25nTG9uZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmciKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDY0X3Q+
KCkgOiBjb252ZXJ0PElETExvbmdMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVyb0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVyb0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bExvbmdMb25nSXNaZXJvKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdp
dGhPcHRpb25hbExvbmdMb25nSXNaZXJvIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExv
bmdMb25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdM
b25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMTG9uZ0xv
bmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJl
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9u
Z0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWdu
ZWRMb25nTG9uZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxVbnNpZ25lZExvbmdMb25nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVuc2ln
bmVkTG9uZ0xvbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9u
Z0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gc3RkOjpvcHRpb25hbDx1aW50NjRfdD4oKSA6IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xv
bmcoV1RGTW92ZShudW1iZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJ
c1plcm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8oRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8oRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9u
Z0lzWmVyb0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25n
SXNaZXJvIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1pl
cm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9u
Z0lzWmVyb0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVk
TG9uZ0xvbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJv
KFdURk1vdmUobnVtYmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNl
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUNhbGxlcj4o
c3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
ZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhcnJheSA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+OjpSZXR1
cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShXVEZNb3Zl
KGFycmF5KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVu
Y2VJc0VtcHR5Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2Vx
dWVuY2VJc0VtcHR5KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHko
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU2VxdWVuY2VJc0VtcHR5Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFNlcXVl
bmNlSXNFbXB0eSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0g
OiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShXVEZNb3ZlKGFy
cmF5KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxCb29sZWFuQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxCb29sZWFuKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5DYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0
aE9wdGlvbmFsQm9vbGVhbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRp
b25hbDxib29sPigpIDogY29udmVydDxJRExCb29sZWFuPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKFdURk1vdmUoYikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEJvb2xlYW5Jc0ZhbHNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYiA9IGNv
bnZlcnQ8SURMQm9vbGVhbj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsQm9vbGVhbklzRmFsc2UoV1RGTW92ZShiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQW55KEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQW55Q2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZFdpdGhPcHRpb25hbEFueSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IGEgPSBjb252ZXJ0PElETEFueT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsQW55KFdURk1vdmUoYSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE9iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdChF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdENhbGxlcj4oc3RhdGUs
ICJtZXRob2RXaXRoT3B0aW9uYWxPYmplY3QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
T2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBz
dGQ6Om9wdGlvbmFsPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PigpIDogY29udmVydDxJRExP
YmplY3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bE9iamVjdChXVEZNb3ZlKGEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxOdWxsYWJsZVdyYXBwZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxh
YmxlV3JhcHBlcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxh
YmxlV3JhcHBlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJs
ZVdyYXBwZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgW10oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0aG9k
V2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxOdWxsYWJsZVdyYXBwZXIoV1RGTW92ZShvYmopKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGxDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFi
bGVXcmFwcGVySXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJs
ZVdyYXBwZXJJc051bGxDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVX
cmFwcGVySXNOdWxsIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBl
cklzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdy
YXBwZXJJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgW10o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsIiwgIlRlc3RPYmoiKTsgfSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwoV1RGTW92ZShvYmopKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsWFBhdGhOU1Jlc29sdmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlcihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJD
YWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
cmVzb2x2ZXIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5T
UmVzb2x2ZXI+Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9w
dGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbFhQYXRoTlNSZXNvbHZlcihXVEZNb3ZlKHJlc29sdmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsUmVjb3JkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmQoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUmVj
b3JkQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFJlY29yZCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsUmVjb3JkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHJlY29yZCA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpudWxsb3B0IDogY29udmVydDxJRExOdWxsYWJsZTxJ
RExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFJlY29yZChXVEZNb3ZlKHJlY29yZCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNjc1MCwxOSArNjc0OCwxOSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RD
YWxsYmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihz
dGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxs
YmFja0FyZyIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC02NzcwLDM5ICs2NzY4LDM5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252
ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAiY2FsbGJhY2siLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBjYWxsYmFj
ay5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlv
bmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhDYWxsYmFj
a0FuZE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExD
YWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIs
ICJtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0
aW9uQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1
bmN0aW9uQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC02ODEwLDE5ICs2ODA4LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gY2Fs
bGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlv
bj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAs
ICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJn
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoY2FsbGJhY2sucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2Fs
bGJhY2tGdW5jdGlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTY4MzAsNDMgKzY4MjgsNDMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFj
ayA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJ
RExDYWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNrRnVuY3Rpb24+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAiY2FsbGJhY2siLCAiVGVz
dE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJn
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhXVEZNb3Zl
KG5vbkNhbGxiYWNrKSwgY2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9w
dGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFs
QXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
YWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gY2FsbGJh
Y2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbj4+Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAw
LCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFu
ZE9wdGlvbmFsQXJnIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyhX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNr
QW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+
Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAic3RhdGljTWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxi
YWNrQW5kT3B0aW9uYWxBcmcoV1RGTW92ZShjYWxsYmFjaykpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRo
Q2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY4
NzQsNzUgKzY4NzIsNzUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
bwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2Fs
bGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUs
IHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2Fs
bGJhY2tBcmciKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMUNhbGxlcj4oc3RhdGUsICJjb25kaXRpb25hbE1l
dGhvZDEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLmNvbmRpdGlvbmFsTWV0aG9kMSgpKSk7
CisgICAgcmV0dXJuIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwuY29uZGl0aW9uYWxN
ZXRob2QxKCkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFC
TEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDJDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMkNhbGxlcj4oc3RhdGUs
ICJjb25kaXRpb25hbE1ldGhvZDIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC5j
b25kaXRpb25hbE1ldGhvZDIoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0
aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b25kaXRpb25hbE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxN
ZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsTWV0aG9kM0NhbGxlcj4oc3RhdGUsICJjb25kaXRpb25hbE1ldGhvZDMiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9k
M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1ldGhvZDMoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUNhbGxlcj4oc3RhdGUsICJv
dmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC02OTUwLDIxICs2OTQ4LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqQXJnIiwg
IlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gc3RyQXJnID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShvYmpBcmcpLCBXVEZNb3ZlKHN0ckFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNjk3MiwyMSArNjk3MCwyMSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRN
ZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdB
cmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQ2FsbGVyPihz
dGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTY5OTQsMTkgKzY5OTIsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3Zl
KHN0ckFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRDYWxs
ZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
NENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNzAxNCwxOSArNzAxMiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcg
PSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1v
dmUobG9uZ0FyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q1Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVD
YWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kNUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtNzAzNCwxOSArNzAzMiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGNhbGxi
YWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFj
ZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAs
ICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiKTsgfSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kKGNhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q2Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNihFeGVjU3RhdGUq
IHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDYoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDZDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzA1NCwxOSArNzA1MiwxOSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFj
ZTxET01TdHJpbmdMaXN0Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBb
XShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJsaXN0QXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZCIsICJET01TdHJpbmdMaXN0Iik7IH0pOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChX
VEZNb3ZlKGxpc3RBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
N0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kN0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q3Q2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDdDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTcwNzQsMTkgKzcwNzIsMTkgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBh
cnJheUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShhcnJheUFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q4Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOChFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDgoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhD
YWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kOENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOENhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtNzA5NCwxOSArNzA5MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFy
ZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZCgqb2JqQXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
OUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kOUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q5Q2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTcxMTQsMTkgKzcxMTIsMTkgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB3
aW5kb3cgPSBjb252ZXJ0PElETEludGVyZmFjZTxET01XaW5kb3c+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAi
d2luZG93IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJET01XaW5kb3ciKTsg
fSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kKCp3aW5kb3cpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxMENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMChFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEwKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMENhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxMENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTcxMzQsMTkgKzcxMzIsMTkgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5n
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZN
b3ZlKGFycmF5QXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEx
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MTEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDExQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDExQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzE1NCwxOSArNzE1MiwxOSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGFycmF5QXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJy
YXlBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJD
YWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC03MTc0LDMwICs3MTcyLDMwIEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3Ry
QXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2QoV1RGTW92ZShzdHJBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDEzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTMoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMTNDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMTNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGJsb2JBcmdzID0gY29udmVydFZhcmlhZGljQXJndW1lbnRz
PElETEludGVyZmFjZTxCbG9iPj4oKnN0YXRlLCAwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShibG9i
QXJncy5hcmd1bWVudHMudmFsdWUoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC03MjQzLDE0ICs3MjQxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9w
dGlvbmFsUGFyYW1ldGVyMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBh
cmFtZXRlcjEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjFDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aE9wdGlvbmFsUGFyYW1ldGVyMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NzI1OCwyMSArNzI1NiwyMSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9h
ZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUoc3RyQXJnKSwgV1RGTW92ZShvYmpBcmcp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFy
YW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhPcHRpb25hbFBhcmFtZXRlcjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyQ2FsbGVyPihzdGF0ZSwgIm92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
QEAgLTcyODAsMTQgKzcyNzgsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmci
LCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwg
IlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBz
dGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1w
bC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUob2JqQXJnKSwg
V1RGTW92ZShsb25nQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTczMTIs
MTQgKzczMTAsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGlu
Z3Vpc2hpbmdVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVy
PihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTczMjcsMTkgKzczMjUsMTkgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKG9iamVjdE9y
Tm9kZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGlu
Z3Vpc2hpbmdVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVy
PihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTczNDcsMTIgKzczNDUsMTIgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB2YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbihFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC03MzcxLDE0ICs3MzY5LDE0IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczFDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGlu
Z1VuaW9uczEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5p
b25zMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczFDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRl
ZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwpAQCAtNzM4NiwxOSArNzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVjdE9yTm9k
ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8
VGVzdE5vZGU+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoV1RGTW92ZShvYmplY3RPck5vZGUpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1Vu
aW9uczJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
MkRpc3Rpbmd1aXNoaW5nVW5pb25zMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczJDYWxsZXI+
KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzQwNiwxMiArNzQwNCwxMiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHZhbHVlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdEludGVyZmFj
ZT4sIElETERPTVN0cmluZywgSURMTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKFdURk1vdmUodmFs
dWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hp
bmdVbmlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5p
b25zKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NDMyLDE0ICs3
NDMwLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBy
ZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1
aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1Vu
aW9uMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1Vu
aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1
aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03NDQ3LDIxICs3NDQ1
LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgMSwgIm9iamVjdCIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRo
b2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSwgKm9iamVj
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5n
dWlzaGluZ1VuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbjJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGlu
Z1VuaW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5n
dWlzaGluZ1VuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzQ2OSwxNCArNzQ2
NywxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURM
SW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2Rl
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgMSwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9k
V2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iLCAiVGVzdE5vZGUiKTsgfSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9k
V2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpLCAqbm9kZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9u
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NDkyLDE0ICs3NDkw
LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1
cm4gYXJnc0NvdW50IDwgMiA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhO
dWxsYWJsZVVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE51bGxhYmxlVW5pb24xKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0
aE51bGxhYmxlVW5pb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjFDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjFDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKQEAgLTc1MDcsMTkgKzc1MDUsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpl
Y3RPck5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVuaW9uPElETEludGVyZmFjZTxUZXN0
T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGVVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhOdWxsYWJsZVVuaW9uMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkNhbGxlcj4oc3RhdGUsICJvdmVybG9hZFdp
dGhOdWxsYWJsZVVuaW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC03NTI3LDEyICs3NTI1LDEyIEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5k
ZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJs
ZVVuaW9uKFdURk1vdmUoaW5kZXgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGVVbmlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzU1MywzMiArNzU1MSwzMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIGFyZ3NDb3Vu
dCA8IDEgPyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlv
bjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bFVuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZFdpdGhPcHRpb25hbFVu
aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9i
amVjdE9yTm9kZSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNv
bnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihXVEZNb3ZlKG9iamVj
dE9yTm9kZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5p
b24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMihFeGVjU3Rh
dGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJDYWxsZXI+KHN0YXRlLCAi
b3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bFVuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzU4NiwxMiArNzU4NCwxMiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRX
aXRoT3B0aW9uYWxVbmlvbihXVEZNb3ZlKGluZGV4KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkV2l0aE9wdGlvbmFsVW5pb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24o
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc2MTMsMTQgKzc2MTEs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25E
aXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hp
bmdQYXJhbWV0ZXIxKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNo
aW5nUGFyYW1ldGVyMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMUNhbGxlcj4oc3Rh
dGUsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQ
YXJhbWV0ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03NjI4LDIxICs3NjI2LDIx
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRX
aXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gbm9kZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgIm5vZGUiLCAi
VGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1l
dGVyIiwgIlRlc3ROb2RlIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1Bh
cmFtZXRlcihXVEZNb3ZlKG9iaiksICpub2RlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5n
dWlzaGluZ1BhcmFtZXRlcjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGlu
Z3Vpc2hpbmdQYXJhbWV0ZXIyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVy
PihzdGF0ZSwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRl
cjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlz
aGluZ1BhcmFtZXRlcjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc2NTAsMTQgKzc2
NDgsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBub2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdE5vZGU+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJv
dmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3ROb2Rl
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1
dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhO
dWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKFdURk1vdmUobm9kZSksIFdURk1vdmUo
aW5kZXgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5n
dWlzaGluZ1BhcmFtZXRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5n
dWlzaGluZ1BhcmFtZXRlcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtNzY3NCwzNCArNzY3MiwzNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDIgPyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uQ2xhc3NNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVGVzdE9iajo6Y2xhc3NNZXRob2QoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25D
bGFzc01ldGhvZFdpdGhPcHRpb25hbChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETExvbmc+KFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdU
Rk1vdmUoYXJnKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9u
YWwoV1RGTW92ZShhcmcpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01l
dGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpjbGFzc01ldGhvZDIoc3RhdGUpKTsKKyAgICBy
ZXR1cm4gSlNUZXN0T2JqOjpjbGFzc01ldGhvZDIoc3RhdGUpOwogfQogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDExKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NzA5LDE1ICs3
NzA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTc3MjUsMTUgKzc3MjMsMTUgQEAgc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kMShXVEZNb3ZlKHR5cGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc3NTMs
MTQgKzc3NTEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwog
fQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXI+
KHN0YXRlLCAiY2xhc3NNZXRob2RXaXRoQ2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRo
Q2xhbXBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc3NjgsMjEgKzc3NjYsMjEgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBv
YmpBcmdzU2hvcnQgPSBjb252ZXJ0PElETFVuc2lnbmVkU2hvcnQ+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9i
akFyZ3NMb25nID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmNsYXNz
TWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9u
ZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUNhbGxlcj4oc3RhdGUsICJj
bGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5m
b3JjZVJhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5n
ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzc5MCwyMSArNzc4OCwyMSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgaW1wbC5jbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoV1RGTW92ZShv
YmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5j
ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWdu
ZWRMb25nU2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhV
bnNpZ25lZExvbmdTZXF1ZW5jZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2Vx
dWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03ODEyLDE5ICs3ODEwLDE5IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdW5zaWduZWRMb25nU2VxdWVuY2UgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVu
c2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhV
bnNpZ25lZExvbmdTZXF1ZW5jZShXVEZNb3ZlKHVuc2lnbmVkTG9uZ1NlcXVlbmNlKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdB
cnJheUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXI+KHN0
YXRlLCAic3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTc4MzIsMTggKzc4MzAsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZXMg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRv
SlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbihXVEZNb3ZlKHZh
bHVlcykpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9t
U3RyaW5nTGlzdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9u
Q2FsbGVyPihzdGF0ZSwgImRvbVN0cmluZ0xpc3RGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJp
bmdMaXN0RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03ODUxLDE4ICs3ODQ5LDE4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdmFsdWVzID0gY29udmVydDxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIDAsICJ2YWx1ZXMiLCAiVGVzdE9iamVjdCIsICJkb21TdHJpbmdMaXN0RnVuY3Rp
b24iLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmRvbVN0cmluZ0xpc3RGdW5jdGlvbigqdmFsdWVz
KSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1
cm4gdG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmRvbVN0cmluZ0xpc3RGdW5jdGlvbigq
dmFsdWVzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVT
ZXF1ZW5jZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRo
b3V0TnVsbGFibGVTZXF1ZW5jZUNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoQW5kV2l0aG91dE51
bGxhYmxlU2VxdWVuY2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNl
cXVlbmNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVT
ZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzg3MCwyMSArNzg2OCwyMSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExVbnNpZ25l
ZExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBudWxsYWJsZUFycmF5QXJn
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+Pj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJs
ZVNlcXVlbmNlKFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5
SWQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyPihzdGF0ZSwgImdldEVsZW1lbnRCeUlk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1l
bnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03ODkyLDMzICs3ODkwLDMzIEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gZWxlbWVudElkID0gQXRvbWljU3RyaW5nKHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3RhdGUp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8RWxlbWVudD4+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5n
ZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETE51bGxhYmxlPElETElu
dGVyZmFjZTxFbGVtZW50Pj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVudElkKSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdE
b2N1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25HZXRTVkdEb2N1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2Fs
bGVyPihzdGF0ZSwgImdldFNWR0RvY3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR0RvY3VtZW50Pj4oKnN0YXRlLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoKnN0YXRlLCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSk7Cisg
ICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFNWR0RvY3VtZW50Pj4oKnN0YXRlLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoKnN0YXRlLCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29udmVydDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUNhbGxlcj4oc3RhdGUsICJjb252ZXJ0MSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzkyNiwxOSArNzkyNCwxOSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAi
dmFsdWUiLCAiVGVzdE9iamVjdCIsICJjb252ZXJ0MSIsICJUZXN0Tm9kZSIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmNvbnZlcnQxKCp2
YWx1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0MihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252
ZXJ0MkNhbGxlcj4oc3RhdGUsICJjb252ZXJ0MiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db252ZXJ0MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzk0
NiwxOSArNzk0NCwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgInZhbHVlIiwgIlRlc3RP
YmplY3QiLCAiY29udmVydDIiLCAiVGVzdE5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5jb252ZXJ0MihXVEZNb3ZlKHZhbHVlKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252
ZXJ0MyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0Nh
bGxlcj4oc3RhdGUsICJjb252ZXJ0MyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzk2NiwxOSAr
Nzk2NCwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLmNvbnZlcnQzKFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0NENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0NENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Q2FsbGVyPihzdGF0ZSwgImNvbnZl
cnQ0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03OTg2LDY1ICs3OTg0LDY1IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICBpbXBsLmNvbnZlcnQ0KFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
dXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyPihzdGF0ZSwgIm11dGFibGVQ
b2ludEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpOworICAg
IHJldHVybiB0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
bW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rp
b24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcj4oc3RhdGUs
ICJpbW11dGFibGVQb2ludEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rp
b25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0YWJsZVBvaW50
RnVuY3Rpb24oKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpz
dGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0YWJsZVBvaW50RnVu
Y3Rpb24oKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZUNhbGxlcj4oc3RhdGUsICJv
cmFuZ2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaW1wbC5iYW5hbmEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRp
Y1N0cmluZ01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZhcmlhZGljU3RyaW5nTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyPihzdGF0ZSwgInZhcmlhZGljU3RyaW5n
TWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04
MDUyLDIxICs4MDUwLDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlhZGljQXJndW1lbnRzPElETERP
TVN0cmluZz4oKnN0YXRlLCAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLnZhcmlhZGljU3RyaW5nTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1v
dmUodGFpbC5hcmd1bWVudHMudmFsdWUoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljRG91YmxlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNEb3VibGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RDYWxsZXI+KHN0YXRlLCAidmFyaWFkaWNEb3Vi
bGVNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTgwNzQsMjEgKzgwNzIsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJRExVbnJl
c3RyaWN0ZWREb3VibGU+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHRhaWwgPSBj
b252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqc3RhdGUsIDEp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudmFy
aWFkaWNEb3VibGVNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsLmFyZ3VtZW50cy52
YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9k
ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9k
Q2FsbGVyPihzdGF0ZSwgInZhcmlhZGljTm9kZU1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05v
ZGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC04MDk2LDIxICs4MDk0LDIxIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
aGVhZCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiaGVhZCIs
ICJUZXN0T2JqZWN0IiwgInZhcmlhZGljTm9kZU1ldGhvZCIsICJOb2RlIik7IH0pOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdGFpbCA9IGNvbnZl
cnRWYXJpYWRpY0FyZ3VtZW50czxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgMSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC52YXJpYWRpY05v
ZGVNZXRob2QoKmhlYWQsIFdURk1vdmUodGFpbC5hcmd1bWVudHMudmFsdWUoKSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNV
bmlvbk1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZChFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyPihzdGF0
ZSwgInZhcmlhZGljVW5pb25NZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC04MTE4LDIxICs4MTE2LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaGVhZCA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlhZGlj
QXJndW1lbnRzPElETFVuaW9uPElETEludGVyZmFjZTxOb2RlPiwgSURMRE9NU3RyaW5nPj4oKnN0
YXRlLCAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLnZhcmlhZGljVW5pb25NZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsLmFyZ3Vt
ZW50cy52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Bbnko
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyPihzdGF0
ZSwgImFueSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC04MTQwLDUzICs4MTM4LDUzIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBhdXRvIGIgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5hbnkoV1RGTW92
ZShhKSwgV1RGTW92ZShiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+
KCpzdGF0ZSkpOworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UsIFByb21pc2VFeGVjdXRpb25T
Y29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNl
KEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlz
ZU9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25D
YWxsZXI+KHN0YXRlLCBXVEZNb3ZlKHByb21pc2UpLCAidGVzdFByb21pc2VGdW5jdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rp
b24oV1RGTW92ZShwcm9taXNlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRmxvYXRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fs
bFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2lu
ZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRQ
cm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSogc3Rh
dGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRB
cmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxQcm9t
aXNlT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhGbG9hdEFyZ3VtZW50Q2FsbGVyPihzdGF0ZSwgV1RGTW92ZShwcm9taXNlKSwgInRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwpAQCAtODE5NCw3NyArODE5Miw3NyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZs
b2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEZsb2F0QXJndW1lbnQoV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25DYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2Nv
cGUmKTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
RnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5k
b3dPbmx5Pigqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlz
ZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5Pigqc3RhdGUpOwogfQogCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlz
ZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbFByb21pc2VPcGVyYXRpb248
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlv
bkNhbGxlcj4oc3RhdGUsIFdURk1vdmUocHJvbWlzZSksICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aEV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUs
IGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJ
bnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlv
bmFsSW50QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRp
b25hbEludEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
KTsKK3N0YXRpYyBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1
bWVudChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlLCBQcm9t
aXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkpOworICAgIHJldHVybiBjYWxs
UHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50UHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3Bl
OjpXaW5kb3dPbmx5Pigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25h
bEludEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKEV4
ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudENhbGxlcj4oc3RhdGUsIFdURk1vdmUocHJvbWlzZSksICJ0ZXN0UHJvbWlzZUZ1bmN0
aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhPcHRpb25hbEludEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFy
Z3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxp
bnQzMl90PigpIDogY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudGVzdFByb21pc2VG
dW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KFdURk1vdmUoYSksIFdURk1vdmUocHJvbWlz
ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9u
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYsIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZShFeGVjU3RhdGUq
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKK3N0YXRpYyBKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZShFeGVjU3Rh
dGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0
aW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRv
d09ubHk+KCpzdGF0ZSkpOworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZSwg
UHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5Pigqc3RhdGUpOwogfQogCi1zdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21p
c2VPdmVybG9hZGVkRnVuY3Rpb24xUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNT
dGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcj4o
c3RhdGUsIFdURk1vdmUocHJvbWlzZSksICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2Fk
ZWRGdW5jdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtODI3MiwyNyArODI3MCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBj
b252ZXJ0PElETEZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC50ZXN0UHJv
bWlzZU92ZXJsb2FkZWRGdW5jdGlvbihXVEZNb3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMlByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMlByb21pc2UoRXhlY1N0YXRlKiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjIoRXhl
Y1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJv
bWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9h
ZGVkRnVuY3Rpb24yUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5Pigq
c3RhdGUpKTsKKyAgICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMlByb21pc2UsIFByb21pc2VF
eGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3Zlcmxv
YWRlZEZ1bmN0aW9uMlByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqIHN0
YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbFByb21pc2VPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXI+KHN0YXRlLCBX
VEZNb3ZlKHByb21pc2UpLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24iKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rp
b24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKQEAgLTgzMDAsMTIgKzgyOTgsMTIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byByZXF1ZXN0ID0gY29u
dmVydDxJRExJbnRlcmZhY2U8RmV0Y2hSZXF1ZXN0Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgInJlcXVlc3Qi
LCAiVGVzdE9iamVjdCIsICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsICJGZXRjaFJl
cXVlc3QiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC50ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbigqcmVxdWVzdCwgV1RGTW92ZShw
cm9taXNlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODMyMiw2MyArODMyMCw2MyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEg
PyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljUHJvbWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKK3N0YXRpYyBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljUHJvbWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3Rh
dGljUHJvbWlzZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgQVNTRVJUKHN0YXRl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Qcm9taXNlLCBQ
cm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkpOworICAgIHJldHVybiBj
YWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGlj
UHJvbWlzZUZ1bmN0aW9uUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5
Pigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3Rh
dGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVu
Y3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihXVEZNb3ZlKHByb21pc2Up
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJv
bWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKK3N0YXRpYyBKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0
aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RT
dGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNl
RnVuY3Rpb248anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVu
Y3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dP
bmx5Pigqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Q
cm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUq
IHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rp
b25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmIHByb21pc2UpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIFRl
c3RPYmo6OnRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKFdURk1vdmUocHJv
bWlzZSkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RD
dXN0b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlJlamVjdFByb21pc2U+KHN0YXRlLCAidGVzdEN1c3RvbVByb21pc2VGdW5jdGlv
biIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RDdXN0b21Qcm9taXNl
RnVuY3Rpb24oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnRlc3RDdXN0b21Qcm9t
aXNlRnVuY3Rpb24oKnN0YXRlKTsKIH0KIAogI2lmIEVOQUJMRShDT05ESVRJT04xKQotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUNhbGxlcj4oc3RhdGUsICJjb25kaXRpb25h
bE92ZXJsb2FkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC04Mzg2LDIyICs4Mzg0LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05ESVRJT04yKQotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyKEV4
ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcj4oc3RhdGUsICJjb25kaXRp
b25hbE92ZXJsb2FkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC04NDA5LDE1ICs4NDA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9u
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09ORElUSU9OMSkgfHwgRU5BQkxF
KENPTkRJVElPTjIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVy
bG9hZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODQzNywxNCAr
ODQzNSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiB9CiAj
ZW5kaWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9h
ZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92
ZXJsb2FkMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVD
b25kaXRpb25hbE92ZXJsb2FkMUNhbGxlcj4oc3RhdGUsICJzaW5nbGVDb25kaXRpb25hbE92ZXJs
b2FkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC04NDUyLDIwICs4NDUwLDIwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RG
TW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjaWYgRU5BQkxFKENPTkRJVElPTikKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25k
aXRpb25hbE92ZXJsb2FkMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDIoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZDJDYWxsZXI+KHN0YXRlLCAic2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5n
bGVDb25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtODQ3
MywxNCArODQ3MSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoYSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtODQ5NywxNCArODQ5NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEgPyB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSkg
OiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hh
ZG93Um9vdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25BdHRhY2hTaGFkb3dSb290Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dS
b290KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRv
d1Jvb3RDYWxsZXI+KHN0YXRlLCAiYXR0YWNoU2hhZG93Um9vdCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hT
aGFkb3dSb290Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3RDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg1MTIsMTkgKzg1MTAsMTkgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBp
bml0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KFdURk1vdmUoaW5pdCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQ
YXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlckNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4
dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFs
RGljdGlvbmFyeVBhcmFtZXRlcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyPihzdGF0
ZSwgIm9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC04NTMyLDE5ICs4NTMwLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gZGlj
dCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFy
YW1ldGVyKFdURk1vdmUoZGljdCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJj
ZVBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlcihFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
QnVmZmVyU291cmNlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlckNhbGxlcj4oc3RhdGUsICJidWZmZXJTb3VyY2VQ
YXJhbWV0ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtODU1MiwyNyArODU1MCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGRhdGEgPSBjb252ZXJ0PElETEJ1
ZmZlclNvdXJjZT4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuYnVmZmVyU291cmNl
UGFyYW1ldGVyKFdURk1vdmUoZGF0YSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3Ry
aW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXI+KHN0YXRlLCAidG9TdHJpbmciKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwgaW1wbC5z
dHJpbmdpZmllckF0dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMVVNWU3RyaW5nPigq
c3RhdGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CkBAIC04
NTkzLDEwICs4NTkxLDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHIKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdBdHRyIiksIGxvbmdB
dHRyVmFsdWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXI+KHN0YXRlLCAidG9KU09OIik7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVzCiAKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAKIHVzaW5nIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz47CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzUsMTIgKzc1LDEyIEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBjb252ZXJ0PElETEludGVyZmFjZTxBcnJheUJ1ZmZlcj4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIDAsICJhcnJheUJ1ZmZlciIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlciIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpjcmVhdGUoKmFycmF5QnVmZmVyKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkp
OworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZN
b3ZlKG9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVj
dEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkwLDEyICs5MCwxMiBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEFycmF5
QnVmZmVyVmlldz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJhcnJheUJ1ZmZlclZpZXciLCAiVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXJWaWV3Iik7IH0pOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0g
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlclZpZXcucmVsZWFz
ZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
c3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0K
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzMyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDUsMTIgKzEwNSwxMiBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJs
b2IgPSBjb252ZXJ0PElETEludGVyZmFjZTxCbG9iPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImJsb2IiLCAi
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQmxvYiIpOyB9KTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoKmJsb2IpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoRXhlY1N0YXRlKiBzdGF0
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzNChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTIwLDEy
ICsxMjAsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJpbmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0
ZShXVEZNb3ZlKHN0cmluZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5
Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczUoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNShFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTMzLDEyICsxMzMsMTIgQEAgc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmpz
Q2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRvIGxvbmdBcmdzID0g
Y29udmVydFZhcmlhZGljQXJndW1lbnRzPElETExvbmc+KCpzdGF0ZSwgMCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUobG9uZ0FyZ3MpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCi10ZW1wbGF0ZTw+IEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMjIsMjIgKzIy
MiwyMSBAQCB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmRlc3RyCiAgICAgdGhp
c09iamVjdC0+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6fkpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQ
cm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewog
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKIAogY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtNjUsNyAr
NjUsNyBAQCBwcml2YXRlOgogCiB1c2luZyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yPEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+OwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTczLDEyICs3MywxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGNvbnN0cnVjdEpTCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxs
ZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmlu
Z3MgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0g
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNl
cXVlbmNlT2ZTdHJpbmdzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkp
KTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMihF
eGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC04OCwxMiArODgsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJpbmcg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2Jq
ZWN0KSk7CiB9CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmNvbnN0cnVj
dChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE3MywyMiArMTcz
LDIxIEBAIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXEKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjp+SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitK
U1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
ZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3Rv
dHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJy
aWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDEyICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0
aW9ucwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3ZlcnJpZGVC
dWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVu
Y3Rpb25OYW1lZEl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
IAogY2xhc3MgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTY3LDIyICsxNjcsMjEgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0T3ZlcnJpZGVCdWlsdGlucwogICAgIHJldHVybiBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4oc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KHRo
aXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
c1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcnJpZGVC
dWlsdGluc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmpl
Y3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDcsMTQgKzIwNiwxNCBAQCBKU1ZhbHVlIEpTVGVzdE92
ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE92ZXJyaWRl
QnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rp
b25OYW1lZEl0ZW0oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25OYW1lZEl0ZW0oRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25O
YW1lZEl0ZW1DYWxsZXI+KHN0YXRlLCAibmFtZWRJdGVtIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rp
b25OYW1lZEl0ZW1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rp
b25OYW1lZEl0ZW1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0y
MjIsOCArMjIxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
Lm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0
ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5h
bWUpKSk7CiB9CiAKIGJvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc093bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNw
cAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiAr
MzUsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5j
dGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0YXRl
Kik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNl
Y29uZExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFs
dWUpOwogCiBjbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDUsOSArMTQ1LDkgQEAgdm9pZCBKU1Rl
c3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SgogICAgIHRoaXNPYmplY3QtPkpTVGVzdFNl
cmlhbGl6YXRpb246On5KU1Rlc3RTZXJpYWxpemF0aW9uKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlv
bj46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVl
IHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFs
aXphdGlvbio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KHRoaXNWYWx1ZSk7CiB9CiAKIHRlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTE1Nyw3
ICsxNTcsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBCCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJp
bmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1
dGU8anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTE3Myw3ICsxNzMsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNUZXN0U2Vy
aWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJz
ZWNvbmRMb25nQXR0cmlidXRlIik7CiB9CkBAIC0xODksNyArMTg5LDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpbwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6YXR0cmli
dXRlPGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogfQpA
QCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW8KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXph
dGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RT
ZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7CiB9CkBA
IC0yMjEsNyArMjIxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
bwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6YXR0cmli
dXRlPGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTIzNSwyMiArMjM1LDIxIEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW8KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSo+KHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjEsOSAr
MjYwLDkgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRl
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmlu
Z0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaXJzdFN0cmluZ0F0dHJp
YnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmlu
Z0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24m
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0y
ODAsOSArMjc5LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25k
TG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRl
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNlY29uZExvbmdBdHRy
aWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMjk5
LDkgKzI5OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW8KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRV
bnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUi
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVu
c2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKQEAgLTMxOCw5ICszMTcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtMzM3LDkgKzMzNiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW8KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25G
aWZ0aExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXph
dGlvbj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpZnRoTG9uZ0F0
dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNTks
NyArMzU4LDcgQEAgSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1YwogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I+
KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6
YXRpb24qIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05D
YWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiogdGhpc09iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOwpAQCAt
MzgwLDEwICszNzksMTAgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YQogICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRl
IiksIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04i
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjAgKzQwLDIwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25G
dW5jdGlvblJldHVybmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25GdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5j
dGlvblJldHVybmluZyhKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJl
YWRvbmx5VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
IHB1YmxpYzoKQEAgLTE0OSw5ICsxNDksOSBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjp+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiB9CiAK
LXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
QmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0
Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogQmluZGlu
Z0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0Rm9yQXR0
cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiB9CiAKIHRl
bXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0Rm9y
T3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNjEsNyArMTYxLDcgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VWYWx1ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7CiB9CkBAIC0xNzcsNyAr
MTc3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVh
ZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0
dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHlWYWx1ZSIpOwogfQpAQCAtMTkzLDcg
KzE5Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2MKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNh
Y2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1
dGU8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRWYWx1ZSIpOwogfQpAQCAtMjEyLDcgKzIxMiw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2MKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwb3J0cyIpOwogfQpA
QCAtMjI4LDcgKzIyOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2MKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJl
YWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImNhY2hlZFJlYWRvbmx5VmFsdWUiKTsKIH0KQEAgLTI0NSwyMiArMjQ1LDIxIEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2MKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmpl
Y3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjcx
LDkgKzI3MCw5IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidmFsdWUiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ2YWx1ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yOTAs
OSArMjg5LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTYwogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q2FjaGVkVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
YWNoZWRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjYWNo
ZWRWYWx1ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1
ZSwgImNhY2hlZFZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTMxMiwxNCArMzExLDE0
IEBAIEpTVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAiZnVuY3Rp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTMyNywyNCArMzI2LDI0IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFs
dWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5mdW5jdGlvbihXVEZNb3ZlKHZh
bHVlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
RnVuY3Rpb25SZXR1cm5pbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5pbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZyhFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZ0NhbGxlcj4oc3RhdGUsICJmdW5j
dGlvblJldHVybmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5j
dGlvblJldHVybmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pigq
c3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5mdW5jdGlvblJldHVybmlu
ZygpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LmZ1bmN0aW9uUmV0dXJuaW5nKCkpOwogfQogCiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwzOCArNDIsMzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blNldFNoYWRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VB
cmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmcoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uVW5pb25BcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhD
bGFtcChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkZ1bmMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3coSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNl
QXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9u
QXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkltbXV0YWJsZVBvaW50RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5j
ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAog
Ly8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJp
YWxpemVkU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBj
bGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RUeXBlZGUKICAgICB7ICJUZXN0U3ViT2JqIiwgUmVhZE9ubHksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmopLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9OwogCi10ZW1wbGF0
ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
cjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzMywxMyArMTMzLDEzIEBAIHRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gaGVsbG8gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdGVzdENh
bGxiYWNrRnVuY3Rpb24gPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwg
c2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRy
KTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0
byB0ZXN0Q2FsbGJhY2tJbnRlcmZhY2UgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpT
VGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MiksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKHN0YXRlLCBzY29wZSwgMiwgInRlc3RDYWxsYmFja0ludGVyZmFjZSIsICJUZXN0VHlwZWRl
ZnMiLCBudWxscHRyKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNyZWF0ZShXVEZNb3ZlKGhlbGxv
KSwgdGVzdENhbGxiYWNrRnVuY3Rpb24ucmVsZWFzZU5vbk51bGwoKSwgdGVzdENhbGxiYWNrSW50
ZXJmYWNlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdFR5cGVkZWZzPj4oKnN0YXRlLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0VHlwZWRlZnM+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8PiBK
U1ZhbHVlIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKQEAgLTIy
Myw5ICsyMjMsOSBAQCB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlNDZWxsCiAg
ICAgdGhpc09iamVjdC0+SlNUZXN0VHlwZWRlZnM6On5KU1Rlc3RUeXBlZGVmcygpOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RUeXBlZGVmcyogQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0VHlwZWRlZnMqIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0VHlwZWRlZnM+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1Zh
bHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rl
c3RUeXBlZGVmcyogQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhc3RGb3JPcGVyYXRp
b24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTIzNSw3ICsyMzUsNyBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RUeXBlZGVmcyogQmluZGluCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVk
ZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0
dHJpYnV0ZTxqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KQEAgLTI1MSw3ICsyNTEsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmF0dHJpYnV0ZTxq
c1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOwogfQpAQCAtMjY3
LDcgKzI2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXUKIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2Jq
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2Jq
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iaiIp
OwogfQpAQCAtMjgxLDcgKzI4MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0NvbnMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRl
PGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMjk3LDcgKzI5Nyw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHIKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyV2l0aFNldHRlckV4
Y2VwdGlvbiIpOwogfQpAQCAtMzEzLDcgKzMxMyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlw
ZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlw
ZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmkKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMzQzLDIyICszNDMsMjEgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RUeXBlZGVmc1By
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0VHlwZWRlZnNQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVkZWZzUHJv
dG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RUeXBl
ZGVmczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwogfQogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9t
T2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzY5LDkgKzM2OCw5IEBAIGJvb2wgc2V0SlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3QKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RU
eXBlZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBl
ZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5
cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM4OCw5ICszODcsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVm
cz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImltbXV0YWJsZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTQwNyw5ICs0MDYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNJbW11CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRl
ZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RU
eXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRl
ZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00
MjYsOSArNDI1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cgog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgdmFsdWUsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDQ1LDkgKzQ0NCw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHIKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9v
bCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTQ2NCw5ICs0NjMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNTdHJpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1
ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00ODYsMzIgKzQ4NSwzMiBAQCBKU1Zh
bHVlIEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihWCiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
RnVuY0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkZ1bmMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyhFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0NhbGxlcj4oc3RhdGUsICJmdW5j
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVu
Y0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExMb25nPj46OlJldHVyblR5cGV7IH0g
OiBjb252ZXJ0PElETFNlcXVlbmNlPElETExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5mdW5jKFdURk1vdmUoeCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0
U2hhZG93Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TZXRTaGFkb3dDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVm
cyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0
U2hhZG93KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25TZXRTaGFkb3dDYWxsZXI+KHN0YXRlLCAic2V0U2hhZG93Iik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0
U2hhZG93Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTE5LDI3ICs1MTgsMjcgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB3aWR0aCA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBhdXRvIGhlaWdodCA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PElETFVucmVzdHJp
Y3RlZEZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBjb2xvciA9IHN0YXRl
LT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMyksIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGF1dG8gYWxwaGEgPSBzdGF0ZS0+YXJndW1lbnQoNCkuaXNVbmRlZmlu
ZWQoKSA/IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+KCkgOiBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZs
b2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5zZXRTaGFkb3coV1RGTW92ZSh3
aWR0aCksIFdURk1vdmUoaGVpZ2h0KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShjb2xvciksIFdU
Rk1vdmUoYWxwaGEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1
ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVl
bmNlQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNl
QXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU0
NywxOCArNTQ2LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNl
cXVlbmNlPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwubWV0aG9kV2l0aFNlcXVlbmNl
QXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihpbXBs
Lm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBl
ZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmdDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVNlcXVlbmNlQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVm
cz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U2VxdWVuY2VBcmdDYWxsZXI+KHN0YXRlLCAibnVsbGFibGVTZXF1ZW5jZUFyZyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NTY2LDE5ICs1NjUsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLm51bGxhYmxlU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2Vx
dWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZz
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYWJsZXNBcmcoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcj4o
c3RhdGUsICJzZXF1ZW5jZU9mTnVsbGFibGVzQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VP
Zk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZz
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51
bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01ODYsMTkgKzU4
NSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJ
RExOdWxsYWJsZTxJRExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwuc2VxdWVuY2VPZk51bGxhYmxlc0FyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51
bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51
bGxhYmxlc0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxh
YmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcj4oc3RhdGUsICJudWxsYWJsZVNlcXVlbmNl
T2ZOdWxsYWJsZXNBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJs
ZXNBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51
bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02MDYsMTkgKzYw
NSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJ
RExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pj4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhXVEZNb3ZlKHNl
cXVlbmNlQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNl
T2ZVbmlvbnNBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxh
YmxlU2VxdWVuY2VPZlVuaW9uc0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZV
bmlvbnNBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RUeXBlZGVmcz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0NhbGxlcj4oc3RhdGUsICJudWxsYWJsZVNl
cXVlbmNlT2ZVbmlvbnNBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZVbmlv
bnNBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVu
aW9uc0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02MjYsMTkgKzYyNSwx
OSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExT
ZXF1ZW5jZTxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNlPElETERPTVN0cmluZz4+
Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm51bGxhYmxlU2VxdWVuY2VPZlVu
aW9uc0FyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25VbmlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uVW5pb25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBl
ZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZyhFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25V
bmlvbkFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uVW5pb25BcmdDYWxsZXI+KHN0YXRlLCAidW5pb25BcmciKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25Vbmlv
bkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25BcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNjQ2LDE5ICs2NDUsMTkgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1
bmlvbkFyZyA9IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExMb25nPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudW5pb25BcmcoV1RGTW92ZSh1bmlvbkFyZykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFt
cENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXAoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZz
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhD
bGFtcENhbGxlcj4oc3RhdGUsICJmdW5jV2l0aENsYW1wIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dp
dGhDbGFtcENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcENhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02NjYsMzYgKzY2NSwzNiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGFyZzEgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRv
IGFyZzIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+KCkgOiBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
LmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2lu
dEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25J
bW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyPihzdGF0ZSwgImlt
bXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0
aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRl
cmZhY2U8U1ZHUG9pbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC5pbW11dGFibGVQb2ludEZ1bmN0aW9uKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZh
Y2U8U1ZHUG9pbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5p
bW11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhbGxP
cGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb25DYWxsZXI+KHN0YXRlLCAic3RyaW5nU2VxdWVuY2VGdW5jdGlvbiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blN0cmluZ1NlcXVlbmNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNzAzLDE4ICs3MDIsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElETFNl
cXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMU2VxdWVu
Y2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcykpKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VG
dW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbjJDYWxsZXI+KHN0YXRlLCAi
c3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1
bmN0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5j
dGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzIyLDE4ICs3MjEsMTgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1
bmN0aW9uMihXVEZNb3ZlKHZhbHVlcykpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0
cmluZ1NlcXVlbmNlRnVuY3Rpb24yKFdURk1vdmUodmFsdWVzKSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNh
bGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhh
dFJlcXVpcmVzSW5jbHVkZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNs
dWRlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRl
ZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0
aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZUNhbGxlcj4oc3RhdGUsICJjYWxsV2l0aFNlcXVl
bmNlVGhhdFJlcXVpcmVzSW5jbHVkZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VU
aGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0
aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC03NDEsMjQgKzc0MCwyNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29u
dmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdEV2ZW50VGFyZ2V0Pj4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExCb29sZWFuPihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRl
KFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExCb29sZWFuPihpbXBsLmNhbGxXaXRoU2Vx
dWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5
cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVk
ZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogYm9vbCBKU1Rlc3RUeXBlZGVmc093bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
YXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDE1
ICs2MCwxNSBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAg
c3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4oY2VsbCktPlJ1bnRpbWVBcnJheTo6flJ1bnRpbWVB
cnJheSgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBSdW50aW1l
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxSdW50aW1lQXJyYXkqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8UnVudGltZUFycmF5Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoIXRo
aXNPYmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0
aCgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKTsKIH0K
IAogdm9pZCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDgsIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCBwcm90ZWN0
ZWQ6CiAKIHByaXZhdGU6CiAgICAgUnVudGltZUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSop
OwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAKICAgICBCaW5kaW5nc0Fy
cmF5KiBtX2FycmF5OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCwx
NSArNTQsMTUgQEAgdm9pZCBSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVudGltZU1l
dGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBSdW50aW1lTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljRG93bmNh
c3Q8UnVudGltZU1ldGhvZCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBSdW50
aW1lTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8UnVudGltZU1ldGhvZCo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcih0aGlzT2JqZWN0LT5tX21ldGhvZC0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbWV0aG9kLT5udW1QYXJhbWV0ZXJzKCkpOwogfQogCiBi
b29sIFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAm
c2xvdCkKQEAgLTc2LDcgKzc2LDcgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSgogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUnVudGltZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBz
dGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKICAgICBpZiAo
IW1ldGhvZC0+bWV0aG9kKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPElu
c3RhbmNlPiBpbnN0YW5jZTsKIApAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAg
ICAgICAgIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwog
ICAgICAgICBpZiAoIWluc3RhbmNlKSAKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoUnVudGltZU9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpKTsK
KyAgICAgICAgICAgIHJldHVybiBSdW50aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2FsbGluZyBhIHJ1bnRp
bWUgb2JqZWN0IG9mIGEgcGx1Z2luIGVsZW1lbnQ/CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5o
ZXJpdHMoSlNIVE1MRWxlbWVudDo6aW5mbygpKSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGV4ZWMsIG1ldGhv
ZCk7CiAgICAgaW5zdGFuY2UtPmVuZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsVHlwZSBSdW50aW1lTWV0aG9kOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY2LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAg
IEJpbmRpbmdzOjpNZXRob2QqIG1fbWV0aG9kOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgtMjAwOSwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgtMjAwOSwg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsMTYgKzYyLDE2IEBAIHZvaWQgUnVudGltZU9iamVjdDo6
aW52YWxpZGF0ZSgpCiAgICAgbV9pbnN0YW5jZSA9IG51bGxwdHI7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIFJ1bnRpbWVPYmplY3Q6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBSdW50aW1lT2JqZWN0OjpmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNP
YmogPSBqc0Nhc3Q8UnVudGltZU9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAgUmVmUHRyPEluc3Rh
bmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNl
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKQEAgLTgwLDE5ICs4
MCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpmYWxsYmFja09iCiAKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVudGlt
ZU9iamVjdDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6
OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7ICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgUnVudGltZU9iamVj
dCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8UnVudGltZU9iamVj
dCo+KHRoaXNWYWx1ZSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmot
Pm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAg
IHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSk7CiAgICAgCiAgICAg
aW5zdGFuY2UtPmJlZ2luKCk7CiAKQEAgLTEwMiwxOSArMTAyLDE5IEBAIEVuY29kZWRKU1ZhbHVl
IFJ1bnRpbWVPYmplY3Q6OmZpZWxkR2V0dGUKICAgICAKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAg
ICAgICAgICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVudGltZU9iamVjdDo6bWV0aG9kR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQorSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjptZXRob2RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8
UnVudGltZU9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBSdW50aW1l
T2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPih0aGlzVmFsdWUpOwogICAg
IFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UgPSB0aGlzT2JqLT5tX2luc3RhbmNlOwogCiAgICAg
aWYgKCFpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0ludmFs
aWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlk
QWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIAogICAgIGluc3RhbmNlLT5iZWdpbigpOwog
CkBAIC0xMjIsNyArMTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgUnVudGltZU9iamVjdDo6bWV0aG9k
R2V0dAogCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShtZXRob2QpOworICAgIHJldHVybiBtZXRob2Q7CiB9CiAKIGJvb2wgUnVu
dGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSAqZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpA
QCAtMjIyLDE0ICsyMjIsMTQgQEAgSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpkZWZhdWx0VmFsdWUo
Y29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEFTU0VSVChleGVjLT5qc0NhbGxlZSgpLT5pbmhlcml0cyhSdW50aW1lT2JqZWN0OjppbmZv
KCkpKTsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVP
YmplY3QqPihleGVjLT5qc0NhbGxlZSgpKS0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKICAgICBp
bnN0YW5jZS0+YmVnaW4oKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VE
ZWZhdWx0TWV0aG9kKGV4ZWMpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ2FsbFR5cGUg
UnVudGltZU9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsLCBDYWxsRGF0YSYgY2FsbERh
dGEpCkBAIC0yNDYsNyArMjQ2LDcgQEAgQ2FsbFR5cGUgUnVudGltZU9iamVjdDo6Z2V0Q2FsbERh
dGEoSlNDZQogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGV4ZWMtPmpz
Q2FsbGVlKCk7CiAgICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5pbmhlcml0cyhSdW50aW1lT2JqZWN0
OjppbmZvKCkpKTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIAogICAgIEFTU0VSVChy
ZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0LmlzT2JqZWN0KCkgPyBq
c0Nhc3Q8SlNPYmplY3QqPihyZXN1bHQuYXNDZWxsKCkpIDogY29uc3RydWN0b3IpOworICAgIHJl
dHVybiByZXN1bHQuaXNPYmplY3QoKSA/IGpzQ2FzdDxKU09iamVjdCo+KHJlc3VsdC5hc0NlbGwo
KSkgOiBjb25zdHJ1Y3RvcjsKIH0KIAogQ29uc3RydWN0VHlwZSBSdW50aW1lT2JqZWN0OjpnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA4LTIwMDksIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCw5ICs3OCw5IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBmaWVsZEdldHRlcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgbWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgZmllbGRH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBtZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAog
ICAgIFJlZlB0cjxJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwOCwgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQyLDcgKzI0Miw3IEBAIGJvb2wgT2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQoSlNDZWxsKiwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFsbGJhY2tPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsT2Jq
Q0ZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MjU3LDcgKzI1Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwK
ICAgICBPYmpjSW5zdGFuY2UqIG9iamNJbnN0YW5jZSA9IHJ1bnRpbWVPYmplY3QtPmdldEludGVy
bmFsT2JqQ0luc3RhbmNlKCk7CiAKICAgICBpZiAoIW9iamNJbnN0YW5jZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShSdW50aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJv
cihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gUnVudGltZU9iamVjdDo6dGhyb3dJbnZh
bGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIAogICAgIG9iamNJbnN0YW5jZS0+YmVn
aW4oKTsKIApAQCAtMjczLDcgKzI3Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICAgICAgICAgIAogICAgIG9iamNJbnN0YW5jZS0+ZW5kKCk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogQ2FsbFR5cGUgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNl
bGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDE3LTAxLTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZWR1Y2UgdGhlIHVzZSBvZiBFbmNvZGVkSlNWYWx1ZSwgYW5kIHVzZSBKU1ZhbHVlIGluc3Rl
YWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2
NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Y2FsbE1ldGhvZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpjYWxsTlBKU09iamVjdCk6CisgICAgICAg
IChXZWJLaXQ6OmNvbnN0cnVjdFdpdGhDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkpT
TlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6
bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5oOgorCiAyMDE3LTAxLTAzICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBBbm90aGVyIGF0dGVtcHQgdG8gZml4IHRoZSBBcHBsZSBTaWVycmEgUmVs
ZWFzZSAzMi1iaXQgQnVpbGQgZm9sbG93aW5nIDxodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMjEwMDc1PgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL0pTTlBNZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAkocmV2aXNpb24gMjEwMjQ3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBKU05QTWV0
aG9kOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxNZXRob2Qo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKHRoaXNWYWx1ZS5pbmhl
cml0cyhKU05QT2JqZWN0OjppbmZvKCkpKSB7CiAgICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmpl
Y3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOUE9iamVjdC0+Y2FsbE1ldGhvZChleGVjLCBqc05Q
TWV0aG9kLT5ucElkZW50aWZpZXIoKSkpOworICAgICAgICByZXR1cm4ganNOUE9iamVjdC0+Y2Fs
bE1ldGhvZChleGVjLCBqc05QTWV0aG9kLT5ucElkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
NiwxMiArMjM2LDEyIEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxOUEpTT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbE5QSlNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBleGVjLT5qc0NhbGxlZSgpOwogICAgIEFTU0VSVChvYmplY3QtPmluaGVyaXRz
KEpTTlBPYmplY3Q6OmluZm8oKSkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nh
c3Q8SlNOUE9iamVjdCo+KG9iamVjdCktPmNhbGxPYmplY3QoZXhlYykpOworICAgIHJldHVybiBq
c0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCktPmNhbGxPYmplY3QoZXhlYyk7CiB9CiAKIEpTQzo6
Q2FsbFR5cGUgSlNOUE9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6
Q2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtMjU1LDEyICsyNTUsMTIgQEAgSlNDOjpDYWxsVHlwZSBK
U05QT2JqZWN0OjpnZXRDYWxsRGF0YShKUwogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCog
Y29uc3RydWN0b3IgPSBleGVjLT5qc0NhbGxlZSgpOwogICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+
aW5oZXJpdHMoSlNOUE9iamVjdDo6aW5mbygpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQ2FzdDxKU05QT2JqZWN0Kj4oY29uc3RydWN0b3IpLT5jYWxsQ29uc3RydWN0b3IoZXhl
YykpOworICAgIHJldHVybiBqc0Nhc3Q8SlNOUE9iamVjdCo+KGNvbnN0cnVjdG9yKS0+Y2FsbENv
bnN0cnVjdG9yKGV4ZWMpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTTlBPYmplY3Q6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAt
NDU4LDE5ICs0NTgsMTkgQEAgdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
TwogICAgIG5wbk1lbUZyZWUoaWRlbnRpZmllcnMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU05Q
T2JqZWN0Ojpwcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0pTVmFsdWUgSlNOUE9iamVjdDo6
cHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTTlBPYmplY3QqIHRo
aXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU05QT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTTlBPYmplY3QqPih0aGlzVmFsdWUp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgaW5mbygpKTsKICAgICAK
ICAgICBpZiAoIXRoaXNPYmotPm1fbnBPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIGlmICghdGhp
c09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBOUFZhcmlhbnQgcmVzdWx0OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3Vs
dCk7CkBAIC00ODYsNyArNDg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVy
dHlHZXR0ZQogICAgICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVy
RnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5
TmFtZSBpcyBzeW1ib2wuCiAgICAgICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIHJldHVyblZhbHVlID0gdGhpc09iai0+bV9ucE9i
amVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0LCBucElkZW50aWZp
ZXIsICZyZXN1bHQpOwogICAgICAgICAKQEAgLTQ5NCwzMCArNDk0LDMwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGUKICAgICB9CiAKICAgICBpZiAoIXJldHVyblZh
bHVlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9
IHRoaXNPYmotPm1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMsIHRo
aXNPYmotPmdsb2JhbE9iamVjdCgpLCByZXN1bHQpOwogICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1
ZSgmcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3BlcnR5VmFsdWUpOwor
ICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0
OjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIEpTTlBPYmplY3Q6Om1ldGhvZEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNOUE9iamVjdCogdGhpc09iaiA9IGpz
Q2FzdDxKU05QT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTTlBP
YmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCBpbmZvKCkpOwogICAgIAogICAgIGlmICgh
dGhpc09iai0+bV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgTlBJZGVudGlmaWVyIG5wSWRl
bnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAg
Ly8gSWYgdGhlIHByb3BlcnR5TmFtZSBpcyBzeW1ib2wuCiAgICAgaWYgKCFucElkZW50aWZpZXIp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3Io
ZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4
ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNOUE1ldGhvZDo6Y3Jl
YXRlKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpLCBucElkZW50aWZpZXIpKTsKKyAgICByZXR1cm4gSlNOUE1ldGhvZDo6Y3JlYXRlKGV4ZWMs
IHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBucElk
ZW50aWZpZXIpOwogfQogCiBKU09iamVjdCogSlNOUE9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNz
RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsOCArOTQsOCBAQCBw
cml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUpOwogCi0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJvcGVydHlH
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgbWV0aG9kR2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgcHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG1l
dGhvZEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCiAgICAgTlBSdW50aW1lT2JqZWN0
TWFwKiBtX29iamVjdE1hcDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297966</attachid>
            <date>2017-01-03 15:51:59 -0800</date>
            <delta_ts>2017-01-05 10:15:48 -0800</delta_ts>
            <desc>proposed patch: with gtk/efl build fixes.</desc>
            <filename>bug-166658.patch</filename>
            <type>text/plain</type>
            <size>1623200</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMCBA
QAorMjAxNy0wMS0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVkdWNlIHRoZSB1c2Ugb2YgRW5jb2RlZEpTVmFsdWUsIGFuZCB1c2UgSlNWYWx1ZSBpbnN0ZWFk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3Rp
bmcgY29kZSB1c2VzIEVuY29kZWRKU1ZhbHVlIGZvciBwYXNzaW5nIEpTVmFsdWVzIGluIGFuZCBv
dXQgb2YgaG9zdCBmdW5jdGlvbnMuCisgICAgICAgIEhvd2V2ZXIsIGl0IGRvZXMgbm90IHNlZW0g
dGhhdCB0aGlzIGlzIG5lY2Vzc2FyeSBpbiBtb3N0IGNhc2VzLiAgU3BlY2lmaWNhbGx5LAorICAg
ICAgICBOYXRpdmVGdW5jdGlvbiwgR2V0VmFsdWVGdW5jLCBhbmQgUHV0VmFsdWVGdW5jIGNhbiBh
bGwgdXNlIEpTVmFsdWUgd2l0aCBubworICAgICAgICBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMu
ICBVc2luZyBKU1ZhbHVlIGRpcmVjdGx5IChpbnN0ZWFkIG9mIEVuY29kZWRKU1ZhbHVlKSBhbHNv
CisgICAgICAgIGltcHJvdmVzIHR5cGUgc2FmZXR5LCBhbmQgcmVkdWNlcyB0aGUgbmVlZCB0byBt
YXJzaGFsIHZhbHVlcyBiYWNrIGFuZCBmb3J0aCB1c2luZworICAgICAgICBKU1ZhbHVlOjplbmNv
ZGUoKSBhbmQgSlNWYWx1ZTo6ZGVjb2RlKCkuICBUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgZWFz
eSB0byByZWFkCisgICAgICAgIGFuZCB3cml0ZSwgd2l0aCBubyBwZXJmb3JtYW5jZSBsb3NzLgor
CisgICAgICAgIFRoZSAyIHByaW1hcnkgcmVhc29uIGZvciBjb2RlIHRvIHN0aWxsIHVzZSBFbmNv
ZGVkSlNWYWx1ZSBhcmU6CisgICAgICAgIDEuIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgQyBsaW5r
YWdlIChlLmcuIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25zKS4KKyAgICAgICAgMi4gYXMgYW4gZWxl
bWVudCBzdG9yYWdlIHR5cGUgd2hlcmUgdXNpbmcgRW5jb2RlZEpTVmFsdWUgYWxsb3dzIHVzIHRv
IHVzZSB0aGUKKyAgICAgICAgICAgdHJpdmlhbCBjb25zdHJ1Y3RvciBmb3IgaW50NjRfdC4KKwor
ICAgICAgICBBbHNvIGRlbGV0ZWQgc29tZSB1bnVzZWQgY29kZS4KKworICAgICAgICBOb3RlOiB0
aGlzIHBhdGNoIGlzIG5vdCBleGhhdXN0aXZlIGluIHJlbW92aW5nIGFsbCB1bm5lY2Vzc2FyeSB1
c2VzIG9mCisgICAgICAgIEVuY29kZWRKU1ZhbHVlLiAgSXQgbWVyZWx5IHRyaWVzIHRvIHJlZHVj
ZSBpdCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGggbWluaW1hbAorICAgICAgICBlZmZvcnQuCisK
KyAgICAgICAgUGVyZm9ybWFuY2UgaXMgbmV1dHJhbCBvbiB0aGUgSlNDIGJlbmNobWFya3MuCisK
KyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpBUElD
YWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tGdW5jdGlv
bjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OkpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Y29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpjYWxsKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZnRsL0ZUTEdl
bmVyYXRlZEZ1bmN0aW9uLmg6CisgICAgICAgICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVBdHRyaWJ1dGVFdmFsdWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rp
b25Jc0hUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblByb3h5VGFyZ2V0VmFsdWUpOgorICAgICAgICAoSW5z
cGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcFNpemUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0
aW9uV2Vha01hcEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldFNpemUpOgorICAgICAgICAoSW5zcGVjdG9yOjpq
c0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha1NldEVudHJpZXMpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXRl
cmF0b3JFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
RnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvbkdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgICogaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRo
U2NvcGVFeHRlbnNpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVQcm90b3R5cGVGdW5jdGlvblNjb3BlRGVzY3JpcHRpb25zKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVMaW5lKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ29sdW1uKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25OYW1l
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU2Nv
cGVDaGFpbik6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZVRoaXNPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJh
bWVBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZy
YW1lSXNUYWlsRGVsZXRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKFdURjo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpS
dW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChXVEY6OkRPTUpJVEdldHRlcjo6
Y3VzdG9tR2V0dGVyKToKKyAgICAgICAgKFdURjo6RE9NSklUR2V0dGVyQ29tcGxleDo6ZnVuY3Rp
b25FbmFibGVFeGNlcHRpb24pOgorICAgICAgICAoV1RGOjpET01KSVRHZXR0ZXJDb21wbGV4Ojpj
dXN0b21HZXR0ZXIpOgorICAgICAgICAoV1RGOjpET01KSVRGdW5jdGlvbk9iamVjdDo6c2FmZUZ1
bmN0aW9uKToKKyAgICAgICAgKHByaW50SW50ZXJuYWwpOgorICAgICAgICAoZnVuY3Rpb25Qcmlu
dFN0ZE91dCk6CisgICAgICAgIChmdW5jdGlvblByaW50U3RkRXJyKToKKyAgICAgICAgKGZ1bmN0
aW9uRHVtcENhbGxGcmFtZSk6CisgICAgICAgIChmdW5jdGlvbkRlYnVnKToKKyAgICAgICAgKGZ1
bmN0aW9uRGVzY3JpYmUpOgorICAgICAgICAoZnVuY3Rpb25EZXNjcmliZUFycmF5KToKKyAgICAg
ICAgKGZ1bmN0aW9uU2xlZXBTZWNvbmRzKToKKyAgICAgICAgKGZ1bmN0aW9uSlNDU3RhY2spOgor
ICAgICAgICAoZnVuY3Rpb25DcmVhdGVSb290KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRWxl
bWVudCk6CisgICAgICAgIChmdW5jdGlvbkdldEVsZW1lbnQpOgorICAgICAgICAoZnVuY3Rpb25T
ZXRFbGVtZW50Um9vdCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdCk6Cisg
ICAgICAgIChmdW5jdGlvbkdldEhpZGRlblZhbHVlKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlk
ZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVQcm94eSk6CisgICAgICAgIChmdW5j
dGlvbkNyZWF0ZVJ1bnRpbWVBcnJheSk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUltcHVyZUdl
dHRlcik6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdCk6CisgICAg
ICAgIChmdW5jdGlvbkNyZWF0ZURPTUpJVE5vZGVPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25D
cmVhdGVET01KSVRHZXR0ZXJPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVET01KSVRH
ZXR0ZXJDb21wbGV4T2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rp
b25PYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSk6Cisg
ICAgICAgIChmdW5jdGlvbkdDQW5kU3dlZXApOgorICAgICAgICAoZnVuY3Rpb25GdWxsR0MpOgor
ICAgICAgICAoZnVuY3Rpb25FZGVuR0MpOgorICAgICAgICAoZnVuY3Rpb25Gb3JjZUdDU2xvd1Bh
dGhzKToKKyAgICAgICAgKGZ1bmN0aW9uSGVhcFNpemUpOgorICAgICAgICAoZnVuY3Rpb25BZGRy
ZXNzT2YpOgorICAgICAgICAoZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoZnVu
Y3Rpb25WZXJzaW9uKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9u
UnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxv
YWRTdHJpbmcpOgorICAgICAgICAoZnVuY3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlv
bkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncyk6CisgICAg
ICAgIChmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncyk6CisgICAgICAgIChmdW5jdGlvblNoYWRv
d0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3cpOgorICAgICAgICAoZnVuY3Rpb25HZXRSYW5k
b21TZWVkKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5j
dGlvbklzUm9wZSk6CisgICAgICAgIChmdW5jdGlvbkNhbGxlclNvdXJjZU9yaWdpbik6CisgICAg
ICAgIChmdW5jdGlvblJlYWRsaW5lKToKKyAgICAgICAgKGZ1bmN0aW9uUHJlY2lzZVRpbWUpOgor
ICAgICAgICAoZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9u
Tm9ERkcpOgorICAgICAgICAoZnVuY3Rpb25Ob0ZUTCk6CisgICAgICAgIChmdW5jdGlvbk9wdGlt
aXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBpbGVz
KToKKyAgICAgICAgKGZ1bmN0aW9uSlNDT3B0aW9ucyk6CisgICAgICAgIChmdW5jdGlvblJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudCk6CisgICAgICAgIChmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZm
ZXIpOgorICAgICAgICAoZnVuY3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayk6CisgICAgICAgIChm
dW5jdGlvblF1aXQpOgorICAgICAgICAoZnVuY3Rpb25BYm9ydCk6CisgICAgICAgIChmdW5jdGlv
bkZhbHNlMSk6CisgICAgICAgIChmdW5jdGlvbkZhbHNlMik6CisgICAgICAgIChmdW5jdGlvblVu
ZGVmaW5lZDEpOgorICAgICAgICAoZnVuY3Rpb25VbmRlZmluZWQyKToKKyAgICAgICAgKGZ1bmN0
aW9uSXNJbnQzMik6CisgICAgICAgIChmdW5jdGlvbklkZW50aXR5KToKKyAgICAgICAgKGZ1bmN0
aW9uRWZmZWN0ZnVsNDIpOgorICAgICAgICAoZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIpOgorICAg
ICAgICAoZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKToKKyAgICAgICAgKGZ1bmN0aW9uRHVt
cFR5cGVzRm9yQWxsVmFyaWFibGVzKToKKyAgICAgICAgKGZ1bmN0aW9uRmluZFR5cGVGb3JFeHBy
ZXNzaW9uKToKKyAgICAgICAgKGZ1bmN0aW9uUmV0dXJuVHlwZUZvcik6CisgICAgICAgIChmdW5j
dGlvbkR1bXBCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKToKKyAgICAgICAgKGZ1bmN0aW9uSGFz
QmFzaWNCbG9ja0V4ZWN1dGVkKToKKyAgICAgICAgKGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlv
bkNvdW50KToKKyAgICAgICAgKGZ1bmN0aW9uRHJhaW5NaWNyb3Rhc2tzKToKKyAgICAgICAgKGZ1
bmN0aW9uSXMzMkJpdFBsYXRmb3JtKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZE1vZHVsZSk6Cisg
ICAgICAgIChmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4pOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVH
bG9iYWxPYmplY3QpOgorICAgICAgICAoZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheCk6CisgICAg
ICAgIChmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAg
KGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QpOgorICAgICAgICAoZnVuY3Rpb25SZXNldFN1
cGVyU2FtcGxlclN0YXRlKToKKyAgICAgICAgKGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKGZ1bmN0
aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKToKKyAgICAgICAgKGZ1bmN0aW9uTWF4QXJn
dW1lbnRzKToKKyAgICAgICAgKGZ1bmN0aW9uVGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAg
ICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKiBvZmZs
aW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdpdGhBcnJheUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6Y2FsbEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjphcnJheUNvbnN0cnVj
dG9yUHJpdmF0ZUZ1bmNJc0FycmF5U2xvdyk6CisgICAgICAgIChKU0M6OmFycmF5Q29uc3RydWN0
b3JQcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9BcnJh
eUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNK
b2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVyc2Up
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5k
ZXhPZik6CisgICAgICAgIChKU0M6OmNvbmNhdEFwcGVuZE9uZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweSk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3Rv
dHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9BdG9taWNzT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNBZGQpOgorICAg
ICAgICAoSlNDOjphdG9taWNzRnVuY0FuZCk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jQ29t
cGFyZUV4Y2hhbmdlKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNFeGNoYW5nZSk6CisgICAg
ICAgIChKU0M6OmF0b21pY3NGdW5jSXNMb2NrRnJlZSk6CisgICAgICAgIChKU0M6OmF0b21pY3NG
dW5jTG9hZCk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jT3IpOgorICAgICAgICAoSlNDOjph
dG9taWNzRnVuY1N0b3JlKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNTdWIpOgorICAgICAg
ICAoSlNDOjphdG9taWNzRnVuY1dhaXQpOgorICAgICAgICAoSlNDOjphdG9taWNzRnVuY1dha2Up
OgorICAgICAgICAoSlNDOjphdG9taWNzRnVuY1hvcik6CisgICAgICAgICogcnVudGltZS9Cb29s
ZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoQm9vbGVhbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Y2FsbEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAg
ICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Ym9vbGVh
blByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVl
T2YpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bnNvbGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjb25zb2xlTG9nV2l0aExldmVsKToKKyAg
ICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0RlYnVnKToKKyAgICAgICAgKEpTQzo6Y29uc29s
ZVByb3RvRnVuY0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0xvZyk6Cisg
ICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNJbmZvKToKKyAgICAgICAgKEpTQzo6Y29uc29s
ZVByb3RvRnVuY1dhcm4pOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jQ2xlYXIpOgor
ICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jRGlyKToKKyAgICAgICAgKEpTQzo6Y29uc29s
ZVByb3RvRnVuY0RpclhNTCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNUYWJsZSk6
CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNUcmFjZSk6CisgICAgICAgIChKU0M6OmNv
bnNvbGVQcm90b0Z1bmNBc3NlcnQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jQ291
bnQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OmNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVBy
b3RvRnVuY1Rha2VIZWFwU25hcHNob3QpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5j
VGltZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNUaW1lRW5kKToKKyAgICAgICAg
KEpTQzo6Y29uc29sZVByb3RvRnVuY1RpbWVTdGFtcCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQ
cm90b0Z1bmNHcm91cCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNHcm91cENvbGxh
cHNlZCk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNHcm91cEVuZCk6CisgICAgICAg
ICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpjYWxsQ3Vz
dG9tU2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdFdpdGhEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpj
YWxsRGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAgICAgIChKU0M6OmRhdGVO
b3cpOgorICAgICAgICAoSlNDOjpkYXRlVVRDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmZvcm1hdGVEYXRlSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRl
UHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvVGlt
ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvUHJpbWl0aXZlU3ltYm9sKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldFRpbWUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRD
TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldERheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jU2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNTZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENIb3Vycyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1RvSlNPTik6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmg6CisgICAg
ICAgICogcnVudGltZS9FQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6ZXNTcGVjSXNDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9FQ01BU2Ny
aXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9FcnJvci5oOgor
ICAgICAgICAoSlNDOjp0aHJvd1ZNRXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd1ZNVHlwZUVy
cm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dWTVJhbmdlRXJyb3IpOgorICAgICAgICAoSlNDOjpT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNvbnN0cnVjdFRocm93VHlwZUVycm9yKToKKyAg
ICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uOjpjYWxsVGhyb3dUeXBlRXJy
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmVycm9yUHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdFdpdGhGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6Y2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rpb25Qcm90b3R5cGUpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1l
L0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsR2Vu
ZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVy
YXRvckZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6aW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uT2JqZWN0TG9nKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bENvbGxhdG9yKToKKyAgICAgICAg
KEpTQzo6Y2FsbEludGxDb2xsYXRvcik6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvckNvbnN0
cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVudGltZS9JbnRsQ29s
bGF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3JGdW5jQ29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvclByb3RvdHlwZUdldHRlckNvbXBhcmUpOgor
ICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3JQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0SW50bERhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKEpTQzo6
Y2FsbEludGxEYXRlVGltZUZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVudGltZS9J
bnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRp
bWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVG
b3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVG
b3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdElu
dGxOdW1iZXJGb3JtYXQpOgorICAgICAgICAoSlNDOjpjYWxsSW50bE51bWJlckZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6SW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6CisgICAgICAg
IChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjppbnRsT2JqZWN0
RnVuY0dldENhbm9uaWNhbExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpjYWxsQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZl
ckZ1bmNJc1ZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9B
cmdzRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoSlNDOjpib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OmJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjppc0JvdW5kRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpoYXNJbnN0YW5jZUJvdW5kRnVuY3Rpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
Lmg6CisgICAgICAgIChKU0M6OmVuY29kZWRKU1VuZGVmaW5lZCk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b25DYWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24u
aDoKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9HZXR0ZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvR2V0
dGVyQnl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3
UHJvdG9GdW5jR2V0SW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVp
bnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYpOgorICAgICAg
ICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0RmxvYXQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
R2V0RmxvYXQ2NCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCk6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYpOgorICAgICAgICAoSlNDOjpk
YXRhVmlld1Byb3RvRnVuY1NldEludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1By
b3RvRnVuY1NldEZsb2F0NjQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6Y2FsbGVyR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjpjYWxs
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6dGhyb3dOZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaDoKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KToKKyAgICAgICAg
KEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik6CisgICAgICAg
IChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKToKKyAgICAgICAg
KEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAgIChK
U0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjpn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChKU0M6
OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcik6CisgICAgICAgIChK
U0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0xlbmd0aCk6CisgICAgICAg
IChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJz
ZSk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydCk6
CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
Om1ha2VCb3VuZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6aGFzT3duTGVuZ3RoUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpnZXRUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OmVucXVl
dWVKb2IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQ
YXJzZUludCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQYXJzZUZsb2F0KToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY0RlY29kZVVSSSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNEZWNv
ZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRW5jb2RlVVJJKToKKyAg
ICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChKU0M6
Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVW5lc2NhcGUpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpn
bG9iYWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXIpOgorICAgICAg
ICAoSlNDOjpnbG9iYWxGdW5jUHJvdG9HZXR0ZXIpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
UHJvdG9TZXR0ZXIpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jQnVpbHRpbkxvZyk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdFByb21pc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjptb2R1bGVOYW1lc3BhY2VPYmplY3RTeW1ib2xJdGVyYXRvcik6
CisgICAgICAgICogcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6cnVuU3RkRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
T05Qcm90b0Z1bmNQYXJzZSk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1bmNTdHJpbmdpZnkp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQ
cml2YXRlRnVuY0luc3RhbmNlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0UHJvbWlzZSk6CisgICAgICAgIChKU0M6OmNhbGxQcm9taXNlKToKKyAgICAgICAg
KiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpwcm9w
ZXJ0eU5hbWVJdGVyYXRvckZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFR5cGVkQXJyYXlW
aWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jSXNUeXBlZEFycmF5Vmlldyk6
CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgpOgorICAgICAg
ICAoSlNDOjp0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jR2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KToKKyAgICAgICAg
KEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjp0eXBlZEFy
cmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4pOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmll
d1Byb3RvRnVuY0luY2x1ZGVzKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0Z1
bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5k
ZXhPZik6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbik6CisgICAg
ICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnVmZmVyKToKKyAgICAgICAg
KEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNMZW5ndGgpOgorICAgICAgICAoSlND
Ojp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgpOgorICAgICAgICAoSlND
Ojp0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQpOgorICAgICAgICAoSlND
Ojp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjp0eXBlZEFy
cmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUpOgorICAgICAgICAoSlNDOjp0eXBlZEFy
cmF5Vmlld1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNUb1N0cmluZ1RhZyk6CisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxNYXApOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RNYXApOgorICAg
ICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpN
YXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50aW1lL01hcFByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0NsZWFyKToKKyAgICAgICAgKEpT
Qzo6bWFwUHJvdG9GdW5jRGVsZXRlKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToK
KyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9G
dW5jU2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6
Om1hcFByb3RvRnVuY1ZhbHVlcyk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0VudHJpZXMp
OgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNLZXlzKToKKyAgICAgICAgKEpTQzo6cHJpdmF0
ZUZ1bmNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JO
ZXh0KToKKyAgICAgICAgKiBydW50aW1lL01hcFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRp
bWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBYnMpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNBU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW4pOgorICAgICAgICAoSlND
OjptYXRoUHJvdG9GdW5jQVRhbjIpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQ2VpbCk6
CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDbHozMik6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNDb3MpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRXhwKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0Zsb29yKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0h5
cG90KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZyk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNNYXgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWluKToKKyAgICAg
ICAgKEpTQzo6bWF0aFByb3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNS
YW5kb20pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUm91bmQpOgorICAgICAgICAoSlND
OjptYXRoUHJvdG9GdW5jU2lnbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU3FydCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNUYW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jSU11bCk6CisgICAgICAgIChK
U0M6Om1hdGhQcm90b0Z1bmNBQ29zaCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBU2lu
aCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBVGFuaCk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNDYnJ0KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Nvc2gpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRXhwbTEpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9G
dW5jRnJvdW5kKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZzFwKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0xvZzEwKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xv
ZzIpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU2luaCk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNUYW5oKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1RydW5jKToKKyAg
ICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL01vZHVsZUxv
YWRlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZVBh
cnNlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVk
TW9kdWxlcyk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xh
cmF0aW9uSW5zdGFudGlhdGlvbik6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlw
ZVJlc29sdmUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90b3R5cGVGZXRjaCk6Cisg
ICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZUluc3RhbnRpYXRlKToKKyAgICAgICAg
KEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpj
b25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9O
dWxsR2V0dGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpjYWxsUmV0dXJuVW5kZWZpbmVk
KToKKyAgICAgICAgKiBydW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OmNhbGxSZXR1cm5VbmRlZmluZWQpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3Ip
OgorICAgICAgICAoSlNDOjpjYWxsTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpu
dW1iZXJDb25zdHJ1Y3RvckZ1bmNJc0ludGVnZXIpOgorICAgICAgICAoSlNDOjpudW1iZXJDb25z
dHJ1Y3RvckZ1bmNJc1NhZmVJbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpOgor
ICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6bnVt
YmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAoSlNDOjppbnRlZ2VyVmFsdWVUb1N0
cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RXaXRoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsT2Jq
ZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3Rv
dHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZik6
CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMp
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpv
d25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JEZWZpbmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yRGVmaW5l
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFsKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclByZXZl
bnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZCk6
CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6Om9iamVjdENv
bnN0cnVjdG9ySXMpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaDoKKyAg
ICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YpOgor
ICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlND
OjpvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90
b0Z1bmNMb29rdXBHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBT
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJs
ZSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5U2xvdDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6bWFrZVJldm9jYWJsZVByb3h5KToKKyAgICAgICAgKEpTQzo6cHJveHlSZXZv
Y2FibGVDb25zdHJ1Y3RvclRocm93RXJyb3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm94
eU9iamVjdCk6CisgICAgICAgIChKU0M6OmNhbGxQcm94eSk6CisgICAgICAgICogcnVudGltZS9Q
cm94eUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUNhbGwpOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJv
eHlDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlSZXZva2UuY3BwOgorICAgICAg
ICAoSlNDOjpwZXJmb3JtUHJveHlSZXZva2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVy
dHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6cmVmbGVjdE9iamVjdENvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmpl
Y3REZWZpbmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RFbnVtZXJhdGUp
OgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0KToKKyAgICAgICAgKEpTQzo6cmVmbGVj
dE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnJlZmxlY3RP
YmplY3RHZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmplY3RJc0V4dGVu
c2libGUpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0T3duS2V5cyk6CisgICAgICAgIChK
U0M6OnJlZmxlY3RPYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OnJlZmxl
Y3RPYmplY3RTZXQpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0U2V0UHJvdG90eXBlT2Yp
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcik6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVj
dG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZSk6Cisg
ICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKToKKyAgICAgICAgKEpTQzo6
cmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4pOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1
Y3RvckxlZnRDb250ZXh0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JSaWdodENv
bnRleHQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAgICAg
ICAgKEpTQzo6c2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUpOgorICAgICAgICAoSlNDOjpl
c1NwZWNSZWdFeHBDcmVhdGUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoUmVnRXhwQ29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdFNldExhc3RJbmRleFN0cmlj
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdFNldExhc3RJbmRleE5vblN0cmljdCk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdF
eHBQcm90b0Z1bmNUZXN0RmFzdCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0V4ZWMp
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QpOgorICAgICAgICAoSlND
OjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlckdsb2JhbCk6CisgICAg
ICAgIChKU0M6OnJlZ0V4cFByb3RvR2V0dGVySWdub3JlQ2FzZSk6CisgICAgICAgIChKU0M6OnJl
Z0V4cFByb3RvR2V0dGVyTXVsdGlsaW5lKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0
ZXJTdGlja3kpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlclVuaWNvZGUpOgorICAg
ICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlckZsYWdzKToKKyAgICAgICAgKEpTQzo6cmVnRXhw
UHJvdG9HZXR0ZXJTb3VyY2UpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNTZWFyY2hG
YXN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KToKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsU2V0KToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVu
dGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNBZGQpOgor
ICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6OnNldFByb3Rv
RnVuY0RlbGV0ZSk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0hhcyk6CisgICAgICAgIChK
U0M6OnNldFByb3RvRnVuY1NpemUpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvcik6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jU2V0SXRlcmF0
b3JOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hh
ckNvZGUpOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ29kZVBvaW50KToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Y2FsbFN0
cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6
cmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uU3RyaW5n
UHJvdG9GdW5jUmVwbGFjZVJlZ0V4cEVtcHR5U3RyKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9u
U3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZyk6CisgICAgICAgIChKU0M6OnJlcGxh
Y2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGVh
dENoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNSZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25T
dHJpbmdQcm90b0Z1bmNSZXBsYWNlR2VuZXJpYyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0NvZGVQb2ludEF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
Q29uY2F0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3Qp
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHIpOgorICAgICAgICAoSlNDOjpi
dWlsdGluU3RyaW5nU3Vic3RySW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNTdWJzdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OnRvTG9jYWxl
Q2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBlckNhc2UpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCaWcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNTbWFsbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JsaW5rKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jQm9sZCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVu
Y0ZpeGVkKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSXRhbGljcyk6CisgICAgICAg
IChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0cmlrZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1Yik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1cCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQW5jaG9yKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RyaW0pOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUcmltTGVmdCk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNF
bmRzV2l0aCk6CisgICAgICAgIChKU0M6OnN0cmluZ0luY2x1ZGVzSW1wbCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKToKKyAgICAgICAgKEpTQzo6YnVpbHRpblN0cmlu
Z0luY2x1ZGVzSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJdGVyYXRv
cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZSk6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFN5bWJvbCk6CisgICAgICAgIChKU0M6OnN5
bWJvbENvbnN0cnVjdG9yRm9yKToKKyAgICAgICAgKEpTQzo6c3ltYm9sQ29uc3RydWN0b3JLZXlG
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6c3ltYm9sUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpzeW1ib2xQcm90b0Z1
bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxXZWFrTWFwKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2Vha01h
cCk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6cHJvdG9GdW5jV2Vha01hcERlbGV0ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtN
YXBHZXQpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwSGFzKToKKyAgICAgICAgKEpT
Qzo6cHJvdG9GdW5jV2Vha01hcFNldCk6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsV2Vha1NldCk6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXREZWxldGUpOgorICAgICAgICAoSlNDOjpw
cm90b0Z1bmNXZWFrU2V0SGFzKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha1NldEFkZCk6
CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uQ3Jhc2gpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkRGR1RydWUpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvbkxMaW50VHJ1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uSklUVHJ1
ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR0MpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkVk
ZW5HQyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ29kZUJsb2NrRm9yRnJhbWUpOgorICAgICAg
ICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJp
bnRTb3VyY2VGb3IpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50Qnl0ZUNvZGVGb3IpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcmlu
dENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJpbnRTdGFjayk6CisgICAgICAg
IChKU0M6OmZ1bmN0aW9uVmFsdWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkdldFBJRCk6Cisg
ICAgICAgICogd2FzbS9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1i
bHlDb21waWxlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKToKKyAg
ICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3Nl
bWJseUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IpOgorICAgICAgICAoSlNDOjpjYWxs
SlNXZWJBc3NlbWJseUxpbmtFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAg
ICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5RnVuY3Rpb25WYWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OndlYkFzc2VtYmx5RnVuY3Rpb25Db21waWxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y2FsbEpT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xlbmd0aCk6CisgICAgICAgIChKU0M6OndlYkFzc2Vt
Ymx5VGFibGVQcm90b0Z1bmNHcm93KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVBy
b3RvRnVuY0dldCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQp
OgorCiAyMDE3LTAxLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGNoZWNrIGFuZCB0ZXN0IGluLWNhbGwgLyBvdXQtY2Fs
bCB2YWx1ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxMi0yMDEzLCAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NC0yMDA4LCAyMDEyLTIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFp
bC5jb20pCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM3NiwxOCArMzc2LDE4IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGN1c3RvbUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAg
IHN0YXRpYyBKU1ZhbHVlIGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAg
ICAgQ3VzdG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxDdXN0b21HZXR0ZXIq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgICAgIEN1c3RvbUdldHRlciogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Q3VzdG9tR2V0dGVyKj4odGhpc1ZhbHVlKTsKICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgICAgICBib29sIHNob3VsZFRocm93ID0gdGhpc09iamVjdC0+Z2V0
KGV4ZWMsIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzaG91bGRU
aHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMTAwKSk7CisgICAgICAgIHJldHVybiBqc051
bWJlcigxMDApOwogICAgIH0KIH07CiAKQEAgLTQ4NCwxNSArNDg0LDE1IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
ICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8UnVudGltZUFycmF5
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgICAgICBSdW50aW1lQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFJ1bnRpbWVBcnJheSo+KHRoaXNWYWx1ZSk7CiAgICAg
ICAgIGlmICghdGhpc09iamVjdCkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0
aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIodGhpc09i
amVjdC0+Z2V0TGVuZ3RoKCkpOwogICAgIH0KIAogICAgIFZlY3RvcjxpbnQ+IG1fdmVjdG9yOwpA
QCAtNjY5LDE1ICs2NjksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNj
ZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VzdG9tR2V0dGVyIiksIGN1
c3RvbUdldHRlclNldHRlciwgUmVhZE9ubHkgfCBDdXN0b21BY2Nlc3Nvcik7CiAgICAgfQogCi0g
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBKU1ZhbHVl
IGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAgICAgRE9NSklUTm9kZSog
dGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUTm9kZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICAgICAgRE9NSklUTm9kZSogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nh
c3Q8RE9NSklUTm9kZSo+KHRoaXNWYWx1ZSk7CiAgICAgICAgIGlmICghdGhpc09iamVjdCkKICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKSk7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKTsKICAgICB9CiB9Owog
CkBAIC03NjgsMjcgKzc2OCwyNyBAQCBwcml2YXRlOgogICAgICAgICBwdXREaXJlY3ROYXRpdmVG
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVu
YWJsZUV4Y2VwdGlvbiIpLCAwLCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbiwgTm9JbnRyaW5zaWMs
IDApOwogICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRW5hYmxlRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICB7CiAgICAgICAgIGF1dG8qIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUR2V0dGVy
Q29tcGxleCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICAgICAgaWYgKG9iamVjdCkKICAgICAg
ICAgICAgIG9iamVjdC0+bV9lbmFibGVFeGNlcHRpb24gPSB0cnVlOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCisg
ICAgc3RhdGljIEpTVmFsdWUgY3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxET01KSVROb2RlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxET01KSVROb2RlKj4odGhpc1ZhbHVlKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAg
ICAgICBpZiAoYXV0byogZG9taml0R2V0dGVyQ29tcGxleCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklU
R2V0dGVyQ29tcGxleCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkgeworICAgICAgICBp
ZiAoYXV0byogZG9taml0R2V0dGVyQ29tcGxleCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUR2V0dGVy
Q29tcGxleCo+KHRoaXNWYWx1ZSkpIHsKICAgICAgICAgICAgIGlmIChkb21qaXRHZXR0ZXJDb21w
bGV4LT5tX2VuYWJsZUV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkRPTUpJVEdldHRlckNvbXBsZXggc2xvdyBjYWxsIGV4Y2VwdGlvbiIpKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJET01KSVRHZXR0ZXJDb21wbGV4IHNsb3cgY2FsbCBl
eGNlcHRpb24iKSkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIodGhpc09iamVjdC0+dmFsdWUoKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIo
dGhpc09iamVjdC0+dmFsdWUoKSk7CiAgICAgfQogCiAgICAgYm9vbCBtX2VuYWJsZUV4Y2VwdGlv
biB7IGZhbHNlIH07CkBAIC04MTgsNyArODE4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
b2JqZWN0OwogICAgIH0KIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNhZmVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCisgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzYWZlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtODI2LDcgKzgyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgRE9NSklUTm9kZSog
dGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUTm9kZSo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHRo
aXNPYmplY3QtPnZhbHVlKCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05MDcsMTA5
ICs5MDcsMTA5IEBAIHZvaWQgRWxlbWVudDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSb28KIAog
c3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVJ1bnRpbWVBcnJheShFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlSW1wdXJlR2V0dGVyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVDdXN0b21HZXR0ZXJPYmplY3QoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVE5v
ZGVPYmplY3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlck9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyQ29t
cGxleE9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklURnVuY3Rpb25PYmplY3QoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4oRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZUdsb2JhbE9iamVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKik7Ci0K
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJv
b3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEVsZW1lbnQoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVNpbXBsZU9i
amVjdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZE91dChFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRT
dGRFcnIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmVBcnJheShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2xlZXBTZWNvbmRzKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NT
dGFjayhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZvcmNlR0NTbG93UGF0aHMoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBT
aXplKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25BZGRyZXNzT2YoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdldEdldHRlclNldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVQcm94eShFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSdW50aW1lQXJyYXkoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSW1wdXJl
R2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVROb2RlT2JqZWN0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlck9i
amVjdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25D
cmVhdGVET01KSVRHZXR0ZXJDb21wbGV4T2JqZWN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEZ1bmN0aW9uT2JqZWN0KEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUJ1aWx0
aW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlR2xvYmFsT2JqZWN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlKEV4ZWNTdGF0ZSopOworCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUm9vdChFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVFbGVtZW50
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEVs
ZW1lbnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkT3V0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlQXJy
YXkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2xl
ZXBTZWNvbmRzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkdDQW5kU3dlZXAoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Gb3JjZUdDU2xvd1BhdGhzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBTaXplKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFkZHJlc3NPZihFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRl
Kik7CiAjaWZuZGVmIE5ERUJVRwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUoRXhlY1N0YXRlKik7CiAjZW5kaWYKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW5T
dHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYWQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkxvYWRTdHJpbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRGaWxlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZGxpbmUo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByZWNpc2VUaW1lKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0RGRyhFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vT1NSRXhp
dEZ1enppbmcoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpT
Q09wdGlvbnMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJhbnNmZXJBcnJheUJ1ZmZlcihF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKik7Ci1zdGF0aWMgTk9fUkVUVVJOX1dJVEhf
VkFMVUUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQWJvcnQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhbHNlMShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmluZWQxKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmlu
ZWQyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Jc0ludDMyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25FZmZlY3RmdWw0MihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSWRlbnRpdHkoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2VNYXNxdWVyYWRlcihFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFz
Q3VzdG9tUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZvckV4
cHJlc3Npb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25I
YXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRpb25Db3VudChFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhj
ZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JczMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUo
RXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcihFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2Vu
ZXJhdGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJlc2V0U3VwZXJTYW1wbGVyU3RhdGUoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuc3VyZUFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25W
ZXJzaW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
dW5TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTG9hZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Mb2FkU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJlYWRGaWxlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblByZWNpc2VUaW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5ldmVySW5saW5lRnVuY3Rpb24oRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9ERkcoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9GVEwoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25PcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9ucyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJhbnNmZXJB
cnJheUJ1ZmZlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25GYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVjU3RhdGUqKTsKK3N0YXRpYyBOT19SRVRVUk5f
V0lUSF9WQUxVRSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSop
Oworc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQWJvcnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRmFsc2UxKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkZhbHNlMihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25VbmRlZmluZWQxKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblVuZGVmaW5lZDIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uSXNJbnQzMihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25FZmZlY3RmdWw0MihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JZGVudGl0eShFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQ3VzdG9tUHJvcGVydGll
cyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1w
VHlwZXNGb3JBbGxWYXJpYWJsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVj
dXRpb25SYW5nZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkJhc2ljQmxvY2tFeGVjdXRpb25Db3VudChFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25G
dXp6KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRy
YWluTWljcm90YXNrcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25JczMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxp
bmdQcm9maWxlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25SZXNldFN1cGVyU2FtcGxlclN0YXRlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuc3VyZUFycmF5U3RvcmFnZShF
eGVjU3RhdGUqKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2Ft
cGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tU
cmFjZXMoRXhlY1N0YXRlKik7CiAjZW5kaWYKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25NYXhBcmd1bWVudHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWF4QXJndW1lbnRzKEV4ZWNTdGF0ZSopOwogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3Rh
dGUqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DbGVhclNh
bXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uU2V0U2FtcGxpbmdGbGFncyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CiAjZW5kaWYK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TaGFkb3dDaGlj
a2VuRnVuY3Rpb25zT25TdGFjayhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90
VGhyb3coRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkdldFJhbmRvbVNlZWQoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJhbmRvbVNlZWQoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklzUm9wZShFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2FsbGVyU291cmNl
T3JpZ2luKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blNoYWRvd0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3Vs
ZE5vdFRocm93KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdldFJhbmRvbVNlZWQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Jc1JvcGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2FsbGVyU291cmNlT3JpZ2luKEV4ZWNTdGF0ZSopOwogCiBz
dHJ1Y3QgU2NyaXB0IHsKICAgICBlbnVtIGNsYXNzIFN0cmljdE1vZGUgewpAQCAtMTU1Myw3ICsx
NTUzLDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogfQogCiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRklM
RSogb3V0KQorc3RhdGljIEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEZJ
TEUqIG91dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1NjIsNyArMTU2Miw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWMKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSAmJiBXVEY6OmVx
dWFsKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpLCAiVGVzdDI2MjpBc3luY1Rl
c3RDb21wbGV0ZSIpKQogICAgICAgICAgICAgdGVzdDI2MkFzeW5jUGFzc2VkID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CkBAIC0xNTcxLDcgKzE1NzEsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjCiAgICAgICAgICAgICAgICAgZ290
byBmYWlsOwogCiAgICAgICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpleGVj
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChm
cHJpbnRmKG91dCwgIiVzIiwgdmlld1dpdGhTdHJpbmcudmlldy51dGY4KCkuZGF0YSgpKSA8IDAp
CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQpAQCAtMTU3OSw1NSArMTU3OSw1NSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChFeGVjCiAgICAgZnB1dGMoJ1xuJywg
b3V0KTsKIGZhaWw6CiAgICAgZmZsdXNoKG91dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkT3V0KEV4ZWNTdGF0ZSogZXhl
YykgeyByZXR1cm4gcHJpbnRJbnRlcm5hbChleGVjLCBzdGRvdXQpOyB9Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRFcnIoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBwcmludEludGVybmFsKGV4ZWMsIHN0ZGVycik7IH0KK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByaW50U3RkT3V0KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnRJbnRl
cm5hbChleGVjLCBzdGRvdXQpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcmlu
dFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50SW50ZXJuYWwoZXhlYywgc3Rk
ZXJyKTsgfQogCiAjaWZuZGVmIE5ERUJVRwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkR1bXBDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk1FbnRy
eUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBleGVjLT52bSgpLnRvcFZNRW50cnlGcmFtZTsKICAg
ICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZy
YW1lKTsKICAgICBpZiAoY2FsbGVyRnJhbWUpCiAgICAgICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0
ZXItPmR1bXBDYWxsRnJhbWUoY2FsbGVyRnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAjZW5kaWYK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAl
c1xuIiwgdmlld1dpdGhTdHJpbmcudmlldy51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgdG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkpKSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCB0b1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiPG5vdCBvYmplY3Q+
IikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCB0b1N0cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRlcihvYmplY3QtPmJ1dHRlcmZseSgp
KSwgIjsgcHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRBcnJheUxlbmd0aCgpLCAiOyB2ZWN0
b3IgbGVuZ3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0aCgpLCAiPiIpKSk7CisgICAgICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgQVNDSUlMaXRlcmFsKCI8bm90IG9iamVj
dD4iKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0b1N0cmluZygiPEJ1
dHRlcmZseTogIiwgUmF3UG9pbnRlcihvYmplY3QtPmJ1dHRlcmZseSgpKSwgIjsgcHVibGljIGxl
bmd0aDogIiwgb2JqZWN0LT5nZXRBcnJheUxlbmd0aCgpLCAiOyB2ZWN0b3IgbGVuZ3RoOiAiLCBv
YmplY3QtPmdldFZlY3Rvckxlbmd0aCgpLCAiPiIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNsZWVwU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMSkKICAgICAgICAgc2xlZXAoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIGNsYXNzIEZ1
bmN0aW9uSlNDU3RhY2tGdW5jdG9yIHsKQEAgLTE2NDcsNyArMTY0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nQnVpbGRlciYgbV90cmFjZTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25KU0NTdGFjayhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25KU0NTdGFjayhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nQnVp
bGRlciB0cmFjZTsKICAgICB0cmFjZS5hcHBlbmRMaXRlcmFsKCItLT4gU3RhY2sgdHJhY2U6XG4i
KTsKQEAgLTE2NTUsMTYgKzE2NTUsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkpTQwogICAgIEZ1bmN0aW9uSlNDU3RhY2tGdW5jdG9yIGZ1bmN0b3IodHJhY2UpOwog
ICAgIGV4ZWMtPml0ZXJhdGUoZnVuY3Rvcik7CiAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRy
YWNlLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUm9vdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShSb290OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSk7CisgICAgcmV0dXJuIFJvb3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlYXRlRWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVFbGVtZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE2NzIsMzcgKzE2NzIs
MzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZQogCiAgICAgUm9v
dCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBp
ZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0
ZSBFbGVtZW50IHdpdGhvdXQgYSBSb290LiIpKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoRWxlbWVudDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHJvb3Qp
KTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgRWxlbWVudCB3aXRob3V0IGEgUm9v
dC4iKSkpOworICAgIHJldHVybiBFbGVtZW50OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgcm9vdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25HZXRFbGVtZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkdldEVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIFJvb3QqIHJvb3QgPSBqc0R5bmFtaWNDYXN0PFJvb3QqPihleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBF
bGVtZW50KiByZXN1bHQgPSByb290LT5lbGVtZW50KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQgPyByZXN1bHQgOiBqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
ID8gcmVzdWx0IDoganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblNldEVsZW1lbnRSb290KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNldEVsZW1lbnRSb290KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0ganNEeW5h
bWljQ2FzdDxFbGVtZW50Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJvb3QqIHJvb3QgPSBq
c0R5bmFtaWNDYXN0PFJvb3QqPihleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGVsZW1lbnQg
JiYgcm9vdCkKICAgICAgICAgZWxlbWVudC0+c2V0Um9vdChleGVjLT52bSgpLCByb290KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jl
YXRlU2ltcGxlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTaW1wbGVPYmpl
Y3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICByZXR1cm4gU2ltcGxlT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3MTEsMTIgKzE3MTEs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogICAgIFNpbXBs
ZU9iamVjdCogc2ltcGxlT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxTaW1wbGVPYmplY3QqPihleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzaW1wbGVPYmplY3QpKSB7CiAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgdXNl
IG9mIGdldEhpZGRlblZhbHVlIHRlc3QgZnVuY3Rpb24iKSk7Ci0gICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHNpbXBsZU9iamVjdC0+aGlkZGVuVmFsdWUoKSk7CisgICAgcmV0dXJuIHNp
bXBsZU9iamVjdC0+aGlkZGVuVmFsdWUoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3
MjUsMzMgKzE3MjUsMzMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNl
dAogICAgIFNpbXBsZU9iamVjdCogc2ltcGxlT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxTaW1wbGVP
YmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzaW1wbGVPYmpl
Y3QpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IkludmFsaWQgdXNlIG9mIHNldEhpZGRlblZhbHVlIHRlc3QgZnVuY3Rpb24iKSk7Ci0gICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgc2ltcGxlT2JqZWN0LT5z
ZXRIaWRkZW5WYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHRh
cmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTT2JqZWN0KiBqc1RhcmdldCA9IGFzT2JqZWN0KHRh
cmdldC5hc0NlbGwoKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU1Byb3h5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc1Rh
cmdldC0+Z2V0UHJvdG90eXBlRGlyZWN0KCksIEltcHVyZVByb3h5VHlwZSk7CiAgICAgSlNQcm94
eSogcHJveHkgPSBKU1Byb3h5OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBqc1Rhcmdl
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm94eSk7CisgICAgcmV0dXJuIHByb3h5
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUnVudGlt
ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZVJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgUnVudGltZUFycmF5KiBhcnJheSA9IFJ1bnRpbWVBcnJheTo6Y3JlYXRl
KGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXkpOworICAgIHJldHVybiBh
cnJheTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUlt
cHVyZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25DcmVhdGVJbXB1cmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CkBA
IC0xNzYwLDUwICsxNzYwLDUwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25DcmUKICAgICAgICAgZGVsZWdhdGUgPSBhc09iamVjdCh0YXJnZXQuYXNDZWxsKCkpOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW1wdXJlR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7CiAgICAgSW1w
dXJlR2V0dGVyKiByZXN1bHQgPSBJbXB1cmVHZXR0ZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1
Y3R1cmUsIGRlbGVnYXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZUN1c3RvbUdldHRlck9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVDdXN0b21HZXR0ZXJPYmplY3QoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gQ3VzdG9tR2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7CiAgICAgQ3VzdG9tR2V0dGVyKiByZXN1
bHQgPSBDdXN0b21HZXR0ZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9NSklUTm9kZU9iamVj
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVE
T01KSVROb2RlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERPTUpJVE5vZGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIERPTUpJVEdl
dHRlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIERPTUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpKSk7CiAgICAg
RE9NSklUTm9kZSogcmVzdWx0ID0gRE9NSklUTm9kZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVE
T01KSVRHZXR0ZXJPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0dGVyT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IERP
TUpJVEdldHRlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwganNOdWxsKCkpOwogICAgIERPTUpJVEdldHRlciogcmVzdWx0ID0gRE9NSklU
R2V0dGVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckNvbXBsZXhPYmplY3Qo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRE9N
SklUR2V0dGVyQ29tcGxleE9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBET01KSVRHZXR0ZXJD
b21wbGV4OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBqc051bGwoKSk7CiAgICAgRE9NSklUR2V0dGVyQ29tcGxleCogcmVzdWx0ID0gRE9N
SklUR2V0dGVyQ29tcGxleDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkNyZWF0ZURPTUpJVEZ1bmN0aW9uT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEZ1bmN0aW9uT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051bGwoKSk7CiAgICAgRE9N
SklURnVuY3Rpb25PYmplY3QqIHJlc3VsdCA9IERPTUpJVEZ1bmN0aW9uT2JqZWN0OjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVs
ZWdhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMTgxMSw3NyArMTgxMSw3
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAKICAgICBKU1Zh
bHVlIGJhc2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWJhc2UuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBkZWxlZ2F0ZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOwogICAgIGlmICghZGVsZWdhdGUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgSW1wdXJlR2V0dGVyKiBpbXB1cmVHZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEltcHVy
ZUdldHRlcio+KGFzT2JqZWN0KGJhc2UuYXNDZWxsKCkpKTsKICAgICBpZiAoVU5MSUtFTFkoIWlt
cHVyZUdldHRlcikpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiYXJndW1lbnQgaXMgbm90IGFuIEltcHVyZUdldHRlciIpKTsKLSAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIGlt
cHVyZUdldHRlci0+c2V0RGVsZWdhdGUodm0sIGFzT2JqZWN0KGRlbGVnYXRlLmFzQ2VsbCgpKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkdDQW5kU3dlZXAoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0QWxsR2FyYmFnZSgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RnVs
bENvbGxlY3Rpb24oKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLT5oZWFwKCktPnNpemVB
ZnRlckxhc3RGdWxsQ29sbGVjdGlvbigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkZ1bGxHQyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25GdWxsR0MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3Bl
OjpGdWxsKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmhlYXAo
KS0+c2l6ZUFmdGVyTGFzdEZ1bGxDb2xsZWN0aW9uKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYy0+aGVhcCgpLT5zaXplQWZ0ZXJMYXN0RnVsbENvbGxlY3Rpb24oKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWRlbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RT
eW5jKENvbGxlY3Rpb25TY29wZTo6RWRlbik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihleGVjLT5oZWFwKCktPnNpemVBZnRlckxhc3RFZGVuQ29sbGVjdGlvbigpKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmhlYXAoKS0+c2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0
aW9uKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRm9yY2VH
Q1Nsb3dQYXRocyhFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRm9y
Y2VHQ1Nsb3dQYXRocyhFeGVjU3RhdGUqKQogewogICAgIC8vIEl0J3MgYmVzdCBmb3IgdGhpcyB0
byBiZSB0aGUgZmlyc3QgdGhpbmcgY2FsbGVkIGluIHRoZSAKICAgICAvLyBKUyBwcm9ncmFtIHNv
IHRoZSBvcHRpb24gaXMgc2V0IHRvIHRydWUgYmVmb3JlIHdlIEpJVC4KICAgICBPcHRpb25zOjpm
b3JjZUdDU2xvd1BhdGhzKCkgPSB0cnVlOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IZWFwU2l6ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IZWFwU2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihleGVjLT5oZWFwKCktPnNpemUoKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVj
LT5oZWFwKCktPnNpemUoKSk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IGdlbmVyYWxs
eSB2ZXJ5IGhlbHBmdWwgaW4gNjQtYml0IGNvZGUgYXMgdGhlIHRhZyBhbmQgcGF5bG9hZAogLy8g
c2hhcmUgYSByZWdpc3Rlci4gQnV0IGluIDMyLWJpdCBKSVRlZCBjb2RlIHRoZSB0YWcgbWF5IG5v
dCBiZSBjaGVja2VkIGlmIGFuCiAvLyBvcHRpbWl6YXRpb24gcmVtb3ZlcyB0eXBlIGNoZWNraW5n
IHJlcXVpcmVtZW50cywgc3VjaCBhcyBpbiA9PT0uCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQWRkcmVzc09mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkFkZHJlc3NPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIC8vIE5lZWQgdG8gY2FzdCB0byB1aW50NjRfdCBzbyBiaXR3
aXNlX2Nhc3Qgd2lsbCBwbGF5IGFsb25nLgogICAgIHVpbnQ2NF90IGFzTnVtYmVyID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNDZWxsKCkpOwotICAgIEVuY29kZWRKU1ZhbHVl
IHJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3Vi
bGU+KGFzTnVtYmVyKSkpOwotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICByZXR1cm4ganNO
dW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYXNOdW1iZXIpKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEdldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFw
cm9wZXJ0eS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFByb3BlcnR5
U2xvdCBzbG90KHZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5KTsKICAgICB2YWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgYXNTdHJpbmcocHJvcGVydHkp
LT50b0lkZW50aWZpZXIoZXhlYyksIHNsb3QpOwpAQCAtMTg5MiwyNiArMTg5MSwyNiBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgZWxzZQogICAgICAgICBy
ZXN1bHQgPSBqc051bGwoKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VmVyc2lvbihFeGVjU3RhdGUqKQogewogICAgIC8vIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiBmb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIHRoZSBNb3ppbGxhIEpTIHRlc3RzIGJ1dCBmb3Igbm93CiAgICAg
Ly8gd2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55IHZlcnNpb24tc3BlY2lmaWMgaGFuZGxpbmcKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVu
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZy
b21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOwogCkBAIC0xOTI5LDE5ICsx
OTI4LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KIAogICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIHNjb3BlLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2gu
Z2V0RWxhcHNlZE1TKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBz
ZWRNUygpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1blN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW5T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJj
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2Jh
bE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNO
dWxsKCkpLCBWZWN0b3I8U3RyaW5nPigpKTsKIApAQCAtMTk1NiwyMiArMTk1NSwyMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAKICAgICBpZiAoZXhjZXB0aW9u
KSB7CiAgICAgICAgIHNjb3BlLnRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVT
eXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5v
dCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCkBAIC0xOTc5LDM3ICsxOTc4LDM3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2Ny
aXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkxvYWRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uTG9hZFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBTdHJpbmcgc291cmNlQ29kZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAogICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZUNv
ZGUsIGV4ZWMtPmNhbGxlclNvdXJjZU9yaWdpbigpKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhj
ZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGV2YWx1YXRpb25FeGNlcHRpb24pOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZpbGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZpbGUoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGJv
b2wgaXNCaW5hcnkgPSBmYWxzZTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkg
ewogICAgICAgICBTdHJpbmcgdHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYg
KHR5cGUgIT0gImJpbmFyeSIpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IHNjb3BlLCAiRXhwZWN0ZWQgJ2JpbmFyeScgYXMgc2Vjb25kIGFyZ3VtZW50LiIpOwogICAgICAg
ICBpc0JpbmFyeSA9IHRydWU7CkBAIC0yMDIwLDI2ICsyMDE5LDI2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBzY29wZSwgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7CiAKICAgICBpZiAoIWlzQmluYXJ5
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zy
b21VVEYoY29udGVudCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zy
b21VVEYoY29udGVudCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZVVpbnQ4KTsKICAgICBh
dXRvIGxlbmd0aCA9IGNvbnRlbnQuc2l6ZSgpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjcmVh
dGVVaW50OFR5cGVkQXJyYXkoZXhlYywgc3RydWN0dXJlLCBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJv
bUJ5dGVzKGNvbnRlbnQucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKSwgbGVuZ3RoLCBbXSAodm9p
ZCogcCkgeyBmYXN0RnJlZShwKTsgfSksIDAsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3Ry
aW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAg
IGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikp
KSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7CiAKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwogCkBAIC0yMDUyLDc2ICsyMDUxLDc2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DaGUKIAogICAgIGlmICghdmFsaWRTeW50YXgpCiAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBzeW50YXhFeGNlcHRpb24pOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKSk7CisgICAgcmV0dXJuIGpz
TnVtYmVyKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJ
TkdfRkxBR1MpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0U2FtcGxp
bmdGbGFncyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
ZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQg
ZmxhZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50
b051bWJlcihleGVjKSk7CiAgICAgICAgIGlmICgoZmxhZyA+PSAxKSAmJiAoZmxhZyA8PSAzMikp
CiAgICAgICAgICAgICBTYW1wbGluZ0ZsYWdzOjpzZXRGbGFnKGZsYWcpOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICByZXR1cm4ganNOdWxsKCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxh
Z3MoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2xlYXJT
YW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgZmxh
ZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051
bWJlcihleGVjKSk7CiAgICAgICAgIGlmICgoZmxhZyA+PSAxKSAmJiAoZmxhZyA8PSAzMikpCiAg
ICAgICAgICAgICBTYW1wbGluZ0ZsYWdzOjpjbGVhckZsYWcoZmxhZyk7CiAgICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIHJldHVybiBqc051bGwoKTsKIH0K
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hp
Y2tlbkZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRlKiBleGVj
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5zaGFkb3dDaGlja2Vu
KCkuZnVuY3Rpb25zT25TdGFjayhleGVjKSk7CisgICAgcmV0dXJuIGV4ZWMtPnZtKCkuc2hhZG93
Q2hpY2tlbigpLmZ1bmN0aW9uc09uU3RhY2soZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RU
aHJvdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRH
bG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgZXhlYy0+dm0oKS5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyhm
YWxzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkdldFJhbmRvbVNlZWQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uR2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndl
YWtSYW5kb20oKS5zZWVkKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT53ZWFrUmFuZG9tKCkuc2VlZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJhbmRvbVNlZWQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1lbnQoMCku
dG9VSW50MzIoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndlYWtSYW5kb20oKS5zZXRTZWVkKHNlZWQpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Jc1Jv
cGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSXNSb3Bl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCFhcmd1bWVudC5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKICAgICBjb25zdCBTdHJpbmdJbXBsKiBpbXBsID0gYXNTdHJpbmcoYXJndW1lbnQp
LT50cnlHZXRWYWx1ZUltcGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bighaW1wbCkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oIWltcGwpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2FsbGVyU291cmNlT3JpZ2luKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DYWxsZXJTb3VyY2VPcmlnaW4o
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBTb3VyY2VPcmlnaW4gc291cmNlT3JpZ2luID0gc3Rh
dGUtPmNhbGxlclNvdXJjZU9yaWdpbigpOwogICAgIGlmIChzb3VyY2VPcmlnaW4uaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoc3RhdGUsIHNvdXJjZU9yaWdpbi5zdHJpbmcoKSkpOwor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRlLCBzb3Vy
Y2VPcmlnaW4uc3RyaW5nKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZlY3RvcjxjaGFyLCAyNTY+
IGxpbmU7CiAgICAgaW50IGM7CkBAIC0yMTMyLDQ3ICsyMTMxLDQ3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEKICAgICAgICAgbGluZS5hcHBlbmQoYyk7CiAgICAg
fQogICAgIGxpbmUuYXBwZW5kKCdcMCcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgbGluZS5kYXRhKCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbGlu
ZS5kYXRhKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJl
Y2lzZVRpbWUoRXhlY1N0YXRlKikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByZWNp
c2VUaW1lKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihjdXJyZW50VGltZSgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGN1cnJlbnRUaW1lKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTmV2ZXJJbmxpbmVGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OZXZl
cklubGluZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHNldE5ldmVySW5saW5lKGV4ZWMpKTsKKyAgICByZXR1cm4gc2V0TmV2ZXJJbmxpbmUo
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0RGRyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob0RGRyhFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXROZXZlck9wdGlt
aXplKGV4ZWMpKTsKKyAgICByZXR1cm4gc2V0TmV2ZXJPcHRpbWl6ZShleGVjKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vRlRMKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vRlRMKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24q
PihleGVjLT5hcmd1bWVudCgwKSkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICBleGVjdXRhYmxlLT5z
ZXROZXZlckZUTE9wdGltaXplKHRydWUpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob09TUkV4aXRGdXp6aW5nKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5vT1NSRXhpdEZ1enpp
bmcoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0Q2Fu
bm90VXNlT1NSRXhpdEZ1enppbmcoZXhlYykpOworICAgIHJldHVybiBzZXRDYW5ub3RVc2VPU1JF
eGl0RnV6emluZyhleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKGV4
ZWMpKTsKKyAgICByZXR1cm4gb3B0aW1pemVOZXh0SW52b2NhdGlvbihleGVjKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTnVtYmVyT2ZERkdD
b21waWxlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShu
dW1iZXJPZkRGR0NvbXBpbGVzKGV4ZWMpKTsKKyAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxl
cyhleGVjKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgpAQCAtMjE4NCwxMDgg
KzIxODMsMTA4IEBAIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZnVuZGFtZW4KICAg
ICBvcHRpb25zT2JqZWN0LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTVmFsdWUodmFsdWUp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ09wdGlvbnMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDT3B0aW9u
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIG9wdGlvbnNPYmplY3QgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBu
YW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmlsaXR5XywgZGVzY3JpcHRpb25fKSBcCiAgICAg
YWRkT3B0aW9uKGV4ZWMtPnZtKCksIG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgI25hbWVfKSwgT3B0aW9uczo6bmFtZV8oKSk7CiAgICAgSlNDX09QVElPTlMoRk9S
X0VBQ0hfT1BUSU9OKQogI3VuZGVmIEZPUl9FQUNIX09QVElPTgotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob3B0aW9uc09iamVjdCk7CisgICAgcmV0dXJuIG9wdGlvbnNPYmplY3Q7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5
Q291bnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBibG9jayA9IGdldFNvbWVCYXNlbGluZUNvZGVCbG9ja0ZvckZ1bmN0aW9uKGV4ZWMt
PmFyZ3VtZW50KDApKTsKICAgICBpZiAoIWJsb2NrKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKDApKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwogICAgIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYmxvY2stPnJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoYmxvY2stPnJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uVHJhbnNmZXJBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25UcmFuc2ZlckFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpKSk7Cisg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKSk7CiAgICAgCiAgICAgSlNB
cnJheUJ1ZmZlciogYnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+
YXJndW1lbnQoMCkpOwogICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkV4cGVjdGVkIGFuIGFycmF5IGJ1ZmZlciIpKSkpOworICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiRXhwZWN0ZWQgYW4gYXJyYXkgYnVmZmVyIikpKTsKICAgICAKICAgICBBcnJheUJ1ZmZlckNv
bnRlbnRzIGR1bW15Q29udGVudHM7CiAgICAgYnVmZmVyLT5pbXBsKCktPnRyYW5zZmVyVG8oZHVt
bXlDb250ZW50cyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBleGVjLT52bSgpLnNldEZhaWxOZXh0TmV3Q29kZUJsb2NrKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blF1aXQoRXhlY1N0YXRlKikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhl
Y1N0YXRlKikKIHsKICAgICBqc2NFeGl0KEVYSVRfU1VDQ0VTUyk7CiAKICNpZiBDT01QSUxFUihN
U1ZDKQogICAgIC8vIFdpdGhvdXQgdGhpcywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRo
YXQgdGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICNl
bmRpZgogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWJvcnQoRXhl
Y1N0YXRlKikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFib3J0KEV4ZWNTdGF0ZSop
CiB7CiAgICAgQ1JBU0goKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZhbHNlMShFeGVjU3RhdGUqKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSk7IH0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTIo
RXhlY1N0YXRlKikgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOyB9
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhlY1N0YXRlKikgeyByZXR1
cm4ganNCb29sZWFuKGZhbHNlKTsgfQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFs
c2UyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7IH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblVuZGVmaW5lZDEoRXhlY1N0YXRlKikgeyByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyB9Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVkMihFeGVjU3RhdGUqKSB7IHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7IH0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Jc0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblVuZGVmaW5lZDEoRXhlY1N0YXRlKikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVW5kZWZpbmVkMihFeGVjU3RhdGUqKSB7IHJl
dHVybiBqc1VuZGVmaW5lZCgpOyB9CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Jc0lu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoaSku
aXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIH0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbih0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bklkZW50aXR5KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMt
PmFyZ3VtZW50KDApKTsgfQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSWRlbnRpdHko
RXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5hcmd1bWVudCgwKTsgfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWZmZWN0ZnVsNDIoRXhlY1N0YXRlKikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVmZmVjdGZ1bDQyKEV4ZWNTdGF0ZSopCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcig0MikpOworICAgIHJldHVybiBqc051
bWJlcig0Mik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtl
TWFzcXVlcmFkZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTWFrZU1hc3F1ZXJhZGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKE1hc3F1ZXJhZGVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIE1hc3F1ZXJhZGVyOjpjcmVhdGUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0N1c3RvbVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQ3VzdG9tUHJvcGVydGllcyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IGlmICh2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihhc09iamVjdCh2YWx1ZSktPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oYXNPYmplY3QodmFsdWUpLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgZXhlYy0+dm0oKS5kdW1wVHlwZVByb2ZpbGVyRGF0YSgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5k
VHlwZUZvckV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChleGVjLT52bSgpLnR5cGVQcm9maWxlcigpKTsKICAgICBleGVjLT52bSgp
LnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoImpzYyBU
ZXN0aW5nIEFQSTogZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24iKSk7CkBAIC0yMzAwLDEw
ICsyMjk5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW4KICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc291cmNlQ29kZVRleHQu
ZmluZChzdWJzdHJpbmcpICsgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKSk7CiAg
ICAgCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBleGVjLT52bSgpLnR5cGVQcm9maWxlcigpLT50
eXBlSW5mb3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvck5vcm1hbCwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBleGVjLT52bSgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5n
KSk7CisgICAgcmV0dXJuIEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIo
KSk7CiAgICAgZXhlYy0+dm0oKS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMo
QVNDSUlMaXRlcmFsKCJqc2MgVGVzdGluZyBBUEk6IGZ1bmN0aW9uUmV0dXJuVHlwZUZvciIpKTsK
QEAgLTIzMTQsMTcgKzIzMTMsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblJldAogCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0KCk7CiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBleGVjLT52bSgpLnR5cGVQ
cm9maWxlcigpLT50eXBlSW5mb3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIGV4ZWMtPnZtKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNPTlBh
cnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAgICByZXR1cm4gSlNPTlBhcnNlKGV4ZWMsIGpzb25T
dHJpbmcpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJh
c2ljQmxvY2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY29udHJvbEZsb3dQcm9maWxl
cigpKTsKICAgICBleGVjLT52bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtcERhdGEoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
SGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwogCkBA
IC0yMzM5LDEwICsyMzM4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25IYXMKICAgICBpbnQgb2Zmc2V0ID0gc291cmNlQ29kZVRleHQuZmluZChzdWJzdHJpbmcpICsg
ZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKICAgICAKICAgICBib29sIGhhc0V4
ZWN1dGVkID0gZXhlYy0+dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmhhc0Jhc2ljQmxvY2tB
dFRleHRPZmZzZXRCZWVuRXhlY3V0ZWQob2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBl
eGVjLT52bSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihoYXNFeGVj
dXRlZCkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oaGFzRXhlY3V0ZWQpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkJhc2ljQmxvY2tF
eGVjdXRpb25Db3VudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhl
Yy0+dm0oKS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpOwogCkBAIC0yMzU3LDg3ICsyMzU2LDg3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25CYXMKICAgICBpbnQgb2Zmc2V0
ID0gc291cmNlQ29kZVRleHQuZmluZChzdWJzdHJpbmcpICsgZXhlY3V0YWJsZS0+c291cmNlKCku
c3RhcnRPZmZzZXQoKTsKICAgICAKICAgICBzaXplX3QgZXhlY3V0aW9uQ291bnQgPSBleGVjLT52
bSgpLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+YmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50QXRUZXh0
T2Zmc2V0KG9mZnNldCwgZXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZXhlYy0+dm0oKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGV4ZWN1dGlvbkNvdW50KSk7CisgICAgcmV0
dXJuIEpTVmFsdWUoZXhlY3V0aW9uQ291bnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQogewog
ICAgIE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSA9IHRydWU7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRyYWluTWljcm90YXNrcyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EcmFpbk1pY3Jv
dGFza3MoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGV4ZWMtPnZtKCkuZHJhaW5NaWNyb3Rhc2tz
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uSXMzMkJpdFBsYXRmb3JtKEV4ZWNTdGF0ZSopCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU0ZhbHNl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU0ZhbHNlKTsKICNlbHNlCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTQzo6SlNWYWx1ZTo6SlNUcnVlKSk7
CisgICAgcmV0dXJuIEpTVmFsdWUoSlNDOjpKU1ZhbHVlOjpKU1RydWUpOwogI2VuZGlmCiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9t
TG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7CiAKICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJv
bWlzZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBmaWxlTmFtZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgZXJyb3I7CiAgICAgSlNGdW5jdGlv
biogZXJyb3JIYW5kbGVyID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIDEsIFN0cmluZygpLCBbJl0oRXhlY1N0YXRlKiBleGVjKSB7
CiAgICAgICAgIGVycm9yID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0pOwogCiAgICAgcHJvbWlzZS0+dGhlbihleGVjLCBudWxscHRyLCBlcnJvckhhbmRs
ZXIpOwogICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgIGlmIChlcnJvcikKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3Ip
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGVycm9yKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZUJ1aWx0aW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJp
bmcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgZnVuY3Rpb25UZXh0ID0g
YXNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkpLT52YWx1ZShleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlID0gbWFrZVNv
dXJjZShmdW5jdGlvblRleHQsIHsgfSk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rp
b246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0s
IHNvdXJjZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBz
b3VyY2UpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShmdW5jKTsKKyAgICByZXR1cm4gZnVuYzsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUdsb2JhbE9iamVjdChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVHbG9iYWxPYmplY3QoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSkpOworICAgIHJldHVybiBH
bG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CkBAIC0yNDQ3
LDIwICsyNDQ2LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGUK
ICAgICBzdG9wV2F0Y2guc3RvcCgpOwogCiAgICAgaWYgKCF2YWxpZFN5bnRheCkKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0b1N0
cmluZygiU3ludGF4RXJyb3I6ICIsIGVycm9yLm1lc3NhZ2UoKSwgIjoiLCBlcnJvci5saW5lKCkp
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxh
cHNlZE1TKCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgdG9TdHJpbmcoIlN5bnRheEVycm9yOiAiLCBlcnJvci5t
ZXNzYWdlKCksICI6IiwgZXJyb3IubGluZSgpKSkpOworICAgIHJldHVybiBqc051bWJlcihzdG9w
V2F0Y2guZ2V0RWxhcHNlZE1TKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2Zp
bGVyKEV4ZWNTdGF0ZSopCiB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTVHJ1ZSkpOworICAg
IHJldHVybiBKU1ZhbHVlKEpTQzo6SlNWYWx1ZTo6SlNUcnVlKTsKICNlbHNlCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTQzo6SlNWYWx1ZTo6SlNGYWxzZSkpOworICAgIHJl
dHVybiBKU1ZhbHVlKEpTQzo6SlNWYWx1ZTo6SlNGYWxzZSk7CiAjZW5kaWYKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNu
YXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTI0NzAsNTMgKzI0NjksNTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbgogICAgIHNuYXBzaG90QnVpbGRlci5idWls
ZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmluZyA9IHNuYXBzaG90QnVpbGRlci5q
c29uKCk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTT05Q
YXJzZShleGVjLCBqc29uU3RyaW5nKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU09OUGFyc2Uo
ZXhlYywganNvblN0cmluZyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJTdGF0ZShFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUmVzZXRTdXBlclNhbXBsZXJTdGF0ZShFeGVjU3RhdGUqKQogewog
ICAgIHJlc2V0U3VwZXJTYW1wbGVyU3RhdGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuc3VyZUFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkKICAgICAgICAgICAg
IG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpOwogICAgIH0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJvZmlsZXIo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFNhbXBsaW5nUHJvZmlsZXImIHNhbXBsaW5nUHJvZmls
ZXIgPSBleGVjLT52bSgpLmVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoV1RGOjpTdG9wd2F0Y2g6OmNy
ZWF0ZSgpKTsKICAgICBzYW1wbGluZ1Byb2ZpbGVyLm5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4
ZWN1dGlvblRocmVhZCgpOwogICAgIHNhbXBsaW5nUHJvZmlsZXIuc3RhcnQoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQ
cm9maWxlclN0YWNrVHJhY2VzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBpZiAoIXZtLnNhbXBsaW5nUHJvZmlsZXIoKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJTYW1wbGluZyBwcm9maWxlciB3YXMgbmV2ZXIgc3Rh
cnRlZCIpKSkpOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiU2FtcGxpbmcgcHJvZmlsZXIgd2FzIG5ldmVy
IHN0YXJ0ZWQiKSkpOwogCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSB2bS5zYW1wbGluZ1Byb2Zp
bGVyKCktPnN0YWNrVHJhY2VzQXNKU09OKCk7Ci0gICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU09OUGFyc2UoZXhlYywganNvblN0cmluZyk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8v
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk1heEFyZ3VtZW50cyhFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTWF4QXJndW1lbnRzKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihKU0M6Om1heEFyZ3VtZW50cykpOworICAgIHJldHVybiBqc051bWJl
cihKU0M6Om1heEFyZ3VtZW50cyk7CiB9CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkBAIC0y
NjExLDcgKzI2MTAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBjYWxsV2FzbUZ1bmN0aW9uKFZNKiB2bSwg
CiAKIC8vIHRlc3RXYXNtTW9kdWxlKEpTQXJyYXlCdWZmZXJWaWV3IHNvdXJjZSwgbnVtYmVyIGZ1
bmN0aW9uQ291bnQsIC4uLltbV2FzbVZhbHVlLCBbV2FzbVZhbHVlXV1dKSB3aGVyZSB0aGUgaXRo
IGNvcHkgb2YgW1tyZXN1bHQsIFthcmdzXV1dIGlzIGEgbGlzdAogLy8gb2YgYXJndW1lbnRzIHRv
IGJlIHBhc3NlZCB0byB0aGUgaXRoIHdhc20gZnVuY3Rpb24gYXMgd2VsbCBhcyB0aGUgZXhwZWN0
ZWQgcmVzdWx0LiBXYXNtVmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggInR5cGUiIGFuZCAidmFsdWUi
IHByb3BlcnRpZXMuCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blRlc3RXYXNtTW9kdWxlRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNjgxLDcgKzI2ODAsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRUJMWSkKQEAgLTI5MTQsMTIgKzI5MTMsMTIgQEAgc3Rh
dGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogCiAgICAgICAgICAgICBKU0Z1
bmN0aW9uKiBmdWxmaWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhl
YykgewogICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGZhbHNlLCBl
eGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiByZWplY3RIYW5kbGVy
ID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmlu
ZygpLCBbJiwgaXNMYXN0RmlsZV0oRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgICAgICAgICAg
Y2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgdHJ1ZSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZnVsZmls
bEhhbmRsZXIsIHJlamVjdEhhbmRsZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDEzICszNiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RydWN0IEFQ
SUNhbGxiYWNrRnVuY3Rpb24gewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoRXhl
Y1N0YXRlKik7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsKEV4ZWNTdGF0ZSopOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEV4ZWNTdGF0ZSopOwogCiB9OwogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tG
dW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTY3LDEzICs2NywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNh
bGxiYWNrCiAKICAgICAvLyByZXN1bHQgbXVzdCBiZSBhIHZhbGlkIEpTVmFsdWUuCiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKGV4ZWMsIHJlc3VsdCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHJlc3VsdCk7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQorSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTk3LDE1ICs5NywxNSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrCiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4
Y2VwdGlvbikgewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHRvSlMo
ZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlMoZXhlYywgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBleGNl
cHRpb24pOwogICAgICAgICB9CiAgICAgICAgIC8vIHJlc3VsdCBtdXN0IGJlIGEgdmFsaWQgSlNW
YWx1ZS4KICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UyhyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMocmVzdWx0KTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKEpTT2JqZWN0TWFrZShjdHgsIGpzQ2FzdDxK
U0NhbGxiYWNrQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPmNsYXNzUmVmKCksIDApKSk7Cisg
ICAgcmV0dXJuIHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgMCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTIyNCwxMiArMjI0LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEpT
Q2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoSlNWYWx1ZSk7CiAgICAgc3RhdGljIEpT
Q2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoRW5jb2RlZEpTVmFsdWUpOwogIAotICAg
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7Ci0g
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEV4ZWNTdGF0
ZSopOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChFeGVjU3RhdGUqKTsK
ICAgIAogICAgIEpTVmFsdWUgZ2V0U3RhdGljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIGNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFsdWUgY2FsbGJhY2tH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxKU0NhbGxiYWNrT2JqZWN0RGF0YT4gbV9jYWxsYmFja09iamVjdERhdGE7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQy
MSw3ICs0MjEsNyBAQCBDb25zdHJ1Y3RUeXBlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTQ0NSwxMiArNDQ1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50PjoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAg
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHRvSlMoZXhlYywgZXhjZXB0
aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIGdldENvbnN0cnVjdERhdGEgc2hvdWxkIHByZXZl
bnQgdXMgZnJvbSByZWFjaGluZyBoZXJlCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkBA
IC00OTQsNyArNDk0LDcgQEAgQ2FsbFR5cGUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRD
YQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTUxOCwxMiArNTE4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
PjoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIGdldENhbGxEYXRhIHNob3VsZCBwcmV2ZW50IHVzIGZyb20g
cmVhY2hpbmcgaGVyZQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpAQCAtNjI2LDcgKzYy
Niw3IEBAIEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRTdGEKIH0KIAogdGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KLUVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6c3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6c3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTYzNiw3ICs2MzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46CiAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlZCBvciBvdmVycmlkZSBwcm9wZXJ0eS4KICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDIodGhpc09iaiwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgaWYgKFBhcmVudDo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdDIpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHNsb3QyLmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBy
ZXR1cm4gc2xvdDIuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKIAogICAgIGlmIChTdHJp
bmdJbXBsKiBuYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7CiAgICAgICAgIGZvciAoSlNDbGFz
c1JlZiBqc0NsYXNzID0gdGhpc09iai0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKSB7CkBAIC02NDUsMTggKzY0NSwxOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiAgICAgICAgICAgICAgICAgICAgIGlmIChKU09i
amVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFz
RnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gSlNDYWxs
YmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBjYWxsQXNG
dW5jdGlvbiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJl
Y3Qodm0sIHByb3BlcnR5TmFtZSwgbywgZW50cnktPmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJTdGF0aWMgZnVuY3Rpb24gcHJvcGVydHkgZGVmaW5lZCB3aXRo
IE5VTEwgY2FsbEFzRnVuY3Rpb24gY2FsbGJhY2suIikpKSk7CisgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIlN0YXRpYyBmdW5jdGlvbiBwcm9wZXJ0eSBkZWZpbmVkIHdpdGggTlVMTCBjYWxsQXNGdW5j
dGlvbiBjYWxsYmFjay4iKSkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotRW5jb2Rl
ZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpjYWxsYmFja0dldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK0pTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpjYWxsYmFja0dldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjc5LDE1ICs2NzksMTUgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCB0b0pTKGV4ZWMsIGV4Y2VwdGlvbikpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMoZXhlYywgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgdmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmVm
ZXJlbmNlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJoYXNQcm9wZXJ0eSBjYWxsYmFjayByZXR1
cm5lZCB0cnVlIGZvciBhIHByb3BlcnR5IHRoYXQgZG9lc24ndCBleGlzdC4iKSkpKTsKKyAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiaGFzUHJvcGVydHkgY2FsbGJhY2sgcmV0dXJuZWQgdHJ1ZSBmb3Ig
YSBwcm9wZXJ0eSB0aGF0IGRvZXNuJ3QgZXhpc3QuIikpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MTQxLDggKzExNDEsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICAvLyB0byBtYWtlIHNvbWUgc3BhY2UgaGVyZS4KICAgICAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIAotICAgICAgICAgICAgLy8gZ2V0dGVyOiBF
bmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgq
UHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSk7CisgICAgICAgICAgICAvLyBnZXR0ZXI6IEpTVmFsdWUgKCpHZXRW
YWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBK
U1ZhbHVlIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpOwogICAgICAgICAgICAgLy8gQ3VzdG9t
IHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhvbGRlciksIGN1
c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNpZXZlcikuCiAgICAg
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3VzdG9tIHZhbHVl
cyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgzOCw3ICs4MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlCiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QXJndW1lbnQpOwogICAgIAogICAgIGlmICghYmFzZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6Omlu
Zm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KSk7CiAKICAgICBKU1N0cmluZyogaW5wdXQgPSBhcmd1bWVudC50b1N0cmluZ09yTnVsbChleGVj
KTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhaW5wdXQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkdlbmVyYXRlZEZ1
bmN0aW9uKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgSlNWYWx1ZSAoKkdlbmVyYXRlZEZ1bmN0aW9u
KShFeGVjU3RhdGUqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwyMCArMzgsMjAgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rp
b25TdWJ0eXBlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uRGV0YWlscyhF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0
ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25HZXRJbnRlcm5hbFByb3BlcnRpZXMoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2Ny
aXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSW50ZXJuYWxDb25zdHJ1Y3Rvck5hbWUoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXNIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvbldlYWtNYXBTaXplKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBFbnRy
aWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRTaXplKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRFbnRyaWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVG
dW5jdGlvbkl0ZXJhdG9yRW50cmllcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25FdmFs
dWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rp
b25HZXRJbnRlcm5hbFByb3BlcnRpZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JbnRlcm5hbENv
bnN0cnVjdG9yTmFtZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbklzSFRNTEFsbENvbGxlY3Rpb24o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVlKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1
bmN0aW9uV2Vha01hcFNpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrTWFwRW50cmllcyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRTaXplKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9u
V2Vha1NldEVudHJpZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JdGVyYXRvckVudHJpZXMoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlRnVuY3Rpb25FdmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUq
KTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVBdHRyaWJ1dGVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVBdHRyaWJ1dGVF
dmFsdWF0ZShFeGVjU3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJJbmplY3RlZFNjcmlwdEhvc3QiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
KSB9OwogCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGU6OmZpbmkKICAgICBKU0NfTkFUSVZFX0dFVFRFUigiZXZhbHVhdGUiLCBqc0luamVjdGVkU2Ny
aXB0SG9zdFByb3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlLCBEb250RW51bSB8IEFjY2Vzc29yKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUF0dHJpYnV0ZUV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg3LDEwICs4NywxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmV2YWx1YXRlKGV4ZWMpKTsKKyAgICByZXR1
cm4gY2FzdGVkVGhpcy0+ZXZhbHVhdGUoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkludGVybmFsQ29u
c3RydWN0b3JOYW1lKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSW50ZXJuYWxDb25zdHJ1Y3Rvck5hbWUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTAwLDEwICsxMDAsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhp
cykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbnRlcm5hbENvbnN0cnVjdG9yTmFt
ZShleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmludGVybmFsQ29uc3RydWN0b3JOYW1l
KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1
bmN0aW9uSXNIVE1MQWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xMTMsMTAgKzExMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5q
ZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPmlzSFRNTEFsbENvbGxlY3Rpb24oZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5p
c0hUTUxBbGxDb2xsZWN0aW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZUZ1bmN0aW9uUHJveHlUYXJnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xMjYsMTAgKzEyNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzSW5qZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPnByb3h5VGFyZ2V0VmFsdWUoZXhlYykpOworICAgIHJldHVybiBjYXN0
ZWRUaGlzLT5wcm94eVRhcmdldFZhbHVlKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25XZWFrTWFwU2l6
ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTEzOSwxMCArMTM5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FzdGVkVGhpcy0+d2Vha01hcFNpemUoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT53
ZWFrTWFwU2l6ZShleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uV2Vha01hcEVudHJpZXMoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90
eXBlRnVuY3Rpb25XZWFrTWFwRW50cmllcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xNTIsMTAgKzE1MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5q
ZWN0ZWRTCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPndlYWtNYXBFbnRyaWVzKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+d2Vha01h
cEVudHJpZXMoZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRTaXplKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1
bmN0aW9uV2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY1
LDEwICsxNjUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkUwog
ICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT53ZWFr
U2V0U2l6ZShleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPndlYWtTZXRTaXplKGV4ZWMp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0
UHJvdG90eXBlRnVuY3Rpb25XZWFrU2V0RW50cmllcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtT
ZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE3OCwxMCArMTc4
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAo
IWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+d2Vha1NldEVudHJp
ZXMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT53ZWFrU2V0RW50cmllcyhleGVjKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUZ1bmN0aW9uSXRlcmF0b3JFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uSXRlcmF0
b3JFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5MSwxMCArMTkx
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAo
IWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXRlcmF0b3JFbnRy
aWVzKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+aXRlcmF0b3JFbnRyaWVzKGV4ZWMp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0
UHJvdG90eXBlRnVuY3Rpb25FdmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVG
dW5jdGlvbkV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTIwNCwxMCArMjA0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FzdGVkVGhpcy0+ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oZXhlYykpOworICAgIHJldHVy
biBjYXN0ZWRUaGlzLT5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihleGVjKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1
bmN0aW9uU3VidHlwZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblN1YnR5cGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMjE3LDEwICsyMTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0luamVjdGVkUwogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYXN0ZWRUaGlzLT5zdWJ0eXBlKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhp
cy0+c3VidHlwZShleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25EZXRhaWxzKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3Rv
dHlwZUZ1bmN0aW9uRnVuY3Rpb25EZXRhaWxzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTIzMCwxMCArMjMwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJ
bmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+ZnVuY3Rpb25EZXRhaWxzKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+ZnVu
Y3Rpb25EZXRhaWxzKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25HZXRJbnRlcm5hbFByb3BlcnRpZXMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlRnVuY3Rpb25HZXRJbnRlcm5hbFByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMjQzLDcgKzI0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFMKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGV4ZWMpKTsKKyAgICByZXR1
cm4gY2FzdGVkVGhpcy0+Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGV4ZWMpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNywxOSArMzcsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiAvLyBGdW5jdGlvbnMuCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNj
b3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0
aW9ucyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25FdmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2Fs
bEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucyhFeGVjU3RhdGUqKTsKIAog
Ly8gQXR0cmlidXRlcy4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2
YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNhbGxlcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNv
dXJjZUlEKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGluZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0
ZUNvbHVtbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZUF0dHJpYnV0ZVNjb3BlQ2hhaW4oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUaGlzT2JqZWN0KEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQXR0cmlidXRlVHlwZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUlzVGFpbERlbGV0ZWQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxG
cmFtZUF0dHJpYnV0ZUNhbGxlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU291cmNlSUQoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZUxpbmUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2
YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNvbHVtbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlRnVuY3Rpb25O
YW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3Jp
cHRDYWxsRnJhbWVBdHRyaWJ1dGVTY29wZUNoYWluKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUaGlzT2JqZWN0
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRD
YWxsRnJhbWVBdHRyaWJ1dGVUeXBlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVJc1RhaWxEZWxldGVkKEV4ZWNTdGF0ZSopOwog
CiBjb25zdCBDbGFzc0luZm8gSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJKYXZhU2NyaXB0Q2FsbEZyYW1lIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUpIH07CiAKQEAgLTczLDcgKzcz
LDcgQEAgdm9pZCBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGU6OmZpbgogICAgIEpTQ19O
QVRJVkVfR0VUVEVSKCJpc1RhaWxEZWxldGVkIiwganNKYXZhU2NyaXB0Q2FsbEZyYW1lSXNUYWls
RGVsZXRlZCwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25FdmFsdWF0ZVdp
dGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25FdmFsdWF0ZVdpdGhTY29wZUV4
dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MywxMCArODMsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcAogICAgIGlmICghY2Fz
dGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5ldmFsdWF0ZVdpdGhTY29w
ZUV4dGVuc2lvbihleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmV2YWx1YXRlV2l0aFNj
b3BlRXh0ZW5zaW9uKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZUZ1bmN0aW9uU2NvcGVEZXNjcmlwdGlvbnMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZUZ1bmN0aW9uU2NvcGVEZXNjcmlwdGlvbnMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwpAQCAtOTYsMTAgKzk2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNKYXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FzdGVkVGhpcy0+c2NvcGVEZXNjcmlwdGlvbnMoZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRU
aGlzLT5zY29wZURlc2NyaXB0aW9ucyhleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVDYWxsZXIoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0
ZUNhbGxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDksMTAgKzEwOSwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFj
YXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmNhbGxlcihleGVjKSk7
CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmNhbGxlcihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVTb3VyY2VJRChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZy
YW1lQXR0cmlidXRlU291cmNlSUQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTIyLDEwICsxMjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3Jp
cAogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5z
b3VyY2VJRChleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnNvdXJjZUlEKGV4ZWMpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0
dHJpYnV0ZUxpbmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2
YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUxpbmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTM1LDEwICsxMzUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0phdmFTY3JpcAogICAgIGlmICghY2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5saW5lKGV4ZWMpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+bGluZShleGVjKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVB
dHRyaWJ1dGVDb2x1bW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
SmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNvbHVtbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPmNvbHVtbihleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmNvbHVt
bihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRD
YWxsRnJhbWVBdHRyaWJ1dGVGdW5jdGlvbk5hbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjEsMTAgKzE2MSwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlz
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmZ1bmN0aW9uTmFtZShleGVjKSk7Cisg
ICAgcmV0dXJuIGNhc3RlZFRoaXMtPmZ1bmN0aW9uTmFtZShleGVjKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVTY29wZUNo
YWluKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRD
YWxsRnJhbWVBdHRyaWJ1dGVTY29wZUNoYWluKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE3NCwxMCArMTc0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNK
YXZhU2NyaXAKICAgICBpZiAoIWNhc3RlZFRoaXMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+c2NvcGVDaGFpbihleGVjKSk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnNjb3BlQ2hh
aW4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0
Q2FsbEZyYW1lQXR0cmlidXRlVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlVGhpc09iamVjdChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xODcsMTAgKzE4NywxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFjYXN0ZWRUaGlzKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRoaXNPYmplY3QoZXhlYykpOworICAgIHJl
dHVybiBjYXN0ZWRUaGlzLT50aGlzT2JqZWN0KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVR5cGUoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZVR5cGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjAwLDEwICsyMDAs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcAogICAgIGlmICgh
Y2FzdGVkVGhpcykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50eXBlKGV4ZWMpKTsK
KyAgICByZXR1cm4gY2FzdGVkVGhpcy0+dHlwZShleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVJc1RhaWxEZWxldGVkKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVJc1Rh
aWxEZWxldGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIxMyw3ICsyMTMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwCiAgICAgaWYgKCFj
YXN0ZWRUaGlzKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmlzVGFpbERlbGV0ZWQo
ZXhlYykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5pc1RhaWxEZWxldGVkKGV4ZWMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVi
dWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU1N0cmluZyogc3RhY2tUcmFjZUFzU3RyaW5n
KFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CiAKLSAgICAgICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKik7Ci0gICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IoRXhlY1N0
YXRlKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IoRXhlY1N0YXRlKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wQ2Fs
bEZyYW1lKENhbGxGcmFtZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MTksNyArODE5
LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Okhvc3QpIHsKICAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxl
ZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0tPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCiAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCkBAIC04
NDgsNyArODQ4LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAog
ICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGU6Okhvc3QpIHsKICAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4
ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0tPmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAogICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZTo6SG9zdCkgewogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWNDYWxsZWUpOwogICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2Jq
ZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAg
ICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4o
ZXhlY0NhbGxlZSwgZXhlY0NhbGxlZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSkpOwogICAgICAgICB9CkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBzdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29u
c3RydWN0VHlwZTo6SG9zdCkgewogICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKLSAgICAgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAg
IHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihl
eGVjQ2FsbGVlKTsKIAogICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBleGVj
Q2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTI2LDcgKzExMjYsNyBAQCBjbGFzcyBJbnN0cnVjdGlvbgog
ICAgICAgICAjIGhhdmUgYSBmaXhlZCBwcm90b3R5cGUgb2YgMSBhcmdzOiB0aGUgcGFzc2VkIEV4
ZWNTdGF0ZS4KICAgICAgICAgd2hlbiAiY2xvb3BDYWxsTmF0aXZlIgogICAgICAgICAgICAgJGFz
bS5wdXRjICJuYXRpdmVGdW5jID0gI3tvcGVyYW5kc1swXS5jbFZhbHVlKDpuYXRpdmVGdW5jKX07
IgotICAgICAgICAgICAgJGFzbS5wdXRjICJmdW5jdGlvblJldHVyblZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKG5hdGl2ZUZ1bmModDAuZXhlY1N0YXRlKSk7IgorICAgICAgICAgICAgJGFzbS5wdXRj
ICJmdW5jdGlvblJldHVyblZhbHVlID0gbmF0aXZlRnVuYyh0MC5leGVjU3RhdGUpOyIKICAgICAg
ICAgICAgICRhc20ucHV0YyAiI2lmIFVTRShKU1ZBTFVFMzJfNjQpIgogICAgICAgICAgICAgJGFz
bS5wdXRjICIgICAgdDEuaSA9IGZ1bmN0aW9uUmV0dXJuVmFsdWUudGFnKCk7IgogICAgICAgICAg
ICAgJGFzbS5wdXRjICIgICAgdDAuaSA9IGZ1bmN0aW9uUmV0dXJuVmFsdWUucGF5bG9hZCgpOyIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwgMjAxMSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LTIwMDgsIDIwMTEsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBA
IC05NCwxMCArOTQsMTAgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdEFycmF5V2l0
aAogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBudWxscHRyLCBnbG9iYWxPYmplY3Qs
IGFyZ3MsIG5ld1RhcmdldCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBhcmdzLCBleGVj
LT5uZXdUYXJnZXQoKSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
ZXhlYywgYXJncywgZXhlYy0+bmV3VGFyZ2V0KCkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEFycmF5
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSkKQEAgLTEwNiwxMCArMTA2LDEwIEBAIENvbnN0cnVjdFR5cGUgQXJyYXlDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3QKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9zdDsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEFycmF5Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQXJyYXlD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGV4
ZWMsIGFyZ3MsIEpTVmFsdWUoKSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXpl
UXVpcmsoZXhlYywgYXJncywgSlNWYWx1ZSgpKTsKIH0KIAogQ2FsbFR5cGUgQXJyYXlDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtMTUwLDE1
ICsxNTAsMTUgQEAgYm9vbCBpc0FycmF5U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3h5TwogCiAv
LyBFUzYgNy4yLjIKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJy
YXkKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVG
dW5jSXNBcnJheVNsb3coRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5Q29uc3RydWN0b3JQcml2YXRlRnVuY0lzQXJyYXlTbG93KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxQcm94eU9iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDAp
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNBcnJheVNsb3dJbmxp
bmUoZXhlYywganNDYXN0PFByb3h5T2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
KSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oaXNBcnJheVNsb3dJbmxpbmUoZXhlYywganNDYXN0
PFByb3h5T2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJh
eUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUNvbnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8
QXJyYXlDb25zdHJ1Y3Rvcio+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxBcnJheUNvbnN0cnVjdG9yKj4oZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDgsIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDExLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjIsOCAr
NjIsOCBAQCBwcml2YXRlOgogCiBKU1ZhbHVlIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhF
eGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIGxlbmd0aCwgSlNWYWx1ZSBwcm90b3R5cGUgPSBKU1ZhbHVlKCkpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JQcml2YXRlRnVuY0lzQXJyYXlDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlD
b25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheVNsb3coRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JQcml2
YXRlRnVuY0lzQXJyYXlTbG93KEV4ZWNTdGF0ZSopOwogYm9vbCBpc0FycmF5U2xvdyhFeGVjU3Rh
dGUqLCBQcm94eU9iamVjdCogYXJndW1lbnQpOwogCiAvLyBFUzYgNy4yLjIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDctMjAwOSwgMjAxMSwgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOSwg
MjAxMSwgMjAxMywgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAg
LTQ4LDE3ICs0OCwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2
ZXJzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNTaGlmdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2lu
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTaGlmdChFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhP
ZihFeGVjU3RhdGUqKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5
UHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzgyLDcgKzM4Miw3
IEBAIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAKICAgICB9CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zOTAsMTEgKzM5MCwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyAxLiBMZXQg
YXJyYXkgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVl
LgogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgLy8gMi4gTGV0IGZ1bmMg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBh
cnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gSlNWYWx1
ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+am9pbik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykg
aXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCiAgICAgYm9vbCBjdXN0b21Kb2lu
Q2FzZSA9IGZhbHNlOwpAQCAtNDA3LDEzICs0MDcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKFVOTElLRUxZKGN1c3RvbUpvaW5DYXNlKSkg
ewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiW29iamVjdCAiLCB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmNsYXNzTmFtZSh0aGlzT2JqZWN0KSwgIl0iKSk7CisgICAgICAgIHJl
dHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJbb2JqZWN0ICIsIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+Y2xhc3NOYW1lKHRoaXNPYmplY3QpLCAiXSIpOwogICAgIH0KIAog
ICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVy
bmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBhcnJheSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQg
YW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCiAgICAgaWYgKCFpc0pTQXJyYXkodGhpc09iamVjdCkg
fHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
ICE9IGFycmF5UHJvdG9GdW5jSm9pbikgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSkpOworICAgICAgICByZXR1
cm4gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBl
eGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFs
dWUpKTsKQEAgLTQyNCw4NiArNDI0LDg2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhp
c0FycmF5KTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlS
ZXR1cm5WYWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tl
ci5lYXJseVJldHVyblZhbHVlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFy
bHlSZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiBlYXJseVJldHVyblZhbHVlOwogCiAgICAg
SlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzQXJyYXktPnRyeUdldEluZGV4
UXVpY2tseShpKTsKICAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAgICAgICAgICBlbGVtZW50
ID0gdGhpc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0KICAgICAgICAgam9pbmVyLmFwcGVuZCgqZXhl
YywgZWxlbWVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IH0KIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpv
aW5lci5qb2luKCpleGVjKSk7CisgICAgcmV0dXJuIGpvaW5lci5qb2luKCpleGVjKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Rv
TG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsK
IAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBn
ZXRMZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0
KTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5W
YWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJs
eVJldHVyblZhbHVlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1
cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiBlYXJseVJldHVyblZhbHVlOwogCiAgICAgSlNTdHJp
bmdKb2luZXIgc3RyaW5nSm9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogI2lmIEVOQUJMRShJTlRMKQogICAgIEFyZ0xpc3QgYXJndW1l
bnRzKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChlbGVt
ZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0
cmluZyhleGVjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGNvbnZlcnNp
b25GdW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxl
U3RyaW5nKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAg
ICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgICAg
IGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBlbGVtZW50LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICNlbHNlIC8vICFFTkFCTEUoSU5UTCkKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1
ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEpTVmFsdWUgY29udmVy
c2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2Nh
bGVTdHJpbmcpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlw
ZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywg
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogI2VuZGlm
IC8vICFFTkFCTEUoSU5UTCkKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKCpleGVjKSk7CisgICAgcmV0dXJuIHN0cmlu
Z0pvaW5lci5qb2luKCpleGVjKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzSG9sZShkb3Vi
bGUgdmFsdWUpCkBAIC02NjIsNyArNjYyLDcgQEAgZ2VuZXJhbENhc2U6CiAgICAgcmV0dXJuIGpv
aW5lci5qb2luKHN0YXRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NzEs
MTYgKzY3MSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkgPT0gIXRoaXNPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAg
ICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
U3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwog
ICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJuVmFsdWU7CiAKICAgICAvLyAyLiBMZXQgbGVuIGJl
ID8gVG9MZW5ndGgoPyBHZXQoTywgImxlbmd0aCIpKS4KICAgICBkb3VibGUgbGVuZ3RoID0gdG9M
ZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIC8vIDMuIElmIHNlcGFyYXRvciBpcyB1bmRlZmluZWQsIGxldCBzZXBhcmF0b3IgYmUg
dGhlIHNpbmdsZS1lbGVtZW50IFN0cmluZyAiLCIuCiAgICAgSlNWYWx1ZSBzZXBhcmF0b3JWYWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtNjkxLDM5ICs2OTEsMzkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdWludDY0X3QgbGVuZ3Ro
NjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0aDY0KSA9PSBsZW5ndGgpOwogICAgICAgICAgICAgSlNT
dHJpbmcqIGpzU2VwYXJhdG9yID0ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgY29tbWEp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKTsK
KyAgICAgICAgICAgIHJldHVybiBzbG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0
b3IsIGxlbmd0aDY0KTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkTGVu
Z3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCk7CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxkb3VibGU+KHVuc2lnbmVkTGVuZ3RoKSA9PSBsZW5ndGgpOwogCiAgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmYXN0Sm9pbigq
ZXhlYywgdGhpc09iamVjdCwgeyAmY29tbWEsIDEgfSwgdW5zaWduZWRMZW5ndGgpKTsKKyAgICAg
ICAgcmV0dXJuIGZhc3RKb2luKCpleGVjLCB0aGlzT2JqZWN0LCB7ICZjb21tYSwgMSB9LCB1bnNp
Z25lZExlbmd0aCk7CiAgICAgfQogCiAgICAgLy8gNC4gTGV0IHNlcCBiZSA/IFRvU3RyaW5nKHNl
cGFyYXRvcikuCiAgICAgSlNTdHJpbmcqIGpzU2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9T
dHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChV
TkxJS0VMWShsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwg
IWNhblVzZUZhc3RKb2luKHRoaXNPYmplY3QpKSkgewogICAgICAgICB1aW50NjRfdCBsZW5ndGg2
NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3RoKTsKIAogICAgICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmV4ZWMsIHRo
aXNPYmplY3QsIGpzU2VwYXJhdG9yLCBsZW5ndGg2NCkpOworICAgICAgICByZXR1cm4gc2xvd0pv
aW4oKmV4ZWMsIHRoaXNPYmplY3QsIGpzU2VwYXJhdG9yLCBsZW5ndGg2NCk7CiAgICAgfQogCiAg
ICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IGpzU2VwYXJhdG9yLT52aWV3V2l0aFVuZGVybHlpbmdT
dHJpbmcoKmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmYXN0Sm9pbigqZXhlYywg
dGhpc09iamVjdCwgdmlld1dpdGhTdHJpbmcudmlldywgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGZh
c3RKb2luKCpleGVjLCB0aGlzT2JqZWN0LCB2aWV3V2l0aFN0cmluZy52aWV3LCBsZW5ndGgpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1BvcChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03MzIsMzYgKzczMiwzNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoaXNKU0FycmF5KHRo
aXNWYWx1ZSkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzQXJyYXkodGhpc1ZhbHVlKS0+cG9wKGV4ZWMpKTsKKyAgICAgICAgcmV0
dXJuIGFzQXJyYXkodGhpc1ZhbHVlKS0+cG9wKGV4ZWMpOwogICAgIH0KIAogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3Bl
LmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQot
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNO
dW1iZXIobGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGVuZ3RoIC0gMSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nl
c3MpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
VW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgcHV0TGVuZ3RoKGV4ZWMsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGggLSAxKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2go
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzcxLDE1ICs3NzEsMTUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICBhcnJheS0+cHVzaChleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpOwogICAgIH0KICAgICAKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBBU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0
aGlzT2JqKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAw
OyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKICAgICAgICAgLy8gQ2hlY2sgZm9y
IGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2FuIGRvIGEgZmFzdCBwdXQgYnkgaW5k
ZXguCkBAIC03OTAsMTYgKzc5MCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgp
ICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAg
ICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQobiksIHNsb3QpOwogICAgICAgICB9Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICAKICAgICBKU1Zh
bHVlIG5ld0xlbmd0aChzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwgbmV3TGVuZ3RoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG5ld0xlbmd0aCk7CisgICAgcmV0dXJuIG5ld0xlbmd0aDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MDcsMTAgKzgwNywxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmpl
Y3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmplY3Qp
OwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgIHJldHVybiBlbmNvZGVk
SlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKQEAgLTgyMiw3ICs4MjIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChjb250YWlu
c0hvbGUoZGF0YSwgbGVuZ3RoKSAmJiBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUoKmV4ZWMs
IHRoaXNPYmplY3QpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHN0ZDo6cmV2ZXJzZShk
YXRhLCBkYXRhICsgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlz
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Q7CiAgICAgfQogICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhp
c09iamVjdC0+YnV0dGVyZmx5KCk7CkBAIC04MzIsNyArODMyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoY29udGFpbnNIb2xlKGRhdGEs
IGxlbmd0aCkgJiYgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKCpleGVjLCB0aGlzT2JqZWN0
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBzdGQ6OnJldmVyc2UoZGF0YSwgZGF0YSAr
IGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdCk7Cisg
ICAgICAgIHJldHVybiB0aGlzT2JqZWN0OwogICAgIH0KICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGF1dG8mIHN0b3JhZ2UgPSAqdGhpc09iamVj
dC0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwpAQCAtODQyLDcgKzg0Miw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBhdXRvIGRhdGEgPSBzdG9yYWdlLnZlY3RvcigpLmRhdGEoKTsKICAgICAgICAgc3Rk
OjpyZXZlcnNlKGRhdGEsIGRhdGEgKyBsZW5ndGgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gdGhpc09iamVjdDsKICAgICB9CiAg
ICAgfQogCkBAIC04NTAsNzUgKzg1MCw3NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgZm9yICh1bnNpZ25lZCBsb3dlciA9IDA7IGxvd2VyIDwgbWlkZGxl
OyBsb3dlcisrKSB7CiAgICAgICAgIHVuc2lnbmVkIHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIgLSAx
OwogICAgICAgICBib29sIGxvd2VyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhl
YywgbG93ZXIpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAg
ICAgSlNWYWx1ZSBsb3dlclZhbHVlOwogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAg
ICAgICAgIGxvd2VyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgbG93ZXIpOwotICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAKICAg
ICAgICAgYm9vbCB1cHBlckV4aXN0cyA9IHRoaXNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHVw
cGVyKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIEpT
VmFsdWUgdXBwZXJWYWx1ZTsKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAg
ICB1cHBlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElu
bGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBsb3dlcik7Ci0gICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXN1
Y2Nlc3MpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbChVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAg
ICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHVwcGVyLCBsb3dl
clZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKICAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKFVuYWJsZVRvRGVs
ZXRlUHJvcGVydHlFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAh
dGhpc09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKLSAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICBwdXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCkpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNP
YmotPmdldEluZGV4KGV4ZWMsIDApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgIHB1dExlbmd0aChleGVjLCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVu
Z3RoIC0gMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIu
bmV0c2NhcGUuY29tL2RvY3MvbWFudWFscy9qcy9jbGllbnQvanNyZWYvYXJyYXkuaHRtIzExOTM3
MTMgb3IgMTUuNC40LjEwCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTkyNiwyNiArOTI2
LDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09i
amVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2Rl
KS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhp
c09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKLSAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
Z2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JF
bmQoZXhlYywgMCwgbGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywg
MSwgbGVuZ3RoLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVz
dWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGV4ZWMsIHRoaXNPYmosIGVuZCAtIGJlZ2luKTsK
ICAgICAvLyBXZSBjYW4gb25seSBnZXQgYW4gZXhjZXB0aW9uIGlmIHdlIGNhbGwgc29tZSB1c2Vy
IGZ1bmN0aW9uLgogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVz
dWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgIGlm
IChVTkxJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6
OkV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNP
YmopICYmIGxlbmd0aCA9PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkgewogICAg
ICAgICBpZiAoSlNBcnJheSogcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpl
eGVjLCBiZWdpbiwgZW5kIC0gYmVnaW4pKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBK
U09iamVjdCogcmVzdWx0OwpAQCAtOTUzLDI0ICs5NTMsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNl
Y29uZDsKICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCBudWxscHRyLCBlbmQgLSBiZWdpbik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG4gPSAwOwogICAgIGZvciAodW5zaWdu
ZWQgayA9IGJlZ2luOyBrIDwgZW5kOyBrKyssIG4rKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBn
ZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIG4sIHYsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAg
ICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBzZXRMZW5ndGgoZXhlYywgdm0sIHJlc3Vs
dCwgbik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNT
cGxpY2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyAxNS40LjQuMTIKIApAQCAtOTgw
LDM4ICs5ODAsMzggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0
cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigp
ID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIHN0
ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQg
PSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZXhlYywgdGhpc09iaiwgMCk7CiAgICAgICAgIEFTU0VS
VCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXND
b25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc3BlY2ll
c1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKQotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgICAgIEpTT2JqZWN0KiByZXN1bHQ7CiAgICAgICAgIGlmIChzcGVjaWVzUmVzdWx0
LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmplY3QpCiAgICAgICAg
ICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNlY29uZDsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIHZtLCByZXN1bHQsIDApOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICBzZXRMZW5ndGgoZXhlYywgdm0sIHRoaXNPYmosIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBhY3R1YWxTdGFydCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgdW5zaWduZWQgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW5ndGggLSBhY3R1YWxTdGFydDsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgewogICAgICAgICBkb3VibGUgZGVs
ZXRlQ291bnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludGVnZXIoZXhlYyk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoZGVsZXRl
Q291bnQgPCAwKQogICAgICAgICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSAwOwogICAgICAgICBl
bHNlIGlmIChkZWxldGVDb3VudCA+IGxlbmd0aCAtIGFjdHVhbFN0YXJ0KQpAQCAtMTAyMywxMSAr
MTAyMywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
c3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc1Jlc3Vs
dCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShleGVjLCB0aGlzT2JqLCBhY3R1YWxEZWxldGVDb3Vu
dCk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKHNwZWNp
ZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBudWxscHRyOwogICAg
IGJvb2wgb2tUb0RvRmFzdFBhdGggPSBzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25z
dHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoICYmIGlzSlNBcnJheSh0aGlzT2JqKSAmJiBsZW5ndGggPT0g
Z2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgaWYgKExJS0VMWShva1RvRG9GYXN0UGF0aCkpCiAgICAgICAgIHJlc3VsdCA9IGFzQXJy
YXkodGhpc09iaiktPmZhc3RTbGljZSgqZXhlYywgYWN0dWFsU3RhcnQsIGFjdHVhbERlbGV0ZUNv
dW50KTsKIApAQCAtMTAzNywyMCArMTAzNywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGFjdHVhbFN0YXJ0KTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0QnlJbmRleElubGluZShleGVjLCBrLCB2
LCB0cnVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVz
dWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgYWN0dWFsRGVsZXRlQ291bnQpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyArK2spIHsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
ICsgYWN0dWFsU3RhcnQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcmVzdWx0LT5pbml0aWFs
aXplSW5kZXgodm0sIGssIHYpOwpAQCAtMTA2MSwyMiArMTA2MSwyMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgaXRlbUNvdW50ID0gc3Rk
OjptYXg8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoaXRlbUNv
dW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRD
b3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYWN0dWFsU3RhcnQsIGFjdHVhbERlbGV0ZUNv
dW50LCBpdGVtQ291bnQsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIH0gZWxzZSBpZiAoaXRlbUNvdW50ID4gYWN0dWFsRGVsZXRlQ291bnQpIHsK
ICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlz
T2JqLCBhY3R1YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBpdGVtQ291bnQ7ICsraykgewogICAgICAgICB0aGlzT2JqLT5w
dXRCeUluZGV4SW5saW5lKGV4ZWMsIGsgKyBhY3R1YWxTdGFydCwgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoayArIDIpLCB0cnVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBzZXRMZW5ndGgoZXhl
Yywgdm0sIHRoaXNPYmosIGxlbmd0aCAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaXRlbUNvdW50KTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2hpZnQo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5T
aGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDg1LDI2ICsxMDg1LDI2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU09iamVj
dCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50
b09iamVjdChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09i
aik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5y
QXJncykgewogICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhl
YywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IG5y
QXJnczsgKytrKSB7CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaywg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoayksIHRydWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihs
ZW5ndGggKyBuckFyZ3MpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBwdXRMZW5ndGgoZXhl
Yywgdm0sIHRoaXNPYmosIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTExMywyNiArMTExMywyNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT50aGlzVmFsdWUoKS50
b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikp
Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7CiAgICAgSlNWYWx1ZSBz
ZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZm9yICg7IGluZGV4IDwgbGVu
Z3RoOyArK2luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRo
aXNPYmosIGluZGV4KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZGV4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKC0xKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTExNDEsMTAgKzExNDEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVl
KCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFTU0VSVCgh
IXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNP
YmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CiAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCAhbGVuZ3RoKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgICAgIHJldHVybiBqc051bWJl
cigtMSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CkBAIC0xMTUzLDcgKzExNTMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChmcm9tRG91YmxlIDwg
MCkgewogICAgICAgICAgICAgZnJvbURvdWJsZSArPSBsZW5ndGg7CiAgICAgICAgICAgICBpZiAo
ZnJvbURvdWJsZSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigtMSkpOworICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCBsZW5ndGgpCiAgICAgICAgICAgICBpbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tRG91YmxlKTsKQEAgLTExNjMsMTUgKzExNjMs
MTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGRvIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBsZW5ndGgpOwogICAgICAgICBKU1ZhbHVl
IGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1l
bnQsIGUpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbmRl
eCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihpbmRleCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KC0xKTsKIH0KIAogc3RhdGljIGJvb2wgbW92ZUVsZW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgSlNBcnJheSogc291
cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgpCkBAIC0xMTk5LDcgKzExOTksNyBAQCBzdGF0aWMg
Ym9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25jYXRBcHBlbmRPbmUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIEpTQXJyYXkqIGZpcnN0LCBKU1ZhbHVlIHNlY29uZCkKK3N0YXRpYyBKU1ZhbHVlIGNv
bmNhdEFwcGVuZE9uZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogZmlyc3QsIEpT
VmFsdWUgc2Vjb25kKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtMTIxNiwyNSArMTIxNiwyNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0
QXBwZW5kT25lKEV4CiAgICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1cmUgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbih0eXBlKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUodm0s
IHJlc3VsdFN0cnVjdHVyZSwgZmlyc3RBcnJheVNpemUgKyAxKTsKICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQtPmFwcGVuZE1lbWNweShleGVjLCB2
bSwgMCwgZmlyc3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKCFz
dWNjZXNzKSB7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpOwogICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3Mp
KQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmQpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogCiB9CiAKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHko
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRl
RnVuY0NvbmNhdE1lbWNweShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAyKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTI0Niwx
MyArMTI0NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAg
ICAgLy8gaGFzIGluZGV4ZWQgYWNjZXNzb3JzIHRoZW4gb25lIG9mIHRob3NlIGFjY2Vzc29ycyBt
aWdodCBjaGFuZ2UgdGhlIHZhbHVlIG9mIFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUKICAgICAv
LyBvbiB0aGUgc2Vjb25kIGFyZ3VtZW50LgogICAgIGlmIChVTkxJS0VMWShzaG91bGRVc2VTbG93
UHV0KGZpcnN0QXJyYXktPmluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIHRoZSBzcGVjaWVzIGNvbnN0cnVjdG9yIGhlcmUgc2luY2UgY2hlY2tp
bmcgaXQgaW4gdGhlIEpTIHdyYXBwZXIgaXMgdG9vIGV4cGVuc2l2ZSBmb3IgdGhlIG5vbi1vcHRp
bWl6aW5nIHRpZXJzLgogICAgIGJvb2wgaXNWYWxpZCA9IHNwZWNpZXNXYXRjaHBvaW50c1ZhbGlk
KGV4ZWMsIGZpcnN0QXJyYXkpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWlz
VmFsaWQpOwogICAgIGlmIChVTkxJS0VMWSghaXNWYWxpZCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBK
U1ZhbHVlIHNlY29uZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwogICAgIGlmICghaXNK
U0FycmF5KHNlY29uZCkpIHsKQEAgLTEyNzIsMjQgKzEyNzIsMjQgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RB
cnJheS0+bWVyZ2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZFR5cGUpOwogICAgIGlmICh0
eXBlID09IE5vbkFycmF5IHx8ICFmaXJzdEFycmF5LT5jYW5GYXN0Q29weSh2bSwgc2Vjb25kQXJy
YXkpIHx8IGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXplID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCBmaXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFy
cmF5U2l6ZSk7CiAgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpCi0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHN1Y2Nlc3Mg
PSBtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZEFy
cmF5LCBzZWNvbmRBcnJheVNpemUpOwogICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
ID09IHN1Y2Nlc3MpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQotICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVyZSA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKHR5cGUpOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQodm0sIHJlc3VsdFN0cnVjdHVyZSwgZmlyc3RBcnJheVNpemUgKyBzZWNv
bmRBcnJheVNpemUpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1
cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAKICAgICBpZiAodHlw
ZSA9PSBBcnJheVdpdGhEb3VibGUpIHsKICAgICAgICAgZG91YmxlKiBidWZmZXIgPSByZXN1bHQt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwpAQCAtMTMwNywxMCArMTMw
NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9QCiAgICAgfQog
CiAgICAgcmVzdWx0LT5idXR0ZXJmbHkoKS0+c2V0UHVibGljTGVuZ3RoKGZpcnN0QXJyYXlTaXpl
ICsgc2Vjb25kQXJyYXlTaXplKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvUHJpdmF0ZUZ1bmNBcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAzKTsKIApA
QCAtMTMyMyw3ICsxMzIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvUAogICAgIGlmICghcmVzdWx0QXJyYXktPmFwcGVuZE1lbWNweShleGVjLCB2bSwgc3RhcnRJ
bmRleCwgb3RoZXJBcnJheSkpCiAgICAgICAgIG1vdmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0
QXJyYXksIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXksIG90aGVyQXJyYXktPmxlbmd0aCgpKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAxMSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDExLCAy
MDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTY3LDkgKzY3LDkgQEAgcHJpdmF0ZToKICAgICBTcGVjaWVzV2F0Y2hwb2ludFN0
YXR1cyBtX3NwZWNpZXNXYXRjaHBvaW50U3RhdHVzIHsgU3BlY2llc1dhdGNocG9pbnRTdGF0dXM6
OlVuaW5pdGlhbGl6ZWQgfTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweShFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQXBw
ZW5kTWVtY3B5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweShFeGVjU3RhdGUqKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3lu
Y0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FzeW5jRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE2IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPi4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDE2ICs1MSwxNiBAQCB2b2lkIEFzeW5jRnVuY3Rpb25D
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVu
dW0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQXN5bmNG
dW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29u
c3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpBc3luYykp
OworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVj
dGlvbk1vZGU6OkFzeW5jKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXN5bmNGdW5jdGlvbkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdzLCBGdW5jdGlvbkNv
bnN0cnVjdGlvbk1vZGU6OkFzeW5jKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4
ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCks
IGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmMpOwogfQogCiBDYWxsVHlwZSBB
c3luY0Z1bmN0aW9uQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBj
YWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21p
Y3NPYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKICAgICBtYWNybyh4b3IsIFhv
ciwgMykKIAogI2RlZmluZSBERUNMQVJFX0ZVTkNfUFJPVE8obG93ZXJOYW1lLCB1cHBlck5hbWUs
IGNvdW50KSAgICAgICAgICAgICAgICAgXAotICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXRvbWljc0Z1bmMgIyMgdXBwZXJOYW1lKEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhdG9taWNzRnVuYyAjIyB1cHBlck5hbWUoRXhlY1N0YXRlKik7CiBGT1JfRUFD
SF9BVE9NSUNTX0ZVTkMoREVDTEFSRV9GVU5DX1BST1RPKQogI3VuZGVmIERFQ0xBUkVfRlVOQ19Q
Uk9UTwogCkBAIC04OCwxOSArODgsMTkgQEAgdm9pZCBBdG9taWNzT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbihWTSYgdgogbmFtZXNwYWNlIHsKIAogdGVtcGxhdGU8dW5zaWduZWQgbnVtRXh0cmFBcmdz
LCB0eXBlbmFtZSBBZGFwdG9yLCB0eXBlbmFtZSBGdW5jPgotRW5jb2RlZEpTVmFsdWUgYXRvbWlj
T3BlcmF0aW9uV2l0aEFyZ3NDYXNlKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUs
IEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldywgdW5zaWduZWQgYWNjZXNzSW5kZXgs
IGNvbnN0IEZ1bmMmIGZ1bmMpCitKU1ZhbHVlIGF0b21pY09wZXJhdGlvbldpdGhBcmdzQ2FzZShF
eGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBKU0FycmF5QnVmZmVyVmlldyogdHlw
ZWRBcnJheVZpZXcsIHVuc2lnbmVkIGFjY2Vzc0luZGV4LCBjb25zdCBGdW5jJiBmdW5jKQogewog
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiB0eXBlZEFycmF5ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Kj4odHlwZWRBcnJheVZpZXcpOwogICAg
IAogICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZXh0cmFBcmdzW251bUV4dHJhQXJncyArIDFd
OyAvLyBBZGQgMSB0byBhdm9pZCAwIHNpemUgYXJyYXkgZXJyb3IgaW4gVlMuCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUV4dHJhQXJnczsgKytpKSB7CiAgICAgICAgIGludDMyX3Qg
dmFsdWUgPSBleGVjLT5hcmd1bWVudCgyICsgaSkudG9JbnQzMihleGVjKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgZXh0cmFB
cmdzW2ldID0gQWRhcHRvcjo6dG9OYXRpdmVGcm9tSW50MzIodmFsdWUpOwogICAgIH0KIAogICAg
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgcmVzdWx0ID0gZnVuYyh0eXBlZEFycmF5LT50eXBlZFZl
Y3RvcigpICsgYWNjZXNzSW5kZXgsIGV4dHJhQXJncyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShBZGFwdG9yOjp0b0pTVmFsdWUocmVzdWx0KSk7CisgICAgcmV0dXJuIEFkYXB0b3I6OnRv
SlNWYWx1ZShyZXN1bHQpOwogfQogCiB1bnNpZ25lZCB2YWxpZGF0ZWRBY2Nlc3NJbmRleChWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3KQpA
QCAtMTI3LDcgKzEyNyw3IEBAIHVuc2lnbmVkIHZhbGlkYXRlZEFjY2Vzc0luZGV4KFZNJiB2bSwg
RXgKIH0KIAogdGVtcGxhdGU8dW5zaWduZWQgbnVtRXh0cmFBcmdzLCB0eXBlbmFtZSBGdW5jPgot
RW5jb2RlZEpTVmFsdWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBGdW5jJiBmdW5jKQorSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzUsNyArMTM1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoRQogICAgIEpTVmFs
dWUgdHlwZWRBcnJheVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0eXBlZEFy
cmF5VmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhIGNlbGwuIikpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBKU0NlbGwqIHR5cGVkQXJyYXlDZWxsID0gdHlw
ZWRBcnJheVZhbHVlLmFzQ2VsbCgpOwpAQCAtMTUxLDE3ICsxNTEsMTcgQEAgRW5jb2RlZEpTVmFs
dWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoRQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUeXBl
ZCBhcnJheSBhcmd1bWVudCBtdXN0IGJlIGFuIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJB
cnJheSwgVWludDhBcnJheSwgVWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiIpKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogICAgIAogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5
VmlldyA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHR5cGVkQXJyYXlDZWxsKTsKICAgICBp
ZiAoIXR5cGVkQXJyYXlWaWV3LT5pc1NoYXJlZCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlR5cGVkIGFycmF5IGFyZ3VtZW50IG11c3Qgd3Jh
cCBhIFNoYXJlZEFycmF5QnVmZmVyLiIpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJbmRleCh2bSwgZXhlYywgdHlw
ZWRBcnJheVZpZXcpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEludDhBcnJheVR5cGU6CkBA
IC0xNzgsMTMgKzE3OCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJn
cyhFCiAgICAgICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnc0Nhc2U8bnVtRXh0cmFB
cmdzLCBVaW50MzJBZGFwdG9yPihleGVjLCBzY29wZSwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0lu
ZGV4LCBmdW5jKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiB9CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jQWRkKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0FkZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAg
ICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykgewpAQCAtMTkyLDcg
KzE5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAg
ICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNBbmQo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jQW5kKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4o
CiAgICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRyLCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0y
MDAsNyArMjAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwog
ICAgICAgICB9KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
Y0NvbXBhcmVFeGNoYW5nZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXRvbWljc0Z1bmNDb21wYXJlRXhjaGFuZ2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVy
biBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwyPigKICAgICAgICAgZXhlYywgWyZdIChhdXRvKiBw
dHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKQEAgLTIwOCw3ICsyMDgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIH0pOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jRXhjaGFuZ2UoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jRXhjaGFuZ2UoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwxPigKICAgICAgICAgZXhl
YywgWyZdIChhdXRvKiBwdHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKQEAgLTIxNiwxMyArMjE2LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgfSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNJc0xvY2tGcmVl
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0lzTG9j
a0ZyZWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaW50MzJfdCBzaXpl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgYm9vbCByZXN1bHQ7CiAgICAgc3dp
dGNoIChzaXplKSB7CkBAIC0yMzUsMTAgKzIzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7
CisgICAgcmV0dXJuIGpzQm9vbGVhbihyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGF0b21pY3NGdW5jTG9hZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmNMb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4g
YXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MD4oCiAgICAgICAgIGV4ZWMsIFsmXSAoYXV0byogcHRy
LCBjb25zdCBhdXRvKikgewpAQCAtMjQ2LDcgKzI0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXRvbWljc0Z1bmNPcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmNPcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGF0
b21pY09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAgICAgICBleGVjLCBbJl0gKGF1dG8qIHB0ciwg
Y29uc3QgYXV0byogYXJncykgewpAQCAtMjU0LDcgKzI1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgfSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdG9yZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdG9yZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
cmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzPDE+KAogICAgICAgICBleGVjLCBbJl0gKGF1
dG8qIHB0ciwgY29uc3QgYXV0byogYXJncykgewpAQCAtMjY0LDcgKzI2NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgfSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdWIoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3M8MT4oCiAgICAgICAgIGV4ZWMsIFsm
XSAoYXV0byogcHRyLCBjb25zdCBhdXRvKiBhcmdzKSB7CkBAIC0yNzIsNyArMjcyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICB9KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1dhaXQoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FpdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0yODAsMjggKzI4MCwyOCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgSlNJbnQzMkFycmF5KiB0eXBlZEFycmF5ID0g
anNEeW5hbWljQ2FzdDxKU0ludDMyQXJyYXkqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYg
KCF0eXBlZEFycmF5KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlR5cGVkIGFycmF5IGZvciB3YWl0L3dha2UgbXVzdCBiZSBhbiBJbnQzMkFycmF5
LiIpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgaWYgKCF0eXBlZEFycmF5LT5pc1No
YXJlZCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlR5cGVkIGFycmF5IGZvciB3YWl0L3dha2UgbXVzdCB3cmFwIGEgU2hhcmVkQXJyYXlCdWZm
ZXIuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFjY2Vzc0luZGV4ID0g
dmFsaWRhdGVkQWNjZXNzSW5kZXgodm0sIGV4ZWMsIHR5cGVkQXJyYXkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBpbnQzMl90KiBwdHIg
PSB0eXBlZEFycmF5LT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXg7CiAgICAgCiAgICAgaW50
MzJfdCBleHBlY3RlZFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgZG91
YmxlIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvTnVtYmVyKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAK
ICAgICBpZiAoIXZtLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPmlzQXRvbWljc1dhaXRBbGxvd2Vk
T25DdXJyZW50VGhyZWFkKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiQXRvbWljcy53YWl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSB0aGUgY3Vy
cmVudCB0aHJlYWQuIikpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBTZWNvbmRzIHRp
bWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7
CkBAIC0zMzksMTAgKzMzOSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21p
Y3NGdW5jCiAgICAgICAgIHJlc3VsdFN0cmluZyA9ICJ0aW1lZC1vdXQiOwogICAgIGVsc2UKICAg
ICAgICAgcmVzdWx0U3RyaW5nID0gIm9rIjsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbChyZXN1bHRTdHJpbmcpKSk7CisgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIEFTQ0lJTGl0ZXJhbChyZXN1bHRTdHJpbmcpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1dha2UoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0zNTAsMTYgKzM1MCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGF0b21pY3NGdW5jCiAgICAgSlNJbnQzMkFycmF5KiB0eXBlZEFycmF5ID0ganNEeW5hbWlj
Q2FzdDxKU0ludDMyQXJyYXkqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCF0eXBlZEFy
cmF5KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlR5cGVkIGFycmF5IGZvciB3YWl0L3dha2UgbXVzdCBiZSBhbiBJbnQzMkFycmF5LiIpKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgaWYgKCF0eXBlZEFycmF5LT5pc1NoYXJlZCgpKSB7
CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlR5cGVk
IGFycmF5IGZvciB3YWl0L3dha2UgbXVzdCB3cmFwIGEgU2hhcmVkQXJyYXlCdWZmZXIuIikpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFjY2Vzc0luZGV4ID0gdmFsaWRhdGVk
QWNjZXNzSW5kZXgodm0sIGV4ZWMsIHR5cGVkQXJyYXkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBpbnQzMl90KiBwdHIgPSB0eXBlZEFy
cmF5LT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXg7CiAgICAgCkBAIC0zNjcsMTQgKzM2Nywx
NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgdW5zaWdu
ZWQgY291bnQgPSBVSU5UX01BWDsKICAgICBpZiAoIWNvdW50VmFsdWUuaXNVbmRlZmluZWQoKSkg
ewogICAgICAgICBpbnQzMl90IGNvdW50SW50ID0gY291bnRWYWx1ZS50b0ludDMyKGV4ZWMpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
ICAgICBjb3VudCA9IHN0ZDo6bWF4KDAsIGNvdW50SW50KTsKICAgICB9CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KHB0ciwgY291
bnQpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KHB0ciwg
Y291bnQpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1hv
cihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNYb3Io
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnczwx
PigKICAgICAgICAgZXhlYywgWyZdIChhdXRvKiBwdHIsIGNvbnN0IGF1dG8qIGFyZ3MpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ2LDE2ICs0NiwxNiBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oCiB9CiAKIC8vIEVDTUEgMTUuNi4yCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBib29sZWFuID0g
anNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihleGVjKSk7CiAgICAgU3RydWN0
dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVj
LT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBCb29sZWFuT2JqZWN0KiBvYmog
PSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0sIGJvb2xlYW5TdHJ1Y3R1cmUpOwogICAgIG9iai0+
c2V0SW50ZXJuYWxWYWx1ZSh2bSwgYm9vbGVhbik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmopOworICAgIHJldHVybiBvYmo7CiB9CiAKIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVj
dERhdGEpCkBAIC02NSw5ICs2NSw5IEBAIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9y
OjpnZXRDb24KIH0KIAogLy8gRUNNQSAxNS42LjEKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1
bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGV4ZWMtPmFy
Z3VtZW50KDApLnRvQm9vbGVhbihleGVjKSk7CiB9CiAKIENhbGxUeXBlIEJvb2xlYW5Db25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xl
YW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDExLCAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMzAsOCArMzAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtNjUsMzggKzY1
LDM4IEBAIHZvaWQgQm9vbGVhblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Q
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUg
PT0ganNCb29sZWFuKGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS0+
c21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3Ry
aW5ncy5mYWxzZVN0cmluZygpOwogCiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4odHJ1
ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy50cnVl
U3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCk7
CiAKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhCb29sZWFuT2JqZWN0OjppbmZvKCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBpZiAo
YXNCb29sZWFuT2JqZWN0KHRoaXNWYWx1ZSktPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4o
ZmFsc2UpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLT5zbWFsbFN0cmluZ3Mu
ZmFsc2VTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxTdHJpbmdzLmZhbHNlU3Ry
aW5nKCk7CiAKICAgICBBU1NFUlQoYXNCb29sZWFuT2JqZWN0KHRoaXNWYWx1ZSktPmludGVybmFs
VmFsdWUoKSA9PSBqc0Jvb2xlYW4odHJ1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dm0tPnNtYWxsU3RyaW5ncy50cnVlU3RyaW5nKCkpOworICAgIHJldHVybiB2bS0+c21hbGxTdHJp
bmdzLnRydWVTdHJpbmcoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29s
ZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc0Jvb2xlYW4o
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOworICAgICAgICBy
ZXR1cm4gdGhpc1ZhbHVlOwogCiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoQm9vbGVhbk9i
amVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0Jvb2xlYW5PYmplY3QodGhpc1Zh
bHVlKS0+aW50ZXJuYWxWYWx1ZSgpKTsKKyAgICByZXR1cm4gYXNCb29sZWFuT2JqZWN0KHRoaXNW
YWx1ZSktPmludGVybmFsVmFsdWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDcgKzQ2LDcgQEAgZW51bSBjbGFzcyBDYWxsVHlwZSA6IHVuc2lnbmVkIHsKICAgICBK
UwogfTsKIAotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZlRnVu
Y3Rpb24pKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRp
dmVGdW5jdGlvbikoRXhlY1N0YXRlKik7CiAKIHN0cnVjdCBDYWxsRGF0YSB7CiAgICAgdW5pb24g
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVj
dC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbnNvbGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMjcgKzM2LDI3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
Q29uc29sZU9iamVjdCk7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNEZWJ1ZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNFcnJvcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNMb2coRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
SW5mbyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNXYXJuKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpcihFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNE
aXJYTUwoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zb2xlUHJvdG9GdW5jVGFibGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVHJhY2UoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY0NvdW50KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZChFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNU
YWtlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUq
KTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNU
aW1lU3RhbXAoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jR3JvdXAoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
R3JvdXBFbmQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNv
bGVQcm90b0Z1bmNEZWJ1ZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY0Vycm9yKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jSW5mbyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1dhcm4oRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNDbGVhcihFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Rp
cihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY0RpclhNTChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c29sZVByb3RvRnVuY1RhYmxlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zb2xlUHJvdG9GdW5jVHJhY2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNBc3NlcnQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNDb3VudChFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQ
cm9maWxlRW5kKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
b2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWUoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lRW5kKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1w
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9G
dW5jR3JvdXAoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNv
bGVQcm90b0Z1bmNHcm91cENvbGxhcHNlZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dyb3VwRW5kKEV4ZWNTdGF0ZSopOwogCiBjb25z
dCBDbGFzc0luZm8gQ29uc29sZU9iamVjdDo6c19pbmZvID0geyAiQ29uc29sZSIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoQ29uc29sZU9iamVjdCkgfTsKIApAQCAtMTA0
LDE4NyArMTA0LDE4NyBAQCBzdGF0aWMgU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
CiAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgY29uc29sZUxvZ1dpdGhMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIE1lc3NhZ2VMZXZl
bCBsZXZlbCkKK3N0YXRpYyBKU1ZhbHVlIGNvbnNvbGVMb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBl
eGVjLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFj
bGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2Ny
aXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMo
ZXhlYywgMCkpOwogICAgIGNsaWVudC0+bG9nV2l0aExldmVsKGV4ZWMsIFdURk1vdmUoYXJndW1l
bnRzKSwgbGV2ZWwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNEZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNEZWJ1ZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoZXhlYywgTWVzc2FnZUxl
dmVsOjpEZWJ1Zyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
cmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoZXhlYywgTWVzc2FnZUxldmVsOjpFcnJvcik7CiB9
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNM
b2coRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xl
UHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY29uc29sZUxvZ1dp
dGhMZXZlbChleGVjLCBNZXNzYWdlTGV2ZWw6OkxvZyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNJbmZvKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0luZm8oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIHJldHVybiBjb25zb2xlTG9nV2l0aExldmVsKGV4ZWMsIE1lc3Nh
Z2VMZXZlbDo6SW5mbyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNXYXJuKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1dhcm4oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IHJldHVybiBjb25zb2xlTG9nV2l0aExldmVsKGV4ZWMsIE1lc3NhZ2VMZXZlbDo6V2FybmluZyk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNDbGVhcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVu
dCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7
CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgY2xpZW50LT5j
bGVhcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMo
SW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+
ZGlyKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpclhNTChFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNEaXJYTUwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICgh
Y2xpZW50KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRz
KGV4ZWMsIDApKTsKICAgICBjbGllbnQtPmRpclhNTChleGVjLCBXVEZNb3ZlKGFyZ3VtZW50cykp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5j
b25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVj
dG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+dGFibGUo
ZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVHJhY2UoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVHJh
Y2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4gYXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMs
IDApKTsKICAgICBjbGllbnQtPnRyYWNlKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29s
ZVByb3RvRnVuY0Fzc2VydChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNBc3NlcnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIGJvb2wgY29uZGl0aW9uID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFu
KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAoY29uZGl0
aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4gYXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4
ZWMsIDEpKTsKICAgICBjbGllbnQtPmFzc2VydGlvbihleGVjLCBXVEZNb3ZlKGFyZ3VtZW50cykp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNDb3VudChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNDb3VudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5j
b25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMoSW5zcGVj
dG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwogICAgIGNsaWVudC0+Y291bnQo
ZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQ
cm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50
KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsK
ICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBzaXplX3QgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmICghYXJnc0NvdW50KSB7CiAg
ICAgICAgIGNsaWVudC0+cHJvZmlsZShleGVjLCBTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVFbmQoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1
bWVudENvdW50KCk7CiAgICAgaWYgKCFhcmdzQ291bnQpIHsKICAgICAgICAgY2xpZW50LT5wcm9m
aWxlRW5kKGV4ZWMsIFN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIGNsaWVudC0+cHJvZmlsZUVuZChleGVjLCB0aXRsZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY1Rha2VIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKICAgICBpZiAoIWFyZ3NDb3VudCkgewogICAgICAgICBjbGllbnQtPnRha2VI
ZWFwU25hcHNob3QoZXhlYywgU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgY2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQpAQCAtMjk0LDg4ICsyOTQsODggQEAg
c3RhdGljIFN0cmluZyB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKAogICAgIHJldHVybiB2YWx1
ZS50b1dURlN0cmluZyhleGVjKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHRpdGxlOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICB0aXRsZSA9IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdCIpOwog
ICAgIGVsc2UgewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB9CiAKICAgICBjbGllbnQtPnRpbWUoZXhlYywgdGl0bGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90
b0Z1bmNUaW1lRW5kKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc29sZVByb3RvRnVuY1RpbWVFbmQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFN0cmluZyB0aXRsZTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkKICAgICAgICAgdGl0bGUgPSAgQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7
CiAgICAgICAgIHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IH0KIAogICAgIGNsaWVudC0+dGltZUVuZChleGVjLCB0aXRsZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Rp
bWVTdGFtcChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnNvbGVQcm90b0Z1bmNUaW1lU3RhbXAoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENvbnNvbGVD
bGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVu
dCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRl
U2NyaXB0QXJndW1lbnRzKGV4ZWMsIDApKTsKICAgICBjbGllbnQtPnRpbWVTdGFtcChleGVjLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cChFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNHcm91cChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOwog
ICAgIGNsaWVudC0+Z3JvdXAoZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9G
dW5jR3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKElu
c3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGV4ZWMsIDApKTsKICAgICBjbGllbnQtPmdy
b3VwQ29sbGFwc2VkKGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0dy
b3VwRW5kKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c29sZVByb3RvRnVuY0dyb3VwRW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBDb25zb2xlQ2xp
ZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQo
KTsKICAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNj
cmlwdEFyZ3VtZW50cyhleGVjLCAwKSk7CiAgICAgY2xpZW50LT5ncm91cEVuZChleGVjLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0
ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW4KIGJvb2wgY2FsbEN1
c3RvbVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0
dGVyIHNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBBU1NFUlQoc2V0dGVyKTsKLSAgICBib29sIHJlc3VsdCA9IHNldHRlcihl
eGVjLCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7
CisgICAgYm9vbCByZXN1bHQgPSBzZXR0ZXIoZXhlYywgdGhpc1ZhbHVlLCB2YWx1ZSk7CiAgICAg
Ly8gQWx3YXlzIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgc2V0dGVyIGFuZCBpdCBpcyBvYnNl
cnZlZCBhcyBhbiBhY2Nlc3NvciB0byB1c2Vycy4KICAgICBpZiAoaXNBY2Nlc3NvcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTEsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NC0yMDA4LCAyMDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsOCArNTIsOCBAQCB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UGFyc2UoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVVVEMo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVVVEMoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAt
MTc0LDEwICsxNzQsMTAgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVj
LAogICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZSh2bSwgZGF0ZVN0cnVjdHVyZSwgdmFs
dWUpOwogfQogICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0V2l0aERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0cnVjdERhdGUoZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKSwgZXhlYy0+bmV3VGFyZ2V0KCksIGFyZ3MpKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0RGF0ZShleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSkt
Pmdsb2JhbE9iamVjdCgpLCBleGVjLT5uZXdUYXJnZXQoKSwgYXJncyk7CiB9CiAKIENvbnN0cnVj
dFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xODcsMTIgKzE4NywxMiBAQCBDb25zdHJ1Y3RUeXBl
IERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RyCiB9CiAKIC8vIEVDTUEgMTUuOS4yCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHRzOwogICAg
IG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2bSwgY3VycmVudFRpbWVNUygpLCBXVEY6OkxvY2FsVGlt
ZSwgdHMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKCZ2
bSwgZm9ybWF0RGF0ZVRpbWUodHMsIERhdGVUaW1lRm9ybWF0RGF0ZUFuZFRpbWUsIGZhbHNlKSkp
OworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBmb3JtYXREYXRlVGltZSh0cywg
RGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwgZmFsc2UpKTsKIH0KIAogQ2FsbFR5cGUgRGF0ZUNv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkBAIC0y
MDEsMjggKzIwMSwyOCBAQCBDYWxsVHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpT
CiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgZGF0
ZVN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHBhcnNlRGF0ZSh2
bSwgZGF0ZVN0cikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3co
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRl
KiBleGVjKQogewogI2lmICFFTkFCTEUoV0VCX1JFUExBWSkKICAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7CiAjZW5kaWYKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoTk9STUFM
X09SX0RFVEVSTUlOSVNUSUNfRlVOQ1RJT04oanNDdXJyZW50VGltZSgpLCBkZXRlcm1pbmlzdGlj
Q3VycmVudFRpbWUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkpKTsKKyAgICByZXR1cm4g
anNOdW1iZXIoTk9STUFMX09SX0RFVEVSTUlOSVNUSUNfRlVOQ1RJT04oanNDdXJyZW50VGltZSgp
LCBkZXRlcm1pbmlzdGljQ3VycmVudFRpbWUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVVVEMoRXhlY1N0YXRlKiBl
eGVjKSAKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBkb3VibGUgbXMgPSBtaWxsaXNlY29uZHNGcm9tQ29tcG9uZW50cyhleGVjLCBBcmdMaXN0
KGV4ZWMpLCBXVEY6OlVUQ1RpbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIodGltZUNsaXAobXMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHRpbWVDbGlwKG1zKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDExLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtNTcsNiArNTcsNiBAQCBwcml2YXRlOgogCiBKU09iamVjdCogY29uc3Ry
dWN0RGF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmV3VGFyZ2V0LCBj
b25zdCBBcmdMaXN0Jik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0ZSopOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgs
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNzIsNTAgKzcyLDUwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vj
b25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3Rh
dGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Rh
dGUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRVVENEYXkoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
VVRDTWludXRlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RnVsbFll
YXIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNTZXRIb3VycyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRU
aW1lKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhF
eGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Rv
TG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRp
dmVTeW1ib2woRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04o
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERheShF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFll
YXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhv
dXJzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRN
aWxsaVNlY29uZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWlu
dXRlcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
VVRDTW9udGgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29u
ZHMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q01pbnV0ZXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVT
eW1ib2woRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b1RpbWVTdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNUb0lTT1N0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTMxOCw3ICszMTgsNyBA
QCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAKICNlbmRpZiAvLyBP
UyhEQVJXSU4pICYmIFVTRShDRikKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRl
SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBEYXRlVGltZUZvcm1hdCBmb3JtYXQsIGJvb2wgYXNV
VENWYXJpYW50KQorc3RhdGljIEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIERhdGVUaW1lRm9ybWF0IGZvcm1hdCwgYm9vbCBhc1VUQ1ZhcmlhbnQpCiB7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTMzMSw5ICszMzEsOSBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5jCiAgICAgICAgID8gdGhpc0RhdGVP
YmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpCiAgICAgICAgIDogdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIkludmFsaWQgRGF0ZSIpKSkpOworICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhBU0NJSUxpdGVyYWwoIkludmFsaWQgRGF0ZSIpKSk7
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBm
b3JtYXREYXRlVGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJpYW50KSkp
OworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZVRpbWUoKmdy
ZWdvcmlhbkRhdGVUaW1lLCBmb3JtYXQsIGFzVVRDVmFyaWFudCkpOwogfQogCiAvLyBDb252ZXJ0
cyBhIGxpc3Qgb2YgYXJndW1lbnRzIHNlbnQgdG8gYSBEYXRlIG1lbWJlciBmdW5jdGlvbiBpbnRv
IG1pbGxpc2Vjb25kcywgdXBkYXRpbmcKQEAgLTUwOSwxOSArNTA5LDE5IEBAIHZvaWQgRGF0ZVBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIAogLy8gRnVuY3Rpb25zCiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgYXNVVENWYXJpYW50ID0gZmFsc2U7CiAgICAgcmV0
dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2UoZXhlYywgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwg
YXNVVENWYXJpYW50KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3Qg
Ym9vbCBhc1VUQ1ZhcmlhbnQgPSB0cnVlOwogICAgIHJldHVybiBmb3JtYXRlRGF0ZUluc3RhbmNl
KGV4ZWMsIERhdGVUaW1lRm9ybWF0RGF0ZUFuZFRpbWUsIGFzVVRDVmFyaWFudCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCk7CkBAIC01MzQsNyArNTM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpOwogICAgIGlmICghZ3Jl
Z29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhBU0NJSUxpdGVyYWwoIkludmFsaWQgRGF0ZSIpKSkpOwor
ICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZyhBU0NJSUxpdGVy
YWwoIkludmFsaWQgRGF0ZSIpKSk7CiAgICAgLy8gTWF4aW11bSBhbW91bnQgb2Ygc3BhY2Ugd2Ug
bmVlZCBpbiBidWZmZXI6IDcgKG1heC4gZGlnaXRzIGluIHllYXIpICsgMiAqIDUgKDIgY2hhcmFj
dGVycyBlYWNoIGZvciBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkgKyA0ICguICsg
MyBkaWdpdHMgZm9yIG1pbGxpc2Vjb25kcykKICAgICAvLyA2IGZvciBmb3JtYXR0aW5nIGFuZCBv
bmUgZm9yIG51bGwgdGVybWluYXRpb24gPSAyOC4gV2UgYWRkIG9uZSBleHRyYSBjaGFyYWN0ZXIg
dG8gYWxsb3cgdXMgdG8gZm9yY2UgbnVsbCB0ZXJtaW5hdGlvbi4KICAgICBjaGFyIGJ1ZmZlclsy
OF07CkBAIC01NTEsMjQgKzU1MSwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1CiAKICAgICBBU1NFUlQoY2hhcmFjdGVyc1dyaXR0ZW4gPiAwICYmIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJzV3JpdHRlbikgPCBzaXplb2YoYnVmZmVyKSk7CiAgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJzV3JpdHRlbikgPj0gc2l6ZW9mKGJ1
ZmZlcikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVj
KSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nKGJ1ZmZlciwgY2hh
cmFjdGVyc1dyaXR0ZW4pKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBT
dHJpbmcoYnVmZmVyLCBjaGFyYWN0ZXJzV3JpdHRlbikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgYXNVVENWYXJpYW50ID0gZmFsc2U7CiAgICAgcmV0
dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2UoZXhlYywgRGF0ZVRpbWVGb3JtYXREYXRlLCBhc1VUQ1Zh
cmlhbnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wg
YXNVVENWYXJpYW50ID0gZmFsc2U7CiAgICAgcmV0dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2UoZXhl
YywgRGF0ZVRpbWVGb3JtYXRUaW1lLCBhc1VUQ1ZhcmlhbnQpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShl
eGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpA
QCAtNTc2LDEwICs1NzYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsg
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNE
YXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFuZFRpbWUp
KTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0Rh
dGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZURhdGVBbmRUaW1lKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2Nh
bGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwpAQCAtNTg3LDEwICs1ODcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFu
Y2UodGhpc1ZhbHVlKTsgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXRMb2NhbGVE
YXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9j
YWxlRGF0ZSkpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2Jq
LCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlRGF0ZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9j
YWxlVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKQEAgLTU5OCwxMCArNTk4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3Rh
bmNlKHRoaXNWYWx1ZSk7IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZm9ybWF0TG9jYWxl
RGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExv
Y2FsZVRpbWUpKTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9i
aiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZVRpbWUpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1ByaW1pdGl2ZVN5bWJvbChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvUHJp
bWl0aXZlU3ltYm9sKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTYxNSwyNiAr
NjE1LDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAg
IEpTVmFsdWUgaGludFZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSB0eXBlID0gdG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKGV4ZWMs
IGhpbnRWYWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmICh0
eXBlID09IE5vUHJlZmVyZW5jZSkKICAgICAgICAgdHlwZSA9IFByZWZlclN0cmluZzsKIAogICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3Qt
Pm9yZGluYXJ5VG9QcmltaXRpdmUoZXhlYywgdHlwZSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LT5vcmRpbmFyeVRvUHJpbWl0aXZlKGV4ZWMsIHR5cGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cyhEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNE
YXRlSW5zdGFuY2UodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpKTsKKyAgICByZXR1cm4gYXNE
YXRlSW5zdGFuY2UodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAt
NjQ1LDExICs2NDUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0
ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVhcigpKSk7
CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5E
YXRlVGltZS0+eWVhcigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTY2MCwxMSArNjYwLDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIoKSkpOworICAgICAgICByZXR1
cm4ganNOYU4oKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1v
bnRoKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0TW9udGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFu
RGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CiAgICAgaWYg
KCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05h
TigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVU
aW1lLT5tb250aCgpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051
bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bW9udGgoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkp
OwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC02OTAsMTEg
KzY5MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAg
ICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9i
ai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGlt
ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aCgpKSk7Cisg
ICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRl
VGltZS0+bW9udGgoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzA1LDExICs3MDUsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMp
OwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVn
b3JpYW5EYXRlVGltZS0+bW9udGhEYXkoKSkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKQEAgLTcyMCwxMSArNzIwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGlt
ZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdy
ZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUt
Pm1vbnRoRGF5KCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVt
YmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aERheSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzM1LDExICs3MzUsMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGV4ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+d2Vla0RheSgpKSk7CisgICAgICAgIHJl
dHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+d2Vl
a0RheSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0VVRDRGF5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtNzUwLDExICs3NTAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMp
OwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVn
b3JpYW5EYXRlVGltZS0+d2Vla0RheSgpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAg
IHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+d2Vla0RheSgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhl
Yy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAg
LTc2NSwxMSArNzY1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRo
aXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSkp
OworICAgICAgICByZXR1cm4ganNOYU4oKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFu
RGF0ZVRpbWUtPmhvdXIoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC03ODAsMTEgKzc4MCwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKICAgICBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0
ZVRpbWVVVEMoZXhlYyk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKCkpKTsKKyAgICAgICAgcmV0dXJuIGpz
TmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVz
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKQEAgLTc5NSwxMSArNzk1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5E
YXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAo
IWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFO
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRp
bWUtPm1pbnV0ZSgpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051
bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+
dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTgx
MCwxMSArODEwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUK
IAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1pbnV0ZSgp
KSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3Jp
YW5EYXRlVGltZS0+bWludXRlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTgyNSwxMSArODI1LDExIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5E
YXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPnNlY29uZCgpKSk7CisgICAgICAgIHJldHVybiBq
c05hTigpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENT
ZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTsKQEAgLTg0MCwxMSArODQwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBn
cmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVj
KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWUtPnNlY29uZCgpKSk7CisgICAgICAgIHJldHVybiBqc05hTigpOworICAg
IHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaWxs
aVNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CkBAIC04NTQsMTQgKzg1NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUlu
c3RhbmNlKHRoaXNWYWx1ZSk7IAogICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5pbnRl
cm5hbE51bWJlcigpOwogICAgIGlmIChzdGQ6OmlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CiAKICAg
ICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwogICAgIGRvdWJsZSBt
cyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIobXMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIobXMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENN
aWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CkBAIC04NzEsMTQgKzg3MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0
ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5p
bnRlcm5hbE51bWJlcigpOwogICAgIGlmIChzdGQ6OmlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICAgICAgcmV0dXJuIGpzTmFOKCk7CiAK
ICAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwogICAgIGRvdWJs
ZSBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobXMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIobXMpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRp
bWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwpAQCAtODg5LDExICs4ODksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdv
cmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOwogICAg
IGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtZ3JlZ29yaWFu
RGF0ZVRpbWUtPnV0Y09mZnNldCgpIC8gbWludXRlc1BlckhvdXIpKTsKKyAgICAgICAgcmV0dXJu
IGpzTmFOKCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKC1ncmVnb3JpYW5EYXRlVGltZS0+dXRjT2Zm
c2V0KCkgLyBtaW51dGVzUGVySG91cik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpAQCAtOTA1LDEwICs5MDUsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGRvdWJsZSBtaWxsaSA9IHRp
bWVDbGlwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKG1pbGxpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT52bSgpLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3
VmFsdWVGcm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLCBXVEY6
OlRpbWVUeXBlIGlucHV0VGltZVR5cGUpCitzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBudW1BcmdzVG9Vc2UsIFdURjo6VGltZVR5cGUg
aW5wdXRUaW1lVHlwZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShl
eGVjLT52bSgpKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpA
QCAtOTIyLDcgKzkyMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21U
aW0KICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSB8fCBzdGQ6OmlzbmFuKG1pbGxpKSkg
ewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKCk7CiAgICAgICAgIHRoaXNEYXRlT2Jq
LT5zZXRJbnRlcm5hbFZhbHVlKHZtLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAKICAg
ICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwpAQCAtOTMyLDIzICs5
MzIsMjMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogICAgICAg
ICA/IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhleGVjKQogICAgICAgICA6IHRo
aXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIW90aGVyKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNO
YU4oKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdyZWdvcmlhbkRhdGVUaW1lOwogICAgIGdy
ZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgaWYgKCFmaWxsU3RydWN0dXJl
c1VzaW5nVGltZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGlt
ZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwogICAgICAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0gCiAKICAg
ICBkb3VibGUgbmV3VVRDRGF0ZSA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh2bSwgZ3JlZ29yaWFu
RGF0ZVRpbWUsIG1zLCBpbnB1dFRpbWVUeXBlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKHRpbWVDbGlwKG5ld1VUQ0RhdGUpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZSh2bSwgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgV1RGOjpUaW1l
VHlwZSBpbnB1dFRpbWVUeXBlKQorc3RhdGljIEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFy
Z3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLCBXVEY6OlRpbWVUeXBlIGlucHV0
VGltZVR5cGUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+
dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTk1
OSw3ICs5NTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0CiAg
ICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc05hTigpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52
bSgpLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
QEAgLTk3NSw5MyArOTc1LDkzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZy
b21EYXQKICAgICAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4
ZWMpCiAgICAgICAgICAgICA6IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsK
ICAgICAgICAgaWYgKCFvdGhlcikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOYU4oKSk7CisgICAgICAgICAgICByZXR1cm4ganNOYU4oKTsKICAgICAgICAgZ3JlZ29yaWFu
RGF0ZVRpbWUuY29weUZyb20oKm90aGVyKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFmaWxsU3Ry
dWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5E
YXRlVGltZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwogICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0g
CiAKICAgICBkb3VibGUgbmV3VVRDRGF0ZSA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh2bSwgZ3Jl
Z29yaWFuRGF0ZVRpbWUsIG1zLCBpbnB1dFRpbWVUeXBlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKHRpbWVDbGlwKG5ld1VUQ0RhdGUpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50
ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMSwgV1RGOjpM
b2NhbFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAxLCBXVEY6OlVUQ1RpbWUp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNv
bmRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJv
bVRpbWVBcmdzKGV4ZWMsIDIsIFdURjo6TG9jYWxUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAy
LCBXVEY6OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDMsIFdURjo6TG9jYWxUaW1lKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyhleGVjLCAzLCBXVEY6OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgNCwgV1RGOjpMb2NhbFRp
bWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3VmFs
dWVGcm9tVGltZUFyZ3MoZXhlYywgNCwgV1RGOjpVVENUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAxLCBXVEY6Okxv
Y2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0TmV3
VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMSwgV1RGOjpVVENUaW1lKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDIsIFdU
Rjo6TG9jYWxUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDIsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RnVsbFll
YXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJn
cyhleGVjLCAzLCBXVEY6OkxvY2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAzLCBXVEY6
OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeyAK
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTigpOwogICAgICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGRvdWJs
ZSBtaWxsaSA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpOwpAQCAtMTA5NSwxNyArMTA5
NSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgaWYg
KCFzdGQ6OmlzZmluaXRlKHllYXIpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4o
KTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUodm0sIHJlc3VsdCk7Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBncmVnb3JpYW5EYXRlVGltZS5zZXRZZWFyKHRvSW50MzIoKHll
YXIgPj0gMCAmJiB5ZWFyIDw9IDk5KSA/ICh5ZWFyICsgMTkwMCkgOiB5ZWFyKSk7CiAgICAgZG91
YmxlIHRpbWVJbk1pbGxpc2Vjb25kcyA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh2bSwgZ3JlZ29y
aWFuRGF0ZVRpbWUsIG1zLCBXVEY6OkxvY2FsVGltZSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcih0aW1lQ2xpcCh0aW1lSW5NaWxsaXNlY29uZHMpKTsKICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZSh2bSwgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC0xMTE2LDI3ICsxMTE2LDI3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNOYU4oKTsK
IAogICAgIC8vIE5PVEU6IElFIHJldHVybnMgdGhlIGZ1bGwgeWVhciBldmVuIGluIGdldFllYXIu
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+
eWVhcigpIC0gMTkwMCkpOworICAgIHJldHVybiBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+
eWVhcigpIC0gMTkwMCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2Rl
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgdGltZVZh
bHVlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEo
dGltZVZhbHVlLmlzSW50MzIoKSB8fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgp
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAKICAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEodG9JU09WYWx1ZSwgY2FsbERhdGEpOwpAQCAtMTE0NCwxMCArMTE0
NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInRvSVNP
U3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxs
KGV4ZWMsIGFzT2JqZWN0KHRvSVNPVmFsdWUpLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwg
ZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
aWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmluZyBkaWQgbm90IHJldHVybiBhIHBy
aW1pdGl2ZSB2YWx1ZSIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTIsNiArNTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJu
YWxGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FQ01BU2NyaXB0U3BlY0ludGVybmFs
RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTAgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjSXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjSXNDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkuaXNDb25zdHJ1Y3RvcigpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGlzQ29uc3RydWN0b3IpKTsKKyAgICByZXR1cm4ganNCb29sZWFu
KGlzQ29uc3RydWN0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FQ01BU2NyaXB0U3Bl
Y0ludGVybmFsRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0VDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOSw2ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGVzU3BlY0lzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZXNTcGVjSXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODksMTQgKzg5LDEzIEBAIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd1N5bnRheEUKIEpTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiB0aHJvd1N5bnRheEVycm9yKEV4ZWNTdGF0ZSosIFRocm93U2NvcGUmLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiBpbmxpbmUgSlNPYmplY3QqIHRocm93UmFuZ2VFcnJv
cihFeGVjU3RhdGUqIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIHsgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlUmFu
Z2VFcnJvcihzdGF0ZSwgZXJyb3JNZXNzYWdlKSk7IH0KIAotLy8gQ29udmVuaWVuY2Ugd3JhcHBl
cnMsIHdyYXAgcmVzdWx0IGFzIGFuIEVuY29kZWRKU1ZhbHVlLgogaW5saW5lIHZvaWQgdGhyb3dW
TUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uKSB7IHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBleGNlcHRpb24pOyB9Ci1pbmxp
bmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29w
ZSYgc2NvcGUsIEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpKTsgfQotaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRo
cm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKGVycm9yTWVzc2FnZSkp
KSk7IH0KLWlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSog
ZXhlYywgVGhyb3dTY29wZSYgc2NvcGUpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5
cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwg
ZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIGVycm9yTWVzc2FnZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dW
TVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpKTsgfQotaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRo
cm93Vk1SYW5nZUVycm9yKEV4ZWNTdGF0ZSogc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93UmFu
Z2VFcnJvcihzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSkpOyB9CitpbmxpbmUgSlNWYWx1ZSB0
aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgSlNWYWx1ZSBl
cnJvcikgeyByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGVycm9yKTsgfQoraW5s
aW5lIEpTVmFsdWUgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChlcnJvck1lc3NhZ2UpKSk7
IH0KK2lubGluZSBKU1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJv
d1Njb3BlJiBzY29wZSkgeyByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOyB9Citp
bmxpbmUgSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29w
ZSYgc2NvcGUsIEFTQ0lJTGl0ZXJhbCBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOyB9CitpbmxpbmUgSlNWYWx1ZSB0aHJvd1ZN
VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJy
b3JNZXNzYWdlKTsgfQoraW5saW5lIEpTVmFsdWUgdGhyb3dWTVJhbmdlRXJyb3IoRXhlY1N0YXRl
KiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7
IHJldHVybiB0aHJvd1JhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOyB9CiAK
IGNsYXNzIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKIHByaXZhdGU6CkBAIC0xMTgsMTIgKzExNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBmdW5jdGlvbjsKICAgICB9CiAKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RUaHJvd1R5cGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBzdGF0aWNfY2FzdDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24q
PihleGVjLT5qc0NhbGxlZSgpKS0+bV9tZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xMzIsMTIgKzEzMSwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpIb3N0OwogICAgIH0KIAotICAgIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMpCisgICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3Io
RXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgc3RhdGljX2Nhc3Q8U3RyaWN0TW9kZVR5cGVFcnJvckZ1
bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSktPm1fbWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
fQogCiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBj
YWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ4LDE1ICs0OCwxNSBAQCB2b2lkIEVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNCiAKIC8vIEVDTUEgMTUuOS4zCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aEVy
cm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51
bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5n
LCBmYWxzZSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtNjUsMTEg
KzY1LDExIEBAIENvbnN0cnVjdFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3QKICAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9zdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRlcnByZXRlcjo6Y2FsbEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JT
dHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOworICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2Us
IG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSk7CiB9CiAKIENhbGxUeXBlIEVycm9yQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShFcnJvclByb3RvdHlwZSk7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAt
NjUsNyArNjUsNyBAQCB2b2lkIEVycm9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BLTI2MiA1LjEsIDE1LjExLjQuNAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgyLDExICs4MiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVj
a2VyKGV4ZWMsIHRoaXNPYmopOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hl
Y2tlci5lYXJseVJldHVyblZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFs
dWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVhcmx5UmV0dXJuVmFs
dWU7CiAKICAgICAvLyAzLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
R2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCAibmFtZSIuCiAgICAgSlNW
YWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1l
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gNC4gSWYgbmFtZSBp
cyB1bmRlZmluZWQsIHRoZW4gbGV0IG5hbWUgYmUgIkVycm9yIjsgZWxzZSBsZXQgbmFtZSBiZSBU
b1N0cmluZyhuYW1lKS4KICAgICBTdHJpbmcgbmFtZVN0cmluZzsKQEAgLTk0LDEyICs5NCwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG5hbWVT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5hbWVT
dHJpbmcgPSBuYW1lLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICB9CiAKICAgICAvLyA1LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50
ICJtZXNzYWdlIi4KICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICAvLyAoc2ljKQogICAgIC8vIDYuIElmIG1zZyBpcyB1bmRlZmluZWQsIHRoZW4g
bGV0IG1zZyBiZSB0aGUgZW1wdHkgU3RyaW5nOyBlbHNlIGxldCBtc2cgYmUgVG9TdHJpbmcobXNn
KS4KQEAgLTEwOSwyMCArMTA5LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJy
b3JQcm90b0YKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2Ugewog
ICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1dURlN0cmluZyhleGVjKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAgICAgLy8gOC4gSWYg
bmFtZSBpcyB0aGUgZW1wdHkgU3RyaW5nLCByZXR1cm4gbXNnLgogICAgIGlmICghbmFtZVN0cmlu
Zy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZXNzYWdlLmlzU3Ry
aW5nKCkgPyBtZXNzYWdlIDoganNTdHJpbmcoZXhlYywgbWVzc2FnZVN0cmluZykpOworICAgICAg
ICByZXR1cm4gbWVzc2FnZS5pc1N0cmluZygpID8gbWVzc2FnZSA6IGpzU3RyaW5nKGV4ZWMsIG1l
c3NhZ2VTdHJpbmcpOwogCiAgICAgLy8gOS4gSWYgbXNnIGlzIHRoZSBlbXB0eSBTdHJpbmcsIHJl
dHVybiBuYW1lLgogICAgIGlmICghbWVzc2FnZVN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShuYW1lLmlzU3RyaW5nKCkgPyBuYW1lIDoganNTdHJpbmcoZXhl
YywgbmFtZVN0cmluZykpOworICAgICAgICByZXR1cm4gbmFtZS5pc1N0cmluZygpID8gbmFtZSA6
IGpzU3RyaW5nKGV4ZWMsIG5hbWVTdHJpbmcpOwogCiAgICAgLy8gMTAuIFJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbmNhdGVuYXRpbmcgbmFtZSwgIjoiLCBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIs
IGFuZCBtc2cuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBuYW1lU3RyaW5nLCAiOiAiLCBtZXNzYWdl
U3RyaW5nKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgbmFtZVN0
cmluZywgIjogIiwgbWVzc2FnZVN0cmluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA4LCAyMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCwg
MjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTUwLDEwICs1MCwxMCBAQCB2b2lkIEZ1bmN0aW9uQ29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8
IERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rp
b25Nb2RlOjpGdW5jdGlvbiwgZXhlYy0+bmV3VGFyZ2V0KCkpKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpGdW5jdGlvbiwg
ZXhlYy0+bmV3VGFyZ2V0KCkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEZ1bmN0aW9uQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKQEAgLTYyLDEwICs2MiwxMCBAQCBDb25zdHJ1Y3RUeXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6
OmdldENvCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGU6Okhvc3Q7CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MpKTsKKyAgICBy
ZXR1cm4gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpz
Q2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgYXJncyk7CiB9CiAKIC8vIEVDTUEgMTUuMy4xIFRo
ZSBGdW5jdGlvbiBDb25zdHJ1Y3RvciBDYWxsZWQgYXMgYSBGdW5jdGlvbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsNyAr
NDEsNyBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0
IENsYXNzSW5mbyBGdW5jdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uUHJvdG90eXBlKSB9Owog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiBGdW5jdGlvblByb3RvdHlwZTo6RnVu
Y3Rpb25Qcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEludGVy
bmFsRnVuY3Rpb24odm0sIHN0cnVjdHVyZSkKQEAgLTc1LDkgKzc1LDkgQEAgdm9pZCBGdW5jdGlv
blByb3RvdHlwZTo6aW5pdFJlc3RyaWN0ZWRQcgogICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cywgZXJyb3JHZXR0ZXJTZXR0ZXIsIERvbnRFbnVt
IHwgQWNjZXNzb3IpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogLy8gRUNNQSAxNS4zLjQKQEAgLTg3LDcgKzg3LDcgQEAgQ2FsbFR5cGUgRnVuY3Rpb25Q
cm90b3R5cGU6OmdldENhbGxEYXRhKAogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTk3LDEzICs5NywxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgICAgIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFsdWUpOwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUodm0p
LCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSk7CisgICAgICAgICAgICByZXR1cm4ganNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUodm0p
LCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKTsKICAgICAgICAgfQogCiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsK
ICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzQ2xhc3MoKSkgewogICAgICAgICAgICAgU3RyaW5n
VmlldyBjbGFzc1NvdXJjZSA9IGV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkudmlldygpOwotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBjbGFzc1NvdXJj
ZS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBjbGFzc1NvdXJjZS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhKU0FzeW5jRnVuY3Rpb246OmluZm8o
KSkpIHsKQEAgLTExMiw3ICsxMTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uUHJvCiAgICAgICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCktPmdldFJhbmdlKAogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUt
PnBhcmFtZXRlcnNTdGFydE9mZnNldCgpLAogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBh
cmFtZXRlcnNTdGFydE9mZnNldCgpICsgZXhlY3V0YWJsZS0+c291cmNlKCkubGVuZ3RoKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGZ1bmN0aW9uSGVhZGVyLCBmdW5jdGlvbi0+bmFtZSh2bSksIHNvdXJjZSkpOworICAg
ICAgICAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgZnVuY3Rpb25IZWFk
ZXIsIGZ1bmN0aW9uLT5uYW1lKHZtKSwgc291cmNlKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0
cmluZyBmdW5jdGlvbkhlYWRlciA9IGV4ZWN1dGFibGUtPmlzQXJyb3dGdW5jdGlvbigpID8gIiIg
OiAiZnVuY3Rpb24gIjsKQEAgLTEyMSwxMyArMTIxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnBhcmFtZXRlcnNT
dGFydE9mZnNldCgpLAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zm
c2V0KCkgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5sZW5ndGgoKSk7CiAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGZ1bmN0aW9uSGVhZGVyLCBmdW5jdGlvbi0+bmFtZSh2bSksIHNvdXJjZSkp
OworICAgICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBmdW5jdGlvbkhl
YWRlciwgZnVuY3Rpb24tPm5hbWUodm0pLCBzb3VyY2UpOwogICAgIH0KIAogICAgIGlmICh0aGlz
VmFsdWUuaW5oZXJpdHMoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkgewogICAgICAgICBJbnRl
cm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbih0aGlzVmFsdWUpOwog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUo
KSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59IikpOworICAgICAgICByZXR1cm4ganNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUoKSwgIigp
IHtcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7CiAgICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5p
c09iamVjdCgpKSB7CkBAIC0xMzcsNyArMTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblBybwogICAgICAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBjbGFzc0luZm8gPSBvYmplY3QtPmNsYXNzSW5mbygpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJm
dW5jdGlvbiAiLCBjbGFzc0luZm8tPmNsYXNzTmFtZSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVd
XG59IikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiZnVuY3Rpb24gIiwgY2xhc3NJbmZvLT5jbGFzc05hbWUsICIoKSB7XG4gICAgW25h
dGl2ZSBjb2RlXVxufSIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rp
b25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsMTYgKzUxLDE2IEBAIHZvaWQgR2VuZXJhdG9y
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6ZmluaXMKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxH
ZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVj
LT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9u
TW9kZTo6R2VuZXJhdG9yKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3Ms
IEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6R2VuZXJhdG9yKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEdlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEFyZ0xpc3QgYXJncyhleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVj
dEZ1bmN0aW9uKGV4ZWMsIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xv
YmFsT2JqZWN0KCksIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6R2VuZXJhdG9yLCBl
eGVjLT5uZXdUYXJnZXQoKSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLCBhcmdz
LCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkdlbmVyYXRvciwgZXhlYy0+bmV3VGFyZ2V0KCkp
OwogfQogCiBDYWxsVHlwZSBHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExvZyhFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RM
b2coRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtODEsMTUgKzgxLDE1IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uT2JqZWN0OjpkaXMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExv
ZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0TG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cmluZyB2YWx1ZSA9IHRh
cmdldC50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIGRhdGFMb2codmFsdWUsICJcbiIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBB
bmR5IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAo
QykgMjAxNSBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSW50bENvbGxhdG9y
Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1
cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC04Miw3ICs4Miw3IEBAIHZv
aWQgSW50bENvbGxhdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWEKICAgICBtX2NvbGxhdG9yU3Ry
dWN0dXJlLnNldCh2bSwgdGhpcywgY29sbGF0b3JTdHJ1Y3R1cmUpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoRXhlY1N0YXRl
KiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bENvbGxh
dG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTEsMTcgKzkxLDE3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAvLyAyLiBMZXQg
Y29sbGF0b3IgYmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29s
bGF0b3JQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChjb2xsYXRvcikuCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9y
Q29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUoKSktPmNvbGxhdG9yU3RydWN0dXJlKCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSW50bENvbGxhdG9yKiBjb2xsYXRv
ciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjb2xs
YXRvcik7CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBs
b2NhbGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgY29sbGF0b3ItPmlu
aXRpYWxpemVDb2xsYXRvcigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgc3RhdGUtPmFyZ3Vt
ZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbGxhdG9yKTsKKyAgICByZXR1
cm4gY29sbGF0b3I7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxJbnRsQ29sbGF0b3IoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEludGxDb2xsYXRvcihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDEwLjEu
MiBJbnRsLkNvbGxhdG9yIChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAg
ICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUg
YWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4K
QEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsCiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2Nh
bGVzLCBvcHRpb25zKS4KICAgICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY29sbGF0b3IpOworICAgIHJldHVybiBjb2xsYXRvcjsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTM1LDcgKzEzNSw3IEBAIENhbGxU
eXBlIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpnZXRDYWwKICAgICByZXR1cm4gQ2FsbFR5cGU6
Okhvc3Q7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29u
c3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxl
c09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ1LDEyICsxNDUsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0bwogICAgIFZlY3RvcjxT
dHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KHJlcXVlc3Rl
ZExvY2FsZXMpLgotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyAzLiBS
ZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxlTG9jYWxlc11dLCBy
ZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc3RhdGUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKnN0YXRl
LCBnbG9iYWxPYmplY3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVk
TG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50KDEpKSk7CisgICAgcmV0dXJuIHN1cHBvcnRlZExvY2Fs
ZXMoKnN0YXRlLCBnbG9iYWxPYmplY3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwg
cmVxdWVzdGVkTG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50KDEpKTsKIH0KIAogdm9pZCBJbnRsQ29s
bGF0b3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5
IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvclByb3RvdHlwZUdl
dHRlckNvbXBhcmUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVHZXR0
ZXJDb21wYXJlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSopOwogCiB9CiAK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBJbnRsQ29sbGF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0
aQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yRnVuY0NvbXBhcmUoRXhlY1N0YXRlKiBzdGF0
ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yRnVuY0NvbXBhcmUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MCwyMyArOTAsMjMgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgIC8vIDUuIExldCBYIGJl
IFRvU3RyaW5nKHgpLgogICAgIEpTU3RyaW5nKiB4ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKHN0YXRlKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChYKS4KLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gNy4gTGV0IFkgYmUgVG9TdHJpbmcoeSkuCiAgICAg
SlNTdHJpbmcqIHkgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpOwogICAgIC8v
IDguIFJldHVybklmQWJydXB0KFkpLgotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICAvLyA5LiBSZXR1cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgogICAgIGF1
dG8geFZpZXdXaXRoU3RyaW5nID0geC0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKCpzdGF0ZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBhdXRvIHlWaWV3V2l0aFN0cmlu
ZyA9IHktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqc3RhdGUpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY29sbGF0b3ItPmNvbXBhcmVTdHJpbmdzKCpzdGF0ZSwgeFZpZXdXaXRoU3RyaW5n
LnZpZXcsIHlWaWV3V2l0aFN0cmluZy52aWV3KSk7CisgICAgcmV0dXJuIGNvbGxhdG9yLT5jb21w
YXJlU3RyaW5ncygqc3RhdGUsIHhWaWV3V2l0aFN0cmluZy52aWV3LCB5Vmlld1dpdGhTdHJpbmcu
dmlldyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yUHJv
dG90eXBlR2V0dGVyQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxDb2xsYXRvclByb3RvdHlwZUdldHRlckNvbXBhcmUoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xMTUsNyArMTE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsQ29sbGF0bwogICAgIC8vIDEuIExldCBjb2xsYXRvciBiZSB0aGlzIENvbGxh
dG9yIG9iamVjdC4KICAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0ganNEeW5hbWljQ2FzdDxJ
bnRsQ29sbGF0b3IqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY29sbGF0b3IpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIkludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgQ29sbGF0b3IiKSkp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIkludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUgY2FsbGVkIG9uIHZhbHVlIHRoYXQn
cyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgQ29sbGF0b3IiKSk7CiAKICAgICBKU0Jv
dW5kRnVuY3Rpb24qIGJvdW5kQ29tcGFyZSA9IGNvbGxhdG9yLT5ib3VuZENvbXBhcmUoKTsKICAg
ICAvLyAyLiBJZiBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1dIGlzIHVuZGVmaW5lZCwKQEAgLTEy
NywxNSArMTI3LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8K
IAogICAgICAgICAvLyBjLiBMZXQgYmMgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMg
dmFsdWXCuykuCiAgICAgICAgIGJvdW5kQ29tcGFyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIGNvbGxhdG9yLCBudWxscHRy
LCAyLCBBU0NJSUxpdGVyYWwoImNvbXBhcmUiKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgICAgICAvLyBkLiBTZXQgY29sbGF0b3IuW1tib3VuZENvbXBhcmVd
XSB0byBiYy4KICAgICAgICAgY29sbGF0b3ItPnNldEJvdW5kQ29tcGFyZSh2bSwgYm91bmRDb21w
YXJlKTsKICAgICB9CiAgICAgLy8gMy4gUmV0dXJuIGNvbGxhdG9yLltbYm91bmRDb21wYXJlXV0u
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShib3VuZENvbXBhcmUpOworICAgIHJldHVybiBi
b3VuZENvbXBhcmU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxh
dG9yUHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvclByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDMsMTAgKzE0MywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvCiAgICAgLy8gMTAuMy41IElu
dGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAg
ICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IGpzRHluYW1pY0Nhc3Q8SW50bENvbGxhdG9yKj4o
c3RhdGUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWNvbGxhdG9yKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgQ29sbGF0b3IiKSkpOworICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIklu
dGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xsYXRvciIpKTsKIAogICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbGxhdG9yLT5yZXNv
bHZlZE9wdGlvbnMoKnN0YXRlKSk7CisgICAgcmV0dXJuIGNvbGxhdG9yLT5yZXNvbHZlZE9wdGlv
bnMoKnN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fn
b25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
KTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNT
dXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtODIsNyArODIsNyBAQCB2
b2lkIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpmaW5pCiAgICAgbV9kYXRlVGltZUZv
cm1hdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGRhdGVUaW1lRm9ybWF0U3RydWN0dXJlKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bERhdGVU
aW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEludGxEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTkxLDE3ICs5MSwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgLy8gMi4gTGV0IGRhdGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRl
RnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSkuCiAg
ICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGF0ZVRpbWVGb3JtYXQpLgogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3Rh
dGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpLT5kYXRlVGltZUZvcm1hdFN0cnVjdHVyZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEludGxEYXRlVGltZUZvcm1hdCogZGF0
ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsK
ICAgICBBU1NFUlQoZGF0ZVRpbWVGb3JtYXQpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxp
emVEYXRlVGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCiAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIGRhdGVUaW1lRm9ybWF0LT5pbml0aWFsaXplRGF0ZVRpbWVG
b3JtYXQoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIHN0YXRlLT5hcmd1bWVudCgxKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdCk7CisgICAgcmV0dXJuIGRh
dGVUaW1lRm9ybWF0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSW50bERhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICAvLyAxMi4xLjIgSW50bC5EYXRlVGltZUZvcm1hdCAoW2xvY2FsZXMgWywgb3B0aW9uc11d
KSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxl
dCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1Rh
cmdldCBiZSBOZXdUYXJnZXQuCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gcHJv
dmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkgcGF0dGVybnMu
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmth
cm91bmRGb3JMZWdhY3lJbnRsQ29uc3RydWN0b3I8SW50bERhdGVUaW1lRm9ybWF0Pigqc3RhdGUs
IHN0YXRlLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBbJl0gKFZNJiB2bSkgeworICAgIHJldHVybiBj
b25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3Rv
cjxJbnRsRGF0ZVRpbWVGb3JtYXQ+KCpzdGF0ZSwgc3RhdGUtPnRoaXNWYWx1ZSgpLCBjYWxsZWUs
IFsmXSAoVk0mIHZtKSB7CiAgICAgICAgIC8vIDIuIExldCBkYXRlVGltZUZvcm1hdCBiZSBPcmRp
bmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZSUpLgogICAgICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCkuCiAg
ICAgICAgIEludGxEYXRlVGltZUZvcm1hdCogZGF0ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmNyZWF0ZSh2bSwgY2FsbGVlLT5kYXRlVGltZUZvcm1hdFN0cnVjdHVyZSgpKTsKQEAg
LTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
CiAgICAgICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZGF0ZVRpbWVG
b3JtYXQsIGxvY2FsZXMsIG9wdGlvbnMpLgogICAgICAgICBkYXRlVGltZUZvcm1hdC0+aW5pdGlh
bGl6ZURhdGVUaW1lRm9ybWF0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0ZS0+YXJn
dW1lbnQoMSkpOwogICAgICAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQ7Ci0gICAgfSkpOworICAg
IH0pOwogfQogCiBDb25zdHJ1Y3RUeXBlIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBA
IC0xMzUsNyArMTM1LDcgQEAgQ2FsbFR5cGUgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6
OgogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVz
T2YoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVG
b3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xNDcsMTEgKzE0NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEludGxEYXRlVGltCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gMy4g
UmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3VwcG9ydGVkTG9jYWxlcygqc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMsIHN0YXRlLT5hcmd1bWVudCgxKSkpOworICAgIHJldHVybiBzdXBwb3J0ZWRMb2Nh
bGVzKCpzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgc3RhdGUtPmFy
Z3VtZW50KDEpKTsKIH0KIAogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDggKzQwLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZUdldHRlckZvcm1hdChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1h
dFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhF
eGVjU3RhdGUqKTsKIAogfQogCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0UHJvdG90eXBlOjpmaW5pc2gKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdEZ1
bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05NSwyMSArOTUsMjEgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgIC8vIDMuIElmIGRhdGUgaXMgbm90IHByb3Zp
ZGVkIG9yIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIGlmIChkYXRlLmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgLy8gYS4gTGV0IHggYmUgJURhdGVfbm93JSgpLgotICAgICAgICB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShkYXRlTm93KHN0YXRlKSkudG9OdW1iZXIoc3RhdGUpOworICAgICAgICB2
YWx1ZSA9IGRhdGVOb3coc3RhdGUpLnRvTnVtYmVyKHN0YXRlKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyA0LiBFbHNlCiAgICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgog
ICAgICAgICB2YWx1ZSA9IGRhdGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1
cm5JZkFicnVwdCh4KS4KLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgfQogCiAgICAgLy8gNS4gUmV0dXJuIEZvcm1hdERhdGVUaW1lKGR0ZiwgeCkuCiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZm9ybWF0LT5mb3JtYXQo
KnN0YXRlLCB2YWx1ZSkpOworICAgIHJldHVybiBmb3JtYXQtPmZvcm1hdCgqc3RhdGUsIHZhbHVl
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQ
cm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjIsMTMgKzEyMiwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAgIGlmICghZHRmKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCkuZ2V0KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBkdGYgPSBqc0R5bmFt
aWNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KHZhbHVlKTsKICAgICB9CiAKICAgICAvLyAyLiBS
ZXR1cm5JZkFicnVwdChkdGYpLgogICAgIGlmICghZHRmKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnRs
LkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3JtYXQiKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwu
RGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5v
dCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGltZUZvcm1hdCIpKTsKIAogICAgIEpT
Qm91bmRGdW5jdGlvbiogYm91bmRGb3JtYXQgPSBkdGYtPmJvdW5kRm9ybWF0KCk7CiAgICAgLy8g
My4gSWYgdGhlIFtbYm91bmRGb3JtYXRdXSBpbnRlcm5hbCBzbG90IG9mIHRoaXMgRGF0ZVRpbWVG
b3JtYXQgb2JqZWN0IGlzIHVuZGVmaW5lZCwKQEAgLTEzOSwxOSArMTM5LDE5IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KICAgICAgICAgSlNGdW5jdGlvbiogdGFy
Z2V0T2JqZWN0ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIEFTQ0lJ
TGl0ZXJhbCgiZm9ybWF0IiksIEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSwg
Tm9JbnRyaW5zaWMpOwogICAgICAgICBKU0FycmF5KiBib3VuZEFyZ3MgPSBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKICAgICAg
ICAgaWYgKCFib3VuZEFyZ3MpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihzdGF0ZSwgc2NvcGUpKTsKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3Ioc3RhdGUsIHNjb3BlKTsKIAogICAgICAgICAvLyBjLiBMZXQg
YmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJv
dW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0
IikpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgLy8g
ZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0Zi0+c2V0Qm91bmRG
b3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKICAgICB9CiAgICAgLy8gNC4gUmV0dXJuIGR0Zi5bW2Jv
dW5kRm9ybWF0XV0uCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShib3VuZEZvcm1hdCk7Cisg
ICAgcmV0dXJuIGJvdW5kRm9ybWF0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5
cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMTYzLDE1ICsxNjMsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0
ZVRpbQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM2
NzkKICAgICBpZiAoIWRhdGVUaW1lRm9ybWF0KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBz
dGF0ZS0+dGhpc1ZhbHVlKCkuZ2V0KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGpzRHluYW1p
Y0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4odmFsdWUpOwogICAgIH0KIAogICAgIGlmICghZGF0
ZVRpbWVGb3JtYXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90
eXBlLnJlc29sdmVkT3B0aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGltZUZvcm1hdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5EYXRlVGltZUZvcm1h
dC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFu
IG9iamVjdCBpbml0aWFsaXplZCBhcyBhIERhdGVUaW1lRm9ybWF0IikpOwogCiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGF0ZVRpbWVGb3JtYXQtPnJl
c29sdmVkT3B0aW9ucygqc3RhdGUpKTsKKyAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQtPnJlc29s
dmVkT3B0aW9ucygqc3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQW5keSBWYW5X
YWdvbmVyICh0aGV0YWxlY3JhZnRlckBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9y
KTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBv
cnRlZExvY2FsZXNPZihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpmaW5pc2gKICAgICBtX251bWJlckZvcm1hdFN0
cnVjdHVyZS5zZXQodm0sIHRoaXMsIG51bWJlckZvcm1hdFN0cnVjdHVyZSk7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJGb3JtYXQo
RXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SW50bE51bWJlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkx
LDE3ICs5MSwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAg
ICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3Rv
cihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5J
ZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJn
ZXQoKSwganNDYXN0PEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxl
ZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZv
cm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQpOwog
CiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0LCBs
b2NhbGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgbnVtYmVyRm9ybWF0
LT5pbml0aWFsaXplTnVtYmVyRm9ybWF0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBzdGF0
ZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0
KTsKKyAgICByZXR1cm4gbnVtYmVyRm9ybWF0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSW50bE51bWJlckZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSW50bE51bWJlckZvcm1hdChFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIC8vIDExLjEuMiBJbnRsLk51bWJlckZvcm1hdCAoW2xvY2FsZXMgWywg
b3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRl
ZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2Ug
bGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gRklYTUU6IFdvcmthcm91
bmQgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkg
cGF0dGVybnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MzY3OQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0SW50bEluc3RhbmNl
V2l0aFdvcmthcm91bmRGb3JMZWdhY3lJbnRsQ29uc3RydWN0b3I8SW50bE51bWJlckZvcm1hdD4o
KnN0YXRlLCBzdGF0ZS0+dGhpc1ZhbHVlKCksIGNhbGxlZSwgWyZdIChWTSYgdm0pIHsKKyAgICBy
ZXR1cm4gY29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmthcm91bmRGb3JMZWdhY3lJbnRsQ29u
c3RydWN0b3I8SW50bE51bWJlckZvcm1hdD4oKnN0YXRlLCBzdGF0ZS0+dGhpc1ZhbHVlKCksIGNh
bGxlZSwgWyZdIChWTSYgdm0pIHsKICAgICAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBiZSBP
cmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQcm90
b3R5cGUlKS4KICAgICAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQobnVtYmVyRm9ybWF0KS4KICAg
ICAgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZvcm1hdDo6
Y3JlYXRlKHZtLCBjYWxsZWUtPm51bWJlckZvcm1hdFN0cnVjdHVyZSgpKTsKQEAgLTEyMCw3ICsx
MjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAg
IC8vIDQuIFJldHVybiBJbml0aWFsaXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1hdCwgbG9jYWxl
cywgb3B0aW9ucykuCiAgICAgICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51bWJlckZvcm1h
dCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICAg
ICAgcmV0dXJuIG51bWJlckZvcm1hdDsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKIENvbnN0cnVj
dFR5cGUgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xMzUsNyArMTM1LDcgQEAgQ2Fs
bFR5cGUgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZQogICAgIHJldHVybiBDYWxsVHlw
ZTo6SG9zdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9y
bWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBv
cnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0Nywx
MSArMTQ3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKCpz
dGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50
KDEpKSk7CisgICAgcmV0dXJuIHN1cHBvcnRlZExvY2FsZXMoKnN0YXRlLCBhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwogfQogCiB2b2lkIElu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDggKzM4LDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlRnVu
Y1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUZ1bmNS
ZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lk
IEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
TnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkxLDE0ICs5MSwxNCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9O
dW1iZXIoc3RhdGUpOwogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyA2LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4
KS4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1i
ZXJGb3JtYXQtPmZvcm1hdE51bWJlcigqc3RhdGUsIG51bWJlcikpOworICAgIHJldHVybiBudW1i
ZXJGb3JtYXQtPmZvcm1hdE51bWJlcigqc3RhdGUsIG51bWJlcik7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChF
eGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC0xMTEsMTIgKzExMSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1i
ZXJGCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3
OQogICAgIGlmICghbmYpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLT50aGlzVmFs
dWUoKS5nZXQoc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJz
dGl0dXRlVmFsdWVQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgICAgIG5mID0ganNEeW5hbWljQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Kj4o
dmFsdWUpOwogICAgIH0KIAogICAgIGlmICghbmYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludGwuTnVt
YmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4g
b2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0IikpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnRsLk51bWJlckZv
cm1hdC5wcm90b3R5cGUuZm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVj
dCBpbml0aWFsaXplZCBhcyBhIE51bWJlckZvcm1hdCIpKTsKICAgICAKICAgICBKU0JvdW5kRnVu
Y3Rpb24qIGJvdW5kRm9ybWF0ID0gbmYtPmJvdW5kRm9ybWF0KCk7CiAgICAgLy8gMi4gSWYgbmYu
W1tib3VuZEZvcm1hdF1dIGlzIHVuZGVmaW5lZCwKQEAgLTEyNywxOSArMTI3LDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKICAgICAgICAgSlNGdW5jdGlvbiog
dGFyZ2V0T2JqZWN0ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIEFT
Q0lJTGl0ZXJhbCgiZm9ybWF0IiksIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyLCBO
b0ludHJpbnNpYyk7CiAgICAgICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IEpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwogICAgICAg
ICBpZiAoIWJvdW5kQXJncykKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dPdXRPZk1lbW9yeUVycm9yKHN0YXRlLCBzY29wZSkpOworICAgICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihzdGF0ZSwgc2NvcGUpOwogCiAgICAgICAgIC8vIGMuIExldCBi
ZiBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91
bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVj
dCwgdGFyZ2V0T2JqZWN0LCBuZiwgYm91bmRBcmdzLCAxLCBBU0NJSUxpdGVyYWwoImZvcm1hdCIp
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIC8vIGQu
IFNldCBuZi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3VuZEZvcm1h
dCh2bSwgYm91bmRGb3JtYXQpOwogICAgIH0KICAgICAvLyAzLiBSZXR1cm4gbmYuW1tib3VuZEZv
cm1hdF1dLgotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYm91bmRGb3JtYXQpOworICAgIHJl
dHVybiBib3VuZEZvcm1hdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
TnVtYmVyRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVGdW5jUmVz
b2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTUxLDE1
ICsxNTEsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM2NzkKICAgICBp
ZiAoIW51bWJlckZvcm1hdCkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpLmdldChzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1
YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgbnVtYmVyRm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJbnRsTnVt
YmVyRm9ybWF0Kj4odmFsdWUpOwogICAgIH0KIAogICAgIGlmICghbnVtYmVyRm9ybWF0KQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25z
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIE51
bWJlckZvcm1hdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0
aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMg
YSBOdW1iZXJGb3JtYXQiKSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShudW1iZXJGb3JtYXQtPnJlc29sdmVkT3B0aW9ucygqc3RhdGUpKTsKKyAg
ICByZXR1cm4gbnVtYmVyRm9ybWF0LT5yZXNvbHZlZE9wdGlvbnMoKnN0YXRlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE1IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1
a29sc2FrQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShJbnRsT2JqZWN0KTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgaW50bE9iamVjdEZ1bmNHZXRDYW5vbmljYWxMb2NhbGVzKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnRsT2JqZWN0RnVuY0dldENhbm9uaWNhbExv
Y2FsZXMoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMTAxOCw3ICsxMDE4LDcgQEAgVmVjdG9yPFN0
cmluZz4gbnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZQogICAgIHJldHVybiBudW1iZXJpbmdTeXN0
ZW1zOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGludGxPYmplY3RGdW5jR2V0
Q2Fub25pY2FsTG9jYWxlcyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGludGxPYmplY3RGdW5jR2V0Q2Fub25pY2FsTG9jYWxlcyhFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTEwMjcsMjIgKzEwMjcsMjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBpbnRsT2JqZWN0RgogCiAgICAgLy8gMS4gTGV0IGxsIGJlID8gQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiBsb2NhbGVMaXN0ID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDIuIFJldHVybiBDcmVhdGVBcnJheUZy
b21MaXN0KGxsKS4KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmpz
Q2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIEpTQXJyYXkqIGxvY2FsZUFycmF5ID0gSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyks
IGxvY2FsZUxpc3Quc2l6ZSgpKTsKICAgICBpZiAoIWxvY2FsZUFycmF5KSB7CiAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gZW5jb2Rl
ZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBhdXRvIGxlbmd0
aCA9IGxvY2FsZUxpc3Quc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgbG9jYWxlQXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNT
dHJpbmcoc3RhdGUsIGxvY2FsZUxpc3RbaV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9jYWxlQXJy
YXkpOworICAgIHJldHVybiBsb2NhbGVBcnJheTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJGdW5jSXNWaWV3KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlckZ1bmNJ
c1ZpZXcoRXhlY1N0YXRlKik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsKICAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLApAQCAt
ODAsNyArODAsNyBAQCBTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlCiAg
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvSW5kZXgoZXhlYywgImxlbmd0aCIpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9j
dW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRvIHNheQog
ICAgICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFz
IGFsbG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIAogICAgIGF1dG8gYnVmZmVyID0g
QXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlmICghYnVmZmVyKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3Bl
KTsKICAgICAKICAgICBpZiAoY29uc3RydWN0b3ItPnNoYXJpbmdNb2RlKCkgPT0gQXJyYXlCdWZm
ZXJTaGFyaW5nTW9kZTo6U2hhcmVkKQogICAgICAgICBidWZmZXItPm1ha2VTaGFyZWQoKTsKQEAg
LTEwOSwxNyArMTA5LDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICBBU1NFUlQoY29uc3RydWN0b3ItPnNoYXJpbmdNb2RlKCkgPT0gYnVmZmVyLT5zaGFy
aW5nTW9kZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1
cmUoY29uc3RydWN0b3ItPnNoYXJpbmdNb2RlKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0
ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAgCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxBcnJheUJ1ZmZlcihFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxBcnJheUJ1ZmZl
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCAiQXJyYXlCdWZmZXIiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JD
YW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcnJheUJ1ZmZl
ciIpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YSgKQEAgLTEzOCw5ICsxMzgsOSBAQCBDYWxsVHlwZSBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OmdldENhCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMjQuMS4zLjEK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJGdW5jSXNWaWV3KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlckZ1bmNJc1ZpZXco
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihleGVjLT5hcmd1bWVudCgwKSkpKTsK
KyAgICByZXR1cm4ganNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihl
eGVjLT5hcmd1bWVudCgwKSkpOwogfQogICAgIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTAsMjQgKzUwLDI0IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmEKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU2xpY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFy
Z3VtZW50LiIpKTsKICAgICAKICAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCku
dG9JbnQzMihleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIAogICAg
IGludDMyX3QgZW5kOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAg
ICAgICBlbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAg
ZW5kID0gdGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7CiAgICAgCiAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBuZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5pbXBsKCktPnNsaWNlKGJlZ2lu
LCBlbmQpOwogICAgIGlmICghbmV3QnVmZmVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4g
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAKICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJl
KG5ld0J1ZmZlci0+c2hhcmluZ01vZGUoKSk7CiAgICAgCiAgICAgSlNBcnJheUJ1ZmZlciogcmVz
dWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIG5ld0J1ZmZlcik7CiAg
ICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8g
PSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQm91bmRGdW5j
dGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTQm91bmRGdW5jdGlvbikgfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0ganNDYXN0PEpTQm91
bmRGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwogCkBAIC01MSwxMCArNTEsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZFRoaXNObwogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGFyZ2V0RnVuY3Rpb24s
IGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCB0YXJnZXRGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmN0aW9uLT5ib3VuZFRoaXMoKSwgYXJncykpOworICAgIHJl
dHVybiBjYWxsKGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJvdW5k
RnVuY3Rpb24tPmJvdW5kVGhpcygpLCBhcmdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQm91
bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihleGVj
LT5qc0NhbGxlZSgpKTsKIApAQCAtNzIsMTAgKzcyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRGdW5jdGkKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAg
QVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhbGwoZXhlYywgdGFyZ2V0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYm91
bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCksIGFyZ3MpKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCB0
YXJnZXRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmN0aW9uLT5ib3VuZFRo
aXMoKSwgYXJncyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlz
Tm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0Nhc3Q8SlNCb3VuZEZ1
bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKQEAgLTg3LDEwICs4NywxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vCiAgICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVj
dERhdGEodGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdERhdGEpOwogICAgIEFTU0VSVChjb25zdHJ1
Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmdzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXRGdW5jdGlv
biwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0ganNDYXN0PEpT
Qm91bmRGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwogCkBAIC0xMDgsMjAgKzEwOCwyMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAgICAgQ29uc3RydWN0
RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdl
dENvbnN0cnVjdERhdGEodGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdERhdGEpOwogICAgIEFTU0VS
VChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY29uc3RydWN0KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3RUeXBl
LCBjb25zdHJ1Y3REYXRhLCBhcmdzKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJn
ZXRGdW5jdGlvbiwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaXNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShzdGF0aWNfY2FzdDxib29s
Pihqc0R5bmFtaWNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShzdGF0aWNfY2FzdDxib29sPihqc0R5bmFtaWND
YXN0PEpTQm91bmRGdW5jdGlvbio+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5zdGFuY2VCb3VuZEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kT2Jq
ZWN0ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihib3VuZE9iamVjdC0+dGFyZ2V0RnVu
Y3Rpb24oKS0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVh
bihib3VuZE9iamVjdC0+dGFyZ2V0RnVuY3Rpb24oKS0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUp
KTsKIH0KIAogaW5saW5lIFN0cnVjdHVyZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIHRhcmdldEZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDEyICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3Rpb25DYWxsKEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlv
bkNvbnN0cnVjdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91
bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgaXNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBoYXNJbnN0YW5jZUJvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0
ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QoRXhlY1N0
YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaXNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbihFeGVjU3Rh
dGUqKTsKIAogY2xhc3MgSlNCb3VuZEZ1bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24gewogcHVi
bGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsIDIwMDct
MjAwOSwgMjAxMiwgMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTc2LDExICs1NzYsNiBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNOdW1iZXIodW5zaWduZWQgCiAgICAgcmV0dXJuIEpTVmFsdWUoaSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVW5kZWZpbmVkKCkKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCiBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKCkKIHsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKSB9OwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmN1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uKiBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiA9IGpzQ2FzdDxKU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CiAgICAgQ3VzdG9tR2V0dGVy
U2V0dGVyKiBjdXN0b21HZXR0ZXJTZXR0ZXIgPSBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi0+
Y3VzdG9tR2V0dGVyU2V0dGVyKCk7CkBAIC00NCwxMiArNDQsMTIgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU0N1c3RvbUdldAogICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1
c3RvbVNldHRlciBzZXR0ZXIgPSBjdXN0b21HZXR0ZXJTZXR0ZXItPnNldHRlcigpOwogICAgICAg
ICBBU1NFUlQoc2V0dGVyKTsKICAgICAgICAgY2FsbEN1c3RvbVNldHRlcihleGVjLCBzZXR0ZXIs
IHRydWUsIGV4ZWMtPnRoaXNWYWx1ZSgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tR2V0dGVy
IGdldHRlciA9IGN1c3RvbUdldHRlclNldHRlci0+Z2V0dGVyKCk7CiAgICAgQVNTRVJUKGdldHRl
cik7Ci0gICAgcmV0dXJuIGdldHRlcihleGVjLCBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1Zh
bHVlKCkpLCBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpOworICAg
IHJldHVybiBnZXR0ZXIoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCksIGN1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiB9CiAKIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVHlwZSB0eXBlLCBj
b25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3
ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBDdXN0b21H
ZXR0ZXJTZXR0ZXIqLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUq
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGN1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uQ2FsbChFeGVjU3RhdGUqKTsKIAogICAgIEN1c3RvbUdldHRlclNldHRlciogY3VzdG9t
R2V0dGVyU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZXR0ZXJTZXR0ZXIuZ2V0KCk7IH0KICAg
ICBib29sIGlzU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OlNldHRlcjsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYxLDI1ICs2MSwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIEBlbmQKICovCiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldElu
dDE2KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldEludDMyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
R2V0RmxvYXQzMihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50
MzIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jU2V0VWludDgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y1NldEZsb2F0NjQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9HZXR0ZXJCdWZmZXIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvR2V0dGVyQnl0ZU9mZnNldChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldElu
dDgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRJbnQxNihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY0dldEludDMyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVj
U3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMy
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0
VWludDgoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50MTYoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvR2V0dGVyQnVmZmVyKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCeXRlT2Zmc2V0KEV4
ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBTdHJ1Y3R1cmUqIEpTRGF0YVZp
ZXdQcm90b3R5cGU6OmNyZWF0ZVN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Ci1F
bmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgZ2V0RGF0YShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVjZWl2ZXIgb2YgRGF0YVZp
ZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldyIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbmRleChleGVjLCAiYnl0ZU9mZnNldCIpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRp
YW4gPSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmll
dy0+bGVuZ3RoKCk7CkBAIC0xNTksMTEgKzE1OSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBnZXREYXRh
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIHUucmF3Qnl0ZXNbaV0gPSAqZGF0YVB0cisr
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVl
KHUudmFsdWUpKTsKKyAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKHUudmFsdWUpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTczLDcgKzE3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3
IikpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50
b0luZGV4KGV4ZWMsICJieXRlT2Zmc2V0Iik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGRhdGFTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUpOwogICAgIHVuaW9uIHsKQEAgLTE4MiwxMyArMTgyLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0gdTsKIAogICAgIHUudmFsdWUgPSB0
b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9
IGZhbHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID49IDMpIHsKICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMikudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5s
ZW5ndGgoKTsKQEAgLTIwNSw3ICsyMDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgICAgICpkYXRhUHRyKysgPSB1LnJhd0J5dGVzW2ldOwogICAg
IH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBDT01QSUxFUihDTEFORykKQEAgLTIxMyw3ICsy
MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctcHJvdG90eXBlcyIKICNlbmRpZgog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0ZXJCdWZmZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9HZXR0
ZXJCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjIyLDEwICsyMjIs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1BybwogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJEYXRh
Vmlldy5wcm90b3R5cGUuYnVmZmVyIGV4cGVjdHMgfHRoaXN8IHRvIGJlIGEgRGF0YVZpZXcgb2Jq
ZWN0Iik7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZpZXctPnBvc3NpYmx5U2hhcmVk
SlNCdWZmZXIoZXhlYykpOworICAgIHJldHVybiB2aWV3LT5wb3NzaWJseVNoYXJlZEpTQnVmZmVy
KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9H
ZXR0ZXJCeXRlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvR2V0dGVyQnl0ZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgIkRhdGFWaWV3LnByb3RvdHlwZS5idWZmZXIgZXhwZWN0cyB8dGhpc3wg
dG8gYmUgYSBEYXRhVmlldyBvYmplY3QiKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIodmlldy0+bGVuZ3RoKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIodmlldy0+bGVu
Z3RoKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9H
ZXR0ZXJCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvR2V0dGVyQnl0ZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0yNDYsODUgKzI0Niw4NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgIkRhdGFWaWV3LnByb3RvdHlwZS5idWZmZXIgZXhwZWN0cyB8dGhpc3wg
dG8gYmUgYSBEYXRhVmlldyBvYmplY3QiKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIodmlldy0+Ynl0ZU9mZnNldCgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHZpZXct
PmJ5dGVPZmZzZXQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVy
biBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICByZXR1cm4gZ2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50
MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4o
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERh
dGE8VWludDhBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8VWludDMyQWRhcHRvcj4o
ZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBn
ZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0RGF0YTxJbnQ4QWRhcHRv
cj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIHNl
dERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhl
Yyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0RGF0
YTxVaW50MTZBZGFwdG9yPihleGVjKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMihFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRv
cj4oZXhlYyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVy
biBzZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAwOSwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQog
ICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTQ4LDcgKzQ4LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTI1NSwxMiArMjU1LDEyIEBAIHN0YXRpYyBKU1ZhbHVlIHJldHJpZXZlQXJn
dW1lbnRzKEV4ZWNTdGEKICAgICByZXR1cm4gZnVuY3Rvci5yZXN1bHQoKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIEpTRnVuY3Rpb246
OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTRnVuY3Rpb24qIHRoaXNPYmog
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5p
c0hvc3RGdW5jdGlvbigpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmV0cmlldmVB
cmd1bWVudHMoZXhlYywgdGhpc09iaikpOworICAgIHJldHVybiByZXRyaWV2ZUFyZ3VtZW50cyhl
eGVjLCB0aGlzT2JqKTsKIH0KIAogY2xhc3MgUmV0cmlldmVDYWxsZXJGdW5jdGlvbkZ1bmN0b3Ig
ewpAQCAtMzEwLDEyICszMTAsMTIgQEAgc3RhdGljIEpTVmFsdWUgcmV0cmlldmVDYWxsZXJGdW5j
dGlvbihFeAogICAgIHJldHVybiBmdW5jdG9yLnJlc3VsdCgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU0Z1bmN0aW9uKiB0aGlzT2Jq
ID0ganNDYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFsdWUpOwogICAgIEFTU0VSVCghdGhpc09iai0+
aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgSlNWYWx1ZSBjYWxsZXIgPSByZXRyaWV2ZUNhbGxlckZ1
bmN0aW9uKGV4ZWMsIHRoaXNPYmopOwogCkBAIC0zMjMsMTMgKzMyMywxMyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoCiAgICAgaWYgKCFjYWxsZXIuaXNPYmplY3Qo
KSB8fCAhYXNPYmplY3QoY2FsbGVyKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSkgewog
ICAgICAgICAvLyBJdCBpc24ndCBhIEpTRnVuY3Rpb24sIGJ1dCBpZiBpdCBpcyBhIEpTQ2FsbGVl
IGZyb20gYSBwcm9ncmFtIG9yIGNhbGwgZXZhbCwgcmV0dXJuIG51bGwuCiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTQ2FsbGVlKj4oY2FsbGVyKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxlcik7CisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgIHJldHVybiBjYWxs
ZXI7CiAgICAgfQogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsZXIpOwogICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSB8
fCAhZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24uY2FsbGVy
IHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlciIpKSk7CisgICAgICAgIHJldHVybiBjYWxs
ZXI7CisgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IkZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIiKSk7CiB9CiAK
IGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNi0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDA5LCAyMDE1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFNpZ25hdHVyZTsK
IH0KIAogCi1KU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSopOwogCiBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZ2V0Q2FsY3VsYXRlZERpc3Bs
YXlOYW1lKFZNJiwgSlNPYmplY3QqKTsKIApAQCAtMTk1LDEwICsxOTUsOCBAQCBwcml2YXRlOgog
CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNhbGxlckdldHRlcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBuYW1lR2V0dGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGFy
Z3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0
YXRpYyBKU1ZhbHVlIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOwogCiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7CiAg
ICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uUmFyZURhdGE+IG1fcmFyZURhdGE7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcyLDcgKzI3Miw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBmcmllbmQgc3RydWN0IFR5
cGVkQXJyYXlDbGFzc0luZm9zOwogCi0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93TmV1
dGVyZWRUeXBlZEFycmF5VHlwZUVycm9yKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIHRocm93TmV1dGVyZWRUeXBlZEFycmF5VHlw
ZUVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAy
MTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEyLDEwICsy
MTIsNyBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSopOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTIyMyw3ICsyMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEdlCiAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRTdHJ1
Y3R1cmUgPSBmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmll
d0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIHBhcmVudFN0cnVjdHVyZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKIApA
QCAtMjMyLDcgKzIyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2UKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgMCkpOworICAg
ICAgICByZXR1cm4gVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKTsKICAgICB9
CiAKICAgICBKU1ZhbHVlIGZpcnN0VmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
QEAgLTI0MCw3ICsyMzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEdlCiAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gc3RkOjpudWxsb3B0Owog
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihmaXJzdFZhbHVlKSAmJiBhcmdD
b3VudCA+IDEpIHsKICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbmRleChleGVjLCAiYnl0ZU9mZnNldCIpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgICAgICBp
ZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KSB7CkBA
IC0yNDgsMTcgKzI0NSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEdlCiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBieXRlTGVuZ3RoVmFsdWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKTsKICAgICAgICAgICAgICAgICBpZiAoIWJ5dGVMZW5ndGhWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGhW
YWx1ZS50b0luZGV4KGV4ZWMsICJieXRlTGVuZ3RoIik7Ci0gICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMikudG9JbmRleChleGVjLCAibGVuZ3RoIik7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVu
dHM8Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIEpTVmFsdWU6OmVuY29kZShmaXJzdFZhbHVl
KSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3V2l0aEFyZ3VtZW50czxWaWV3Q2xhc3M+KGV4ZWMsIHN0cnVjdHVyZSwgSlNWYWx1ZTo6
ZW5jb2RlKGZpcnN0VmFsdWUpLCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFZpZXdDbGFzcz4KQEAgLTI2OSwxMSArMjY2LDExIEBAIENvbnN0cnVjdFR5cGUgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVyaWNUeXBlZEFycmF5
VmlldyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxH
ZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgVmlld0NsYXNzOjppbmZvKCktPmNsYXNzTmFt
ZSkpOworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBWaWV3Q2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0MCwxMSArMzQwLDExIEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGEKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLUVuY29kZWRKU1ZhbHVl
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRlcmVkVHlwZWRBcnJh
eVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIG9iamVjdCwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dGhyb3dO
ZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9iamVj
dCwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVF9VTlVTRUQob2JqZWN0
LCBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihKU1ZhbHVlOjpkZWNvZGUob2JqZWN0
KSktPmlzTmV1dGVyZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChvYmplY3QsIGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCktPmlzTmV1dGVyZWQoKSk7CiAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0
YWNoZWRFcnJvck1lc3NhZ2UpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcgQEAgaW5saW5lIHVuc2lnbmVk
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY1NldChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0x
MTMsNyArMTEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
ICAgIHVuc2lnbmVkIG9mZnNldDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKICAgICAgICAgZG91YmxlIG9mZnNldE51bWJlciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShvZmZzZXROdW1iZXIgPCAwKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihleGVjLCBzY29wZSwgIk9mZnNldCBzaG91bGQgbm90
IGJlIG5lZ2F0aXZlIik7CiAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om1pbihvZmZzZXROdW1iZXIsIHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKSkpOwpAQCAtMTM3LDE1ICsxMzcsMTUgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0gZWxzZQogICAgICAgICBsZW5n
dGggPSBzb3VyY2VBcnJheS0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9V
SW50MzIoZXhlYyk7CiAKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBvZmZzZXQsIHNvdXJjZUFy
cmF5LCAwLCBsZW5ndGgsIENvcHlUeXBlOjpVbm9ic2VydmFibGUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMTU2LDE0ICsxNTYsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBs
ZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgbG9uZyBmcm9tID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9t
U3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgbG9uZyBmaW5hbCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQo
ZXhlYywgMiwgbGVuZ3RoLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnRoaXNWYWx1ZSgpOwog
CiAgICAgbG9uZyBjb3VudCA9IHN0ZDo6bWluKGxlbmd0aCAtIHN0ZDo6bWF4KHRvLCBmcm9tKSwg
ZmluYWwgLSBmcm9tKTsKIApAQCAtMTczLDExICsxNzMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5
cGUqIGFycmF5ID0gdGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsKICAgICBtZW1tb3ZlKGFycmF5
ICsgdG8sIGFycmF5ICsgZnJvbSwgY291bnQgKiB0aGlzT2JqZWN0LT5lbGVtZW50U2l6ZSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1
cm4gZXhlYy0+dGhpc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CkBAIC0xODgsMTIgKzE4OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAKICAgICBKU1ZhbHVl
IHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1
dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5
cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAtMjAxLDcgKzIw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB0eXBl
bmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9IHRoaXNPYmplY3QtPnR5cGVkVmVj
dG9yKCk7CiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2
ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRP
cHRpb24pCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7
CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogCiAgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQo
KSk7CkBAIC0yMDksMjAgKzIwOSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlCiAgICAgaWYgKHN0ZDo6aXNuYW4oc3RhdGljX2Nhc3Q8ZG91YmxlPigqdGFyZ2V0
T3B0aW9uKSkpIHsKICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7CiAg
ICAgICAgICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KGFycmF5W2luZGV4
XSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7
CiAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdID09IHRhcmdldE9wdGlvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbihmYWxzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5k
ZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMjM4
LDcgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIAog
ICAgIEpTVmFsdWUgdmFsdWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVu
Z3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmpl
Y3QtPmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwpAQCAt
MjQ2LDIwICsyNDYsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0gdGhpc09iamVj
dC0+dHlwZWRWZWN0b3IoKTsKICAgICBhdXRvIHRhcmdldE9wdGlvbiA9IFZpZXdDbGFzczo6dG9B
ZGFwdG9yTmF0aXZlRnJvbVZhbHVlV2l0aG91dENvZXJjaW9uKHZhbHVlVG9GaW5kKTsKICAgICBp
ZiAoIXRhcmdldE9wdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cigtMSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVk
KCkpOwogCiAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7CiAgICAgICAgIGlm
IChhcnJheVtpbmRleF0gPT0gdGFyZ2V0T3B0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihpbmRleCkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGluZGV4KTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0x
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNKb2luKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4oVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CkBAIC0yNjgsMTggKzI2OCwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBl
ZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIC8vIDIyLjIu
My4xNAotICAgIGF1dG8gam9pbldpdGhTZXBhcmF0b3IgPSBbJl0gKFN0cmluZ1ZpZXcgc2VwYXJh
dG9yKSAtPiBFbmNvZGVkSlNWYWx1ZSB7CisgICAgYXV0byBqb2luV2l0aFNlcGFyYXRvciA9IFsm
XSAoU3RyaW5nVmlldyBzZXBhcmF0b3IpIC0+IEpTVmFsdWUgewogICAgICAgICBWaWV3Q2xhc3Mq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAgICAgICBK
U1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsIHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgam9pbmVyLmFwcGVuZCgqZXhlYywg
dGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfQogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsK
KyAgICAgICAgcmV0dXJuIGpvaW5lci5qb2luKCpleGVjKTsKICAgICB9OwogCiAgICAgSlNWYWx1
ZSBzZXBhcmF0b3JWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMjg5LDE3ICsyODksMTcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAg
IEpTU3RyaW5nKiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVj
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogICAgIGF1
dG8gdmlld1dpdGhTdHJpbmcgPSBzZXBhcmF0b3JTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4g
am9pbldpdGhTZXBhcmF0b3Iodmlld1dpdGhTdHJpbmcudmlldyk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2YoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFz
dEluZGV4T2YoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0zMjIsMjAgKzMyMiwyMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIGlmIChmcm9tRG91YmxlIDwg
MCkgewogICAgICAgICAgICAgZnJvbURvdWJsZSArPSBsZW5ndGg7CiAgICAgICAgICAgICBpZiAo
ZnJvbURvdWJsZSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigtMSkpOworICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCBsZW5ndGgpCiAgICAgICAgICAgICBpbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tRG91YmxlKTsKICAgICB9CiAKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQo
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJy
YXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgYXV0byB0YXJnZXRP
cHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lv
bih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKC0x
KTsKIAogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0gdGhpc09i
amVjdC0+dHlwZWRWZWN0b3IoKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKQEAg
LTM0Myw1MCArMzQzLDUwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKIAogICAgIGZvciAoOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CiAgICAgICAgIGlmIChhcnJh
eVtpbmRleF0gPT0gdGFyZ2V0T3B0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4
KTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKC0xKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNCdWZmZXIoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnVmZmVyKFZNJiwgRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIC8vIDIyLjIuMy4zCiAgICAgVmlld0NsYXNzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+cG9zc2libHlTaGFyZWRKU0J1ZmZlcihleGVj
KSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoZXhlYyk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKFZNJiwg
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvR2V0dGVyRnVuY0xlbmd0aChWTSYsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAv
LyAyMi4yLjMuMTcKICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNz
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgIHJldHVybiBqc051bWJlcih0aGlzT2Jq
ZWN0LT5sZW5ndGgoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJG
dW5jQnl0ZUxlbmd0aChWTSYsIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlTGVuZ3RoKFZNJiwgRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIC8vIDIyLjIuMy4yCiAgICAgVmlld0NsYXNzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKSk7Cisg
ICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9mZnNldChWTSYsIEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNCeXRlT2Zmc2V0KFZNJiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIDIy
LjIuMy4zCiAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
dGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmpl
Y3QtPmJ5dGVPZmZzZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
UmV2ZXJzZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjKQogewogLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zOTksMTEgKzM5OSwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVt
ZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwogICAgIHN0ZDo6cmV2
ZXJzZShhcnJheSwgYXJyYXkgKyB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0OwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2
YXRlRnVuY1NvcnQoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAvLyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTQxNSwxMSArNDE1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKIAogICAgIHRoaXNPYmplY3QtPnNvcnQoKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Q7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCkBAIC00MzMsOSArNDMzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5s
ZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9t
U3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZXhlYywgMSwgdGhpc0xlbmd0aCwgdGhpc0xlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBBU1NFUlQoIXJlc3VsdC0+aXNO
ZXV0ZXJlZCgpKTsKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtNDYxLDcg
KzQ2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIAogICAg
IC8vIFdlIHJldHVybiBlYXJseSBoZXJlIHNpbmNlIHdlIGRvbid0IGFsbG9jYXRlIGEgYmFja2lu
ZyBzdG9yZSBpZiBsZW5ndGggaXMgMCBhbmQgbWVtbW92ZSBkb2VzIG5vdCBsaWtlIG51bGxwdHJz
CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIFRoZSBzcGVjaWVzIGNvbnN0cnVj
dG9yIG1heSByZXR1cm4gYW4gYXJyYXkgd2l0aCBhbnkgYXJiaXRyYXJ5IGxlbmd0aC4KICAgICBs
ZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIHJlc3VsdC0+bGVuZ3RoKCkpOwpAQCAtNDY5LDQ2ICs0
NjksNDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGNh
c2UgVHlwZUludDg6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAganNDYXN0PEpT
SW50OEFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5n
dGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVJbnQxNjoK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4o
cmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBl
OjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVJbnQzMjoKICAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ocmVzdWx0KS0+c2V0
KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdo
dCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVVaW50ODoKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRo
aXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICAgICAganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwg
dGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0
LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2Fz
ZSBUeXBlVWludDMyOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxK
U1VpbnQzMkFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBs
ZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFR5cGVGbG9h
dDMyOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGpzQ2FzdDxKU0Zsb2F0MzJB
cnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBD
b3B5VHlwZTo6TGVmdFRvUmlnaHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihy
ZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6
OkxlZnRUb1JpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
aXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3Jl
YXRlKFZNJnZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCkBAIC01NTIsMTAgKzU1MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5
cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICByZXR1
cm4gVmlld0NsYXNzOjpjcmVhdGUoCiAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIGFycmF5
QnVmZmVyLAogICAgICAgICAgICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICog
Vmlld0NsYXNzOjplbGVtZW50U2l6ZSwKLSAgICAgICAgICAgIGxlbmd0aCkpOworICAgICAgICAg
ICAgbGVuZ3RoKTsKICAgICB9CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAt
NTY0LDEzICs1NjQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBj
b25zdHJ1Y3RvciIpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHJlc3VsdCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInNwZWNpZXMgY29uc3Ry
dWN0b3IgZGlkIG5vdCByZXR1cm4gYSBUeXBlZEFycmF5IFZpZXciKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIDIwMTQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjE2LDcgKzIxNiw3IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZUF0b21pY3NQcm9w
ZXJ0eShWTSYKICAgICByZXR1cm4gQXRvbWljc09iamVjdDo6Y3JlYXRlKHZtLCBnbG9iYWwsIEF0
b21pY3NPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsLCBnbG9iYWwtPm9iamVjdFBy
b3RvdHlwZSgpKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
a2VCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZUJvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTIyNywxNSArMjI3LDE1IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2UKICAgICBKU1ZhbHVlIGxlbmd0aCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDMpOwogICAgIEpTU3RyaW5nKiBuYW1lID0gYXNTdHJpbmcoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoNCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZSgKLSAgICAgICAgdm0sIGV4ZWMsIGdsb2JhbE9iamVjdCwgdGFy
Z2V0LCBib3VuZFRoaXMsIGJvdW5kQXJncy5pc0NlbGwoKSA/IGpzQ2FzdDxKU0FycmF5Kj4oYm91
bmRBcmdzKSA6IG51bGxwdHIsIGxlbmd0aC5hc0ludDMyKCksIG5hbWUtPnZhbHVlKGV4ZWMpKSk7
CisgICAgcmV0dXJuIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKAorICAgICAgICB2bSwgZXhlYywg
Z2xvYmFsT2JqZWN0LCB0YXJnZXQsIGJvdW5kVGhpcywgYm91bmRBcmdzLmlzQ2VsbCgpID8ganND
YXN0PEpTQXJyYXkqPihib3VuZEFyZ3MpIDogbnVsbHB0ciwgbGVuZ3RoLmFzSW50MzIoKSwgbmFt
ZS0+dmFsdWUoZXhlYykpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBoYXNPd25MZW5ndGhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGhhc093bkxlbmd0aFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBhc09iamVjdChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odGFyZ2V0LT5oYXNPd25Qcm9wZXJ0eShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih0YXJnZXQtPmhhc093blByb3BlcnR5KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
QEAgLTI5OSwxNSArMjk5LDE1IEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xv
YmFsT2IKIEBlbmQKICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
dFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHRoaXNWYWx1ZS5pbmhl
cml0cyhKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OmluZm8oKSkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT50ZW1wbGF0ZVJlZ2lzdHJ5KCku
Z2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVSZWdpc3RyeUtleSo+KHRo
aXNWYWx1ZSkpKTsKKyAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT50ZW1w
bGF0ZVJlZ2lzdHJ5KCkuZ2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVS
ZWdpc3RyeUtleSo+KHRoaXNWYWx1ZSkpOwogfQogCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGVucXVldWVKb2IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBlbnF1ZXVlSm9iKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0zMTgsNyArMzE4LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdQogCiAgICAgZ2xvYmFsT2JqZWN0LT5xdWV1ZU1pY3Jv
dGFzayhjcmVhdGVKU0pvYih2bSwgam9iLCBqc0Nhc3Q8SlNBcnJheSo+KGFyZ3VtZW50cykpKTsK
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSog
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMDksIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEyLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9u
IFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC02NTEsNDQgKzY1MSw0NCBAQCBzdGF0aWMgZG91YmxlIHBh
cnNlRmxvYXQoU3RyaW5nVmlldyBzKQogICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRlcmFsKGRh
dGEsIGVuZCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0V2
YWwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgeCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICgheC5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHgpOworICAgICAgICByZXR1cm4geDsKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFn
bG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPmV2YWxEaXNhYmxl
ZEVycm9yTWVzc2FnZSgpKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFN0
cmluZyBzID0gYXNTdHJpbmcoeCktPnZhbHVlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewogICAgICAgICBMaXRlcmFsUGFyc2Vy
PExDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OKTsKICAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2Vy
LnRyeUxpdGVyYWxQYXJzZSgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
YXJzZWRPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAgICB9IGVs
c2UgewogICAgICAgICBMaXRlcmFsUGFyc2VyPFVDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFy
YWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CiAgICAgICAgIGlmIChKU1Zh
bHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocGFyc2VkT2JqZWN0KTsgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAgICB9CiAKICAgICBTb3VyY2VPcmlnaW4gc291
cmNlT3JpZ2luID0gZXhlYy0+Y2FsbGVyU291cmNlT3JpZ2luKCk7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGNhbGxlZUdsb2JhbE9iamVjdCA9IGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OwogICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsID0gSW5kaXJlY3RFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKGV4ZWMsIG1ha2VTb3VyY2Uocywgc291cmNlT3JpZ2luKSwgZmFsc2UsIERlcml2ZWRDb250
ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSk7CiAgICAgaWYgKCFl
dmFsKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShldmFsLCBleGVjLCBjYWxsZWVHbG9iYWxPYmpl
Y3QtPmdsb2JhbFRoaXMoKSwgY2FsbGVlR2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7Cisg
ICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoZXZhbCwgZXhlYywgY2FsbGVl
R2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlzKCksIGNhbGxlZUdsb2JhbE9iamVjdC0+Z2xvYmFsU2Nv
cGUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNl
SW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFy
c2VJbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBKU1ZhbHVlIHJhZGl4VmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAg
LTcwNywzNyArNzA3LDM3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1AKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICBkb3VibGUgbiA9IHZhbHVl
LmFzTnVtYmVyKCk7CiAgICAgICAgIGlmICgoKG4gPCBpbnRNYXhQbHVzT25lICYmIG4gPj0gdGVu
VG9UaGVNaW51czYpIHx8ICFuKSAmJiByYWRpeFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG4pKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4obikpOwogICAgIH0KIAogICAgIC8vIElmIFRvU3RyaW5nIHRocm93cywgd2Ugc2hvdWxk
bid0IGNhbGwgVG9JbnQzMi4KICAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIHZhbHVlLCBb
Jl0gKFN0cmluZ1ZpZXcgdmlldykgewotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKHBhcnNlSW50KHZpZXcsIHJhZGl4VmFsdWUudG9JbnQzMihleGVjKSkpKTsKKyAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHBhcnNlSW50KHZpZXcsIHJhZGl4VmFsdWUudG9JbnQzMihleGVj
KSkpOwogICAgIH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byB2aWV3V2l0aFN0
cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52aWV3V2l0aFVuZGVybHlp
bmdTdHJpbmcoKmV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFy
c2VGbG9hdCh2aWV3V2l0aFN0cmluZy52aWV3KSkpOworICAgIHJldHVybiBqc051bWJlcihwYXJz
ZUZsb2F0KHZpZXdXaXRoU3RyaW5nLnZpZXcpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBz
dGF0aWMgQml0bWFwPDI1Nj4gZG9Ob3RVbmVzY2FwZVdoZW5EZWNvZGluZ1VSSSA9IG1ha2VDaGFy
YWN0ZXJCaXRtYXAoCiAgICAgICAgICIjJCYrLC86Oz0/QCIKICAgICApOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShkZWNvZGUoZXhlYywgZG9Ob3RVbmVzY2FwZVdoZW5EZWNvZGluZ1VS
SSwgdHJ1ZSkpOworICAgIHJldHVybiBkZWNvZGUoZXhlYywgZG9Ob3RVbmVzY2FwZVdoZW5EZWNv
ZGluZ1VSSSwgdHJ1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgc3RhdGljIEJpdG1hcDwyNTY+IGVtcHR5Qml0bWFwOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZGVjb2RlKGV4ZWMsIGVtcHR5Qml0bWFwLCB0cnVlKSk7CisgICAgcmV0dXJuIGRlY29k
ZShleGVjLCBlbXB0eUJpdG1hcCwgdHJ1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3Rh
dGljIEJpdG1hcDwyNTY+IGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJID0gbWFrZUNoYXJhY3Rl
ckJpdG1hcCgKICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtNzQ2LDEw
ICs3NDYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAg
ICAgICAiISMkJicoKSorLC0uLzo7PT9AX34iCiAgICAgKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZW5jb2RlKGV4ZWMsIGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJKSk7CisgICAg
cmV0dXJuIGVuY29kZShleGVjLCBkb05vdEVzY2FwZVdoZW5FbmNvZGluZ1VSSSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVS
SUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3RhdGljIEJpdG1hcDwyNTY+IGRv
Tm90RXNjYXBlV2hlbkVuY29kaW5nVVJJQ29tcG9uZW50ID0gbWFrZUNoYXJhY3RlckJpdG1hcCgK
ICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtNzU4LDEwICs3NTgsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgICAgICAiISco
KSotLl9+IgogICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVuY29kZShleGVj
LCBkb05vdEVzY2FwZVdoZW5FbmNvZGluZ1VSSUNvbXBvbmVudCkpOworICAgIHJldHVybiBlbmNv
ZGUoZXhlYywgZG9Ob3RFc2NhcGVXaGVuRW5jb2RpbmdVUklDb21wb25lbnQpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHN0YXRpYyBCaXRtYXA8MjU2PiBkb05vdEVzY2FwZSA9IG1ha2VDaGFyYWN0ZXJC
aXRtYXAoCiAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKQEAgLTc3MCw3ICs3
NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFCiAgICAgICAg
ICIqKy0uL0BfIgogICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvU3RyaW5n
VmlldyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKKyAg
ICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmlu
Z1ZpZXcgdmlldykgewogICAgICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAg
aWYgKHZpZXcuaXM4Qml0KCkpIHsKICAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjID0gdmlldy5j
aGFyYWN0ZXJzOCgpOwpAQCAtODA0LDEyICs4MDQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGJ1aWxkZXIu
YnVpbGQoZXhlYyk7Ci0gICAgfSkpOworICAgIH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvU3RyaW5nVmlldyhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKKyAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGludCBrID0gMDsKICAgICAgICAgaW50IGxlbiA9
IHZpZXcubGVuZ3RoKCk7CkBAIC04NTYsMjQgKzg1NiwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNVCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yQXJndW1lbnRzQ2FsbGVlQW5kQ2FsbGVyKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJy
b3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiJ2FyZ3VtZW50cycs
ICdjYWxsZWUnLCBhbmQgJ2NhbGxlcicgY2Fubm90IGJlIGFjY2Vzc2VkIGluIHRoaXMgY29udGV4
dC4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUHJvdG9H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQ
cm90b0dldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04ODYsMTQgKzg4
NiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAgICAgaWYg
KCF0aGlzT2JqZWN0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBleGVjLT50aGlz
VmFsdWUoKS5zeW50aGVzaXplUHJvdG90eXBlKGV4ZWMpOwogICAgICAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvdG90eXBlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiBwcm90b3R5cGU7CiAgICAgfQogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMp
KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQcm90b1NldHRlcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MDgsMjEgKzkwOCwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQCiAKICAgICAvLyBTZXR0aW5nIF9f
cHJvdG9fXyBvZiBhIHByaW1pdGl2ZSBzaG91bGQgaGF2ZSBubyBlZmZlY3QuCiAgICAgaWYgKCF0
aGlzT2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIFNldHRpbmcgX19wcm90
b19fIHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUgaXMgc2lsZW50bHkgaWdub3JlZCB0
byBtYXRjaCBNb3ppbGxhLgogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSAmJiAhdmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2Fu
dFNldCA9IHRydWU7CiAgICAgdGhpc09iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBleGVjLCB2YWx1
ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAgICAgCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNCdWlsdGluTG9nKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jQnVpbHRpbkxvZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgZGF0YUxvZyhleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVj
KSwgIlxuIik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYtMjAxMCwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRl
cmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAgLTM2
LDIwICszNiwyMCBAQCBjbGFzcyBKU09iamVjdDsKIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMg
c2hvdWxkIHJlYWxseSBiZSBpbiBKU0dsb2JhbE9iamVjdC5jcHAsIGJ1dCBwdXR0aW5nIHRoZW0g
dGhlcmUKIC8vIGlzIGEgMC41JSByZWR1Y3Rpb24uCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVV
UkkoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNF
bmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHND
YWxsZWVBbmRDYWxsZXIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNQcm90b0dldHRlcihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jQnVpbHRpbkxvZyhFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yQXJndW1lbnRzQ2Fs
bGVlQW5kQ2FsbGVyKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNQcm90b0dldHRlcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jUHJvdG9TZXR0ZXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0J1aWx0aW5Mb2coRXhlY1N0YXRlKik7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlz
c2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiBkb3VibGUgcGFyc2VJ
bnRPdmVyZmxvdyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgaW50IHJhZGl4KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjIsMTMgKzYyLDEzIEBAIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3I6OkpTSW50ZXJuYWwKIHsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTSW50ZXJuYWxQcm9taXNlKiBw
cm9taXNlID0gSlNJbnRlcm5hbFByb21pc2U6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5pbnRl
cm5hbFByb21pc2VTdHJ1Y3R1cmUoKSk7CiAgICAgcHJvbWlzZS0+aW5pdGlhbGl6ZShleGVjLCBn
bG9iYWxPYmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHByb21pc2UpOworICAgIHJldHVybiBwcm9taXNlOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpT
SW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdFN5bWJvbEl0ZXJhdG9yKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVOYW1lc3BhY2VPYmplY3RTeW1ib2xJdGVyYXRvcihFeGVj
U3RhdGUqKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpzX2lu
Zm8gPSB7ICJNb2R1bGVOYW1lc3BhY2VPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KSB9OwogCkBAIC0yMDgs
NyArMjA4LDcgQEAgYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVmaW5lT3duUAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVO
YW1lc3BhY2VPYmplY3RTeW1ib2xJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3ltYm9sSXRlcmF0b3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjE2LDcgKzIxNiw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTmFtZXMKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCog
b2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGV4ZWMtPnRo
aXNWYWx1ZSgpKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgifHRoaXN8IHNob3VsZCBiZSBhIG1vZHVs
ZSBuYW1lc3BhY2Ugb2JqZWN0IikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgb2JqZWN0KSk7CisgICAgcmV0dXJu
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlKCksIG9iamVjdCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEpTTmF0aXZlU3RkRnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uCiAgICAgbV9mdW5jdGlvbkNlbGwuc2V0KHZtLCB0aGlzLCBmdW5jdGlv
bkNlbGwpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBydW5TdGRG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
dW5TdGRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEpTTmF0aXZlU3RkRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTTmF0aXZlU3RkRnVuY3Rpb24qPihzdGF0ZS0+anNDYWxs
ZWUoKSk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpT
R2xvYmFsT2JqZWN0OwogY2xhc3MgTmF0aXZlU3RkRnVuY3Rpb25DZWxsOwogCi10eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248RW5jb2RlZEpTVmFsdWUgKEV4ZWNTdGF0ZSopPiBOYXRpdmVTdGRGdW5jdGlv
bjsKK3R5cGVkZWYgc3RkOjpmdW5jdGlvbjxKU1ZhbHVlIChFeGVjU3RhdGUqKT4gTmF0aXZlU3Rk
RnVuY3Rpb247CiAKIGNsYXNzIEpTTmF0aXZlU3RkRnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlv
biB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsOCArNDYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKEpTT05PYmplY3QpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Q
cm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU09OUHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUqKTsKIAogfQogCkBAIC03NzcsNyArNzc3
LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogfQogCiAvLyBF
Q01BLTI2MiB2NSAxNS4xMi4yCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90
b0Z1bmNQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlBy
b3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTgwOSwxOSAr
ODA5LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnUKICAgICB9
CiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodW5maWx0ZXJlZCk7CisgICAgICAgIHJldHVybiB1bmZpbHRlcmVk
OwogICAgIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
OjpOb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHVuZmlsdGVyZWQpOworICAg
ICAgICByZXR1cm4gdW5maWx0ZXJlZDsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShXYWxrZXIoZXhlYywgTG9jYWw8SlNPYmplY3Q+KHZtLCBhc09iamVj
dChmdW5jdGlvbikpLCBjYWxsVHlwZSwgY2FsbERhdGEpLndhbGsodW5maWx0ZXJlZCkpOworICAg
IHJldHVybiBXYWxrZXIoZXhlYywgTG9jYWw8SlNPYmplY3Q+KHZtLCBhc09iamVjdChmdW5jdGlv
bikpLCBjYWxsVHlwZSwgY2FsbERhdGEpLndhbGsodW5maWx0ZXJlZCk7CiB9CiAKIC8vIEVDTUEt
MjYyIHY1IDE1LjEyLjMKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVu
Y1N0cmluZ2lmeShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlBy
b3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MzYs
NyArODM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gc3RyaW5naWZpZXIuc3RyaW5naWZ5KHZhbHVlKS5nZXQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogSlNWYWx1ZSBKU09OUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGpz
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEyLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMDU5LDEyICsy
MDU5LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcml2YXRlRnVuY0luc3RhbmNlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIEpT
VmFsdWUgcHJvdG8gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZXhl
YywgdmFsdWUsIHByb3RvKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1
bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJvdG8pKTsKIH0KIAogdm9pZCBKU09iamVjdDo6
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAxMi0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAwOSwgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0xMTMwLDcgKzExMzAsNyBAQCBwcml2YXRlOgogICAgIH0KIH07
CiAKLUpTX0VYUE9SVF9QUklWQVRFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJpdmF0ZUZ1bmNJbnN0YW5jZU9mKEV4ZWNTdGF0ZSopOworSlNfRVhQT1JUX1BSSVZBVEUgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZihFeGVjU3RhdGUq
KTsKIAogaW5saW5lIEpTT2JqZWN0KiBKU09iamVjdDo6Y3JlYXRlUmF3T2JqZWN0KAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBKU1Byb21pc2VDb25zdHJ1Y3Rvcjo6YWRkT3du
SW50ZXJuYQogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZWplY3RQcml2YXRlTmFtZSgpLCBwcm9taXNl
Q29uc3RydWN0b3JSZWplY3RDb2RlR2VuZXJhdG9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEw
MywxOCArMTAzLDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3Ry
dWN0dXJlKiBwcm9taXNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlz
ZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTUHJv
bWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZtLCBwcm9taXNlU3RydWN0dXJlKTsK
ICAgICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXhlYy0+YXJndW1l
bnQoMCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlKTsKKyAgICByZXR1
cm4gcHJvbWlzZTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFByb21pc2UoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJvbWlzZSIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1
Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb21p
c2UiKTsKIH0KIAogQ29uc3RydWN0VHlwZSBKU1Byb21pc2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBwcm9wZXJ0eU5hbWVJdGVyYXRvckZ1bmNOZXh0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm9wZXJ0eU5hbWVJdGVyYXRvckZ1bmNOZXh0
KEV4ZWNTdGF0ZSopOwogCiBjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6
c19pbmZvID0geyAiUHJvcGVydHlOYW1lIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKSB9OwogCkBAIC0xMzgsMTkg
KzEzOCwxOSBAQCBib29sIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om5leHQoRXhlY1N0CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5hbWVJdGVyYXRvciBGdW5j
dGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3BlcnR5TmFtZUl0ZXJhdG9yRnVuY05leHQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
aXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPihleGVjLT50
aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3Qg
Y2FsbCBQcm9wZXJ0eU5hbWVJdGVyYXRvci5uZXh0KCkgb24gYSBub24tUHJvcGVydHlOYW1lSXRl
cmF0b3Igb2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFByb3BlcnR5TmFtZUl0ZXJhdG9yLm5leHQo
KSBvbiBhIG5vbi1Qcm9wZXJ0eU5hbWVJdGVyYXRvciBvYmplY3QiKSk7CiAKICAgICBKU1ZhbHVl
IHJlc3VsdDsKICAgICBpZiAoaXRlcmF0b3ItPm5leHQoZXhlYywgcmVzdWx0KSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChleGVjLCBy
ZXN1bHQsIGZhbHNlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRv
clJlc3VsdE9iamVjdChleGVjLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChleGVjLCByZXN1bHQsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoZXhlYywganNVbmRlZmluZWQoKSwgdHJ1
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyAr
NjMsNyBAQCBTdHJ1Y3R1cmUqIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6CiAKIAogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RUeXBlZEFycmF5Vmll
dyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dFR5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY1LDEzICs2NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKGZhbHNlKQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNJc1R5cGVkQXJyYXlWaWV3
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1By
aXZhdGVGdW5jSXNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHZhbHVlLmlzQ2VsbCgpICYmIGlzVHlwZWRWaWV3KHZhbHVlLmFz
Q2VsbCgpLT5jbGFzc0luZm8oKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkpOworICAgIHJldHVy
biBqc0Jvb2xlYW4odmFsdWUuaXNDZWxsKCkgJiYgaXNUeXBlZFZpZXcodmFsdWUuYXNDZWxsKCkt
PmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5j
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg0LDE4ICs4NCwxOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5kZXJseWluZyBBcnJheUJ1ZmZlciBoYXMgYmVlbiBk
ZXRhY2hlZCBmcm9tIHRoZSB2aWV3IikpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgIHJldHVybiBqc051bWJlcih0aGlz
T2JqZWN0LT5sZW5ndGgoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlw
ZWRBcnJheVZpZXdQcml2YXRlRnVuY0dldE9yaWdpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNHZXRP
cmlnaW5hbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRPYmplY3QoKS0+
Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZTsKICAgICBBU1NFUlQoaXNUeXBlZFZp
ZXcodHlwZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsT2JqZWN0LT50eXBl
ZEFycmF5Q29uc3RydWN0b3IodHlwZSkpOworICAgIHJldHVybiBnbG9iYWxPYmplY3QtPnR5cGVk
QXJyYXlDb25zdHJ1Y3Rvcih0eXBlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1NvcnQoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTA0LDcgKzEwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZWRBcnJheVYKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9U
T1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0
eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
dHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4oRXhlY1N0
YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1By
b3RvRnVuY0NvcHlXaXRoaW4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTI2
LDcgKzEyNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAg
ICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3Rv
RnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEzNyw3ICsx
MzcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FM
TF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY0luY2x1ZGVzKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
TGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ4LDcgKzE0
OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxM
X0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jTGFzdEluZGV4T2YpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0lu
ZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTU5LDcgKzE1OSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxMX0dFTkVS
SUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jSW5kZXhPZik7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BS
T1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNKb2luKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RP
VFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCdWZmZXIp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmll
d1Byb3RvR2V0dGVyRnVuY0xlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlCiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlf
UFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0xl
bmd0aCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJy
YXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMDMsNyArMjAzLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZQogICAgIENBTExfR0VORVJJ
Q19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNCeXRlTGVuZ3RoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlT2Zmc2V0KEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAg
LTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBl
CiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1JldmVyc2Uo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5
Vmlld1Byb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MjI1LDcgKzIyNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUK
ICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5j
U3ViYXJyYXlDcmVhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjM2LDcg
KzIzNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVYKICAgICBD
QUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTI0NywzNSArMjQ3
LDM1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGUKICAgICBDQUxM
X0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jU2xpY2UpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY1RvU3RyaW5nVGFnKEV4ZWNTdGF0ZSog
ZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dl
dHRlckZ1bmNUb1N0cmluZ1RhZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
c3dpdGNoICh0aGlzVmFsdWUuZ2V0T2JqZWN0KCktPmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpIHsKICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiVWludDhDbGFtcGVkQXJyYXkiKSk7CisgICAg
ICAgIHJldHVybiBqc1N0cmluZygmdm0sICJVaW50OENsYW1wZWRBcnJheSIpOwogICAgIGNhc2Ug
VHlwZUludDMyOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwg
IkludDMyQXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJJbnQzMkFycmF5
Iik7CiAgICAgY2FzZSBUeXBlVWludDMyOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKCZ2bSwgIlVpbnQzMkFycmF5IikpOworICAgICAgICByZXR1cm4ganNTdHJpbmco
JnZtLCAiVWludDMyQXJyYXkiKTsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkZsb2F0NjRBcnJheSIpKTsKKyAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgIkZsb2F0NjRBcnJheSIpOwogICAgIGNhc2UgVHlwZUZs
b2F0MzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoJnZtLCAiRmxv
YXQzMkFycmF5IikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCAiRmxvYXQzMkFycmF5
Iik7CiAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZygmdm0sICJJbnQ4QXJyYXkiKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0s
ICJJbnQ4QXJyYXkiKTsKICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZygmdm0sICJVaW50OEFycmF5IikpOworICAgICAgICByZXR1cm4g
anNTdHJpbmcoJnZtLCAiVWludDhBcnJheSIpOwogICAgIGNhc2UgVHlwZUludDE2OgotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIkludDE2QXJyYXkiKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sICJJbnQxNkFycmF5Iik7CiAgICAgY2FzZSBUeXBl
VWludDE2OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKCZ2bSwgIlVp
bnQxNkFycmF5IikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCAiVWludDE2QXJyYXki
KTsKICAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CiAgICAgY2FzZSBUeXBlRGF0YVZpZXc6Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00NSwxMCArNDUsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZh
dGVGdW5jSXNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1NvcnQoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3
UHJpdmF0ZUZ1bmNHZXRPcmlnaW5hbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVh
dGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2
YXRlRnVuY0lzVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1NvcnQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY0xlbmd0aChFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jR2V0T3JpZ2lu
YWxDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFy
cmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoRXhlY1N0YXRlKik7CiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NywzNCArNDcsMzQgQEAgdm9pZCBNYXBDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIAogICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnNwZWNpZXNTeW1ib2wsIHNwZWNpZXNTeW1ib2wsIEFjY2Vzc29yIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxNYXAo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTWFwKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywg
c2NvcGUsICJNYXAiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxl
ZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJNYXAiKTsKIH0KIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0TWFwKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0TWFwKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAg
IFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3Ry
dWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNNYXAqIG1h
cCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobWFwKTsKKyAgICAgICAgcmV0dXJuIG1hcDsKIAogICAgIEpTVmFs
dWUgYWRkZXJGdW5jdGlvbiA9IG1hcC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuc2V0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQ2Fs
bERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25D
YWxsVHlwZSA9IGdldENhbGxEYXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0
YSk7CiAgICAgaWYgKGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgIGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0o
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKQEAgLTk3LDcgKzk3
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBj
YWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhLCBtYXAsIGFyZ3VtZW50cyk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG1hcCk7CisgICAgcmV0dXJuIG1hcDsKIH0KIAogQ29uc3RydWN0VHlwZSBN
YXBDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRl
cmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRl
cmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1hcEl0ZXJhdG9y
UHJvdG90eXBlKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJ
dGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KEV4ZWNTdGF0ZSopOwogCiB2
b2lkIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CkBAIC00NiwyMiArNDYsMjIgQEAgdm9pZCBNYXBJdGVy
YXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpbwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZt
LCAiTWFwIEl0ZXJhdG9yIiksIERvbnRFbnVtIHwgUmVhZE9ubHkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVG
dW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJh
dG9yIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBh
IG5vbi1NYXBJdGVyYXRvciBvYmplY3QiKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBp
ZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKSB7CiAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJl
c3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSk7CiAgICAg
fQogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0
ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwor
ICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZp
bmVkKCksIHRydWUpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NywxNiArNDcsMTYgQEAgY29uc3QgQ2xhc3NJbmZvIE1hcFByb3RvdHlwZTo6c19pbmZv
ID0gewogQGVuZAogKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTZXQoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNLZXlzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jVmFsdWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRW50cmllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jS2V5cyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jVmFsdWVzKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNFbnRy
aWVzKEV4ZWNTdGF0ZSopOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNTaXplKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNTaXplKEV4ZWNTdGF0ZSopOwogICAgIAogdm9pZCBNYXBQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
QEAgLTk5LDk4ICs5OSw5OCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFwKENh
bGxGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
SlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBtYXAtPmNsZWFyKGNhbGxG
cmFtZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpT
TWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAg
ICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPnJlbW92ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHJldHVybiBqc0Jvb2xlYW4obWFwLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU01hcCog
bWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXAtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IG1hcC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZy
YW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKICAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4obWFwLT5oYXMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNCb29sZWFuKG1hcC0+aGFzKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
TWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAgIGlmICghbWFwKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBtYXAtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gdGhpc1ZhbHVlOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKICAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihtYXAtPnNpemUoY2FsbEZyYW1lKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICByZXR1cm4ganNOdW1iZXIobWFwLT5zaXplKGNhbGxGcmFtZSkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNWYWx1ZXMoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTTWFwKiB0aGlzT2JqID0g
anNEeW5hbWljQ2FzdDxKU01hcCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICgh
dGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAgdmFsdWUg
aXRlcmF0b3IgZm9yIGEgbm9uLU1hcCBvYmplY3QuIikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZVZh
bHVlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBNYXAgdmFsdWUgaXRlcmF0b3IgZm9yIGEgbm9u
LU1hcCBvYmplY3QuIikpOworICAgIHJldHVybiBKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNh
bGxGcmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJl
KCksIHRoaXNPYmosIEl0ZXJhdGVWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jRW50cmllcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNFbnRyaWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU01hcCogdGhpc09iaiA9IGpzRHluYW1pY0Nhc3Q8
SlNNYXAqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXRoaXNPYmopCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIGEgTWFwIGVudHJ5IGl0ZXJhdG9yIGZvciBh
IG5vbi1NYXAgb2JqZWN0LiIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0
ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXlWYWx1ZSkpOworICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJDYW5ub3QgY3JlYXRlIGEgTWFwIGVudHJ5IGl0ZXJhdG9yIGZvciBhIG5vbi1NYXAgb2JqZWN0
LiIpKTsKKyAgICByZXR1cm4gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUtPmpz
Q2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2Jq
LCBJdGVyYXRlS2V5VmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuY0tleXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jS2V5cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNNYXAqIHRoaXNPYmogPSBqc0R5bmFtaWNDYXN0PEpTTWFwKj4oY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCF0aGlzT2JqKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiQ2Fubm90IGNyZWF0ZSBhIE1hcCBrZXkgaXRlcmF0b3IgZm9yIGEgbm9uLU1hcCBvYmplY3Qu
IikpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2
bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1
Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIGEgTWFw
IGtleSBpdGVyYXRvciBmb3IgYSBub24tTWFwIG9iamVjdC4iKSk7CisgICAgcmV0dXJuIEpTTWFw
SXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
KS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAq
PihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+anNDYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1hcCwgSXRlcmF0ZUtleVZhbHVl
KSk7CisgICAgcmV0dXJuIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5q
c0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbWFwLCBJ
dGVyYXRlS2V5VmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0yMDAsMTIgKzIwMCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByaXZhdGVGdW5jCiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoZXhlYywga2V5LCB2
YWx1ZSkpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIDAsIGtleSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2Up
OwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7Cisg
ICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
R2xvYmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMzMsMzggKzMzLDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoTWF0aE9iamVjdCk7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zaChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luaChFeGVj
U3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4o
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNB
VGFuaChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0FUYW4yKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jQ2JydChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNDbHozMihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Nvc2goRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHBtMShFeGVjU3RhdGUqKTsKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zyb3VuZChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0h5cG90KEV4ZWNTdGF0
ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNT
dGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMXAo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNM
b2cxMChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0xvZzIoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNNYXgoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW5oKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbmgoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNJTXVsKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zaChFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbmgoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW5oKEV4ZWNTdGF0ZSopOworSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2JydChFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2x6MzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQ29zaChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNFeHBtMShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jRnJvdW5kKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNIeXBvdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jTG9nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNMb2cxcChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
TG9nMTAoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xv
ZzIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01heChF
eGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNT
dGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqKTsKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luaChFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNUYW5oKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNJTXVsKEV4ZWNTdGF0ZSopOwogCiBjb25zdCBDbGFzc0luZm8gTWF0
aE9iamVjdDo6c19pbmZvID0geyAiTWF0aCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoTWF0aE9iamVjdCkgfTsKIApAQCAtMTI3LDYzICsxMjcsNjMgQEAgdm9pZCBNYXRo
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmYWJzKGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc051bWJlcihmYWJz
KGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGFjb3MoZXhlYy0+YXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGFjb3Mo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoYXNpbihleGVjLT5hcmd1bWVu
dCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoYXNpbihl
eGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhdGFuKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihhdGFuKGV4
ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGRvdWJsZSBhcmcwID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91
YmxlIGFyZzEgPSBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGF0YW4yKGFyZzAsIGFyZzEpKSk7CisgICAg
cmV0dXJuIGpzRG91YmxlTnVtYmVyKGF0YW4yKGFyZzAsIGFyZzEpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY2VpbChleGVjLT5hcmd1bWVu
dCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoY2VpbChleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNDbHozMihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICB1aW50MzJfdCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlKGNsejMyKHZh
bHVlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Nv
cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Nv
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJs
ZU51bWJlcihjb3MoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0
dXJuIGpzRG91YmxlTnVtYmVyKGNvcyhleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1i
ZXIoZXhwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBq
c0RvdWJsZU51bWJlcihleHAoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmbG9v
cihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIoZmxvb3IoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNIeXBvdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xOTMsOSArMTkzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogICAgIGFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShh
cmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkg
ewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChp
KS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgICAgICBpZiAoc3RkOjppc2luZihhcmdzW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKSkpOworICAgICAgICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKCtzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwogICAgICAgICBtYXggPSBzdGQ6
Om1heChmYWJzKGFyZ3NbaV0pLCBtYXgpOwogICAgIH0KICAgICBpZiAoIW1heCkKQEAgLTIxMCwx
NSArMjEwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKICAg
ICAgICAgY29tcGVuc2F0aW9uID0gKHByZWxpbWluYXJ5IC0gc3VtKSAtIHN1bW1hbmQ7CiAgICAg
ICAgIHN1bSA9IHByZWxpbWluYXJ5OwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzRG91YmxlTnVtYmVyKHNxcnQoc3VtKSAqIG1heCkpOworICAgIHJldHVybiBqc0RvdWJsZU51
bWJlcihzcXJ0KHN1bSkgKiBtYXgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNEb3VibGVOdW1iZXIobG9nKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4
ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihsb2coZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICB1bnNpZ25lZCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIHJlc3VsdCA9IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CkBAIC0yMjksMTAgKzIyOSwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAgICAgICAgIH0gZWxzZSBpZiAo
dmFsID4gcmVzdWx0IHx8ICghdmFsICYmICFyZXN1bHQgJiYgIXN0ZDo6c2lnbmJpdCh2YWwpKSkK
ICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihyZXN1bHQpKTsKKyAgICByZXR1cm4ganNOdW1iZXIocmVzdWx0KTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50
KCk7CiAgICAgZG91YmxlIHJlc3VsdCA9ICtzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCk7CkBAIC0yNDMsMTMxICsyNDMsMTMxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnUKICAgICAgICAgfSBlbHNlIGlmICh2YWwgPCByZXN1bHQgfHwgKCF2
YWwgJiYgIXJlc3VsdCAmJiBzdGQ6OnNpZ25iaXQodmFsKSkpCiAgICAgICAgICAgICByZXN1bHQg
PSB2YWw7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8g
RUNNQSAxNS44LjIuMS4xMwogCiAgICAgZG91YmxlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpOwogICAgIGRvdWJsZSBhcmcyID0gZXhlYy0+YXJndW1lbnQoMSkudG9OdW1i
ZXIoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUob3BlcmF0aW9u
TWF0aFBvdyhhcmcsIGFyZzIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUob3BlcmF0aW9uTWF0aFBv
dyhhcmcsIGFyZzIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2Vha1Jh
bmRvbU51bWJlcigpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbU51bWJlcigpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihqc1JvdW5kKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc051bWJlcihqc1JvdW5kKGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3Vi
bGUgYXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKHN0ZDo6
aXNuYW4oYXJnKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKCk7CiAgICAgaWYgKCFhcmcpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc3RkOjpzaWduYml0KGFyZykgPyBqc051bWJlcigtMC4wKSA6IGpzTnVtYmVy
KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0ZDo6c2lnbmJpdChh
cmcpID8gLTEgOiAxKSk7CisgICAgICAgIHJldHVybiBzdGQ6OnNpZ25iaXQoYXJnKSA/IGpzTnVt
YmVyKC0wLjApIDoganNOdW1iZXIoMCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0ZDo6c2lnbmJp
dChhcmcpID8gLTEgOiAxKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzRG91YmxlTnVtYmVyKHNpbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkp
KTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY1NxcnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzRG91YmxlTnVtYmVyKHNxcnQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7
CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKHNxcnQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1i
ZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jVGFuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jVGFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
RG91YmxlTnVtYmVyKHRhbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAg
ICByZXR1cm4ganNEb3VibGVOdW1iZXIodGFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4
ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lN
dWwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNJ
TXVsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQzMl90IGxlZnQgPSBl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGludDMyX3QgcmlnaHQgPSBleGVjLT5h
cmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIobGVmdCAqIHJpZ2h0KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGxlZnQgKiByaWdodCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FDb3NoKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvc2go
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVO
dW1iZXIoYWNvc2goZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0
dXJuIGpzRG91YmxlTnVtYmVyKGFjb3NoKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW5o
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNp
bmgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIoYXNpbmgoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAg
cmV0dXJuIGpzRG91YmxlTnVtYmVyKGFzaW5oKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4
ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FU
YW5oKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
QVRhbmgoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNE
b3VibGVOdW1iZXIoYXRhbmgoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7Cisg
ICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGF0YW5oKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KGV4ZWMpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0NicnQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNDYnJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
RG91YmxlTnVtYmVyKGNicnQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7Cisg
ICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGNicnQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q29zaChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0Nvc2goRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNE
b3VibGVOdW1iZXIoY29zaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAg
ICByZXR1cm4ganNEb3VibGVOdW1iZXIoY29zaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihl
eGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNF
eHBtMShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0V4cG0xKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
RG91YmxlTnVtYmVyKGV4cG0xKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOwor
ICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleHBtMShleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNGcm91bmQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNGcm91bmQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNEb3VibGVOdW1iZXIoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihzdGF0aWNfY2FzdDxm
bG9hdD4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMXAoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxcChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgZG91YmxlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7
CiAgICAgaWYgKHZhbHVlID09IDApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNE
b3VibGVOdW1iZXIodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKGxvZzFwKHZhbHVlKSkpOworICAgICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIodmFs
dWUpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihsb2cxcCh2YWx1ZSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxMChFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzEwKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGxvZzEw
KGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJs
ZU51bWJlcihsb2cxMChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cyKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihsb2cy
KGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSkpOworICAgIHJldHVybiBqc0RvdWJs
ZU51bWJlcihsb2cyKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpbmgoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW5oKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKHNpbmgo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CisgICAgcmV0dXJuIGpzRG91Ymxl
TnVtYmVyKHNpbmgoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuaChFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbmgoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIodGFuaChl
eGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpKTsKKyAgICByZXR1cm4ganNEb3VibGVO
dW1iZXIodGFuaChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUcnVuYyhFeGVjU3RhdGUqZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVHJ1bmMoRXhlY1N0YXRlKmV4
ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihleGVjLT5hcmd1bWVu
dCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihl
eGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhP
YmplY3QuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDggKzQ5LDggQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogfTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUcnVuYyhFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSopOwor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVHJ1bmMoRXhlY1N0YXRlKik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsMTMgKzQ1LDEzIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5
cGVQYXJzZU1vZHVsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5
cGVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxv
YWRlclByb3RvdHlwZVJlc29sdmUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVGZXRjaChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUlu
c3RhbnRpYXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90
eXBlRXZhbHVhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBl
UmVzb2x2ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxl
TG9hZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUluc3RhbnRpYXRlKEV4ZWNTdGF0ZSopOwogCiB9
CiAKQEAgLTEwMCwxNiArMTAwLDE2IEBAIE1vZHVsZUxvYWRlclByb3RvdHlwZTo6TW9kdWxlTG9h
ZGVyUHJvdG8KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1v
ZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIFN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1
bWVudCgxKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJj
ZU9yaWdpbiB7IG1vZHVsZUtleS5pbXBsKCkgfSwgbW9kdWxlS2V5LmltcGwoKSwgVGV4dFBvc2l0
aW9uKCksIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKIApAQCAtMTIyLDU3ICsx
MjIsNTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogCiAgICAg
aWYgKGVycm9yLmlzVmFsaWQoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUs
IGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2VD
b2RlKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBBU1NFUlQobW9kdWxlUHJv
Z3JhbU5vZGUpOwogCiAgICAgTW9kdWxlQW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoZXhlYywgbW9k
dWxlS2V5LCBzb3VyY2VDb2RlLCBtb2R1bGVQcm9ncmFtTm9kZS0+dmFyRGVjbGFyYXRpb25zKCks
IG1vZHVsZVByb2dyYW1Ob2RlLT5sZXhpY2FsVmFyaWFibGVzKCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IG1vZHVs
ZUFuYWx5emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1Ob2RlKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUobW9kdWxlUmVjb3JkKTsKKyAgICByZXR1cm4gbW9kdWxlUmVjb3JkOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVl
c3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7CiAgICAgfQogCiAgICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBtb2R1bGVS
ZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoYXV0byYga2V5IDogbW9kdWxl
UmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkpIHsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpKyssIGpzU3RyaW5nKGV4ZWMsIGtleS5nZXQoKSkpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50
aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2Fk
ZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5
bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICgh
bW9kdWxlUmVjb3JkKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmIChPcHRpb25zOjpk
dW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbbGlua10g
IiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxuIik7CiAKICAgICBtb2R1bGVSZWNvcmQt
PmxpbmsoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb29rIEZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICAvLyBIb29rIHBvaW50LCBMb2FkZXIucmVzb2x2ZS4KICAgICAvLyBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXJlc29sdmUKQEAgLTE4MCwxMSAr
MTgwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAv
LyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0aGUgVVJMIGZvciB0
aGUgcmVzb3VyY2UuCiAgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8
SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFsb2FkZXIpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnJlc29sdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gbG9hZGVyLT5yZXNvbHZlKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUZldGNoKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5
cGVGZXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmZl
dGNoCiAgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1mZXRj
aApAQCAtMTkzLDExICsxOTMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZQogICAgIC8vIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgogICAgIEpTTW9kdWxl
TG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5m
ZXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGxvYWRlci0+ZmV0Y2goZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlSW5z
dGFudGlhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5p
bnN0YW50aWF0ZQogICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dz
ZXItaW5zdGFudGlhdGUKQEAgLTIwNywyMSArMjA3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAvLyB0aGUgb3JkaW5hcnkgb25lLgogICAgIEpTTW9k
dWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVy
LT5pbnN0YW50aWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSks
IGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IHJldHVybiBsb2FkZXItPmluc3RhbnRpYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVj
LT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tIEFkZGl0aW9uYWwgSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBl
RXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxv
YWRlclByb3RvdHlwZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBUbyBpbnN0
cnVtZW50IGFuZCByZXRyaWV2ZSB0aGUgZXJyb3JzIHJhaXNlZCBmcm9tIHRoZSBtb2R1bGUgZXhl
Y3V0aW9uLAogICAgIC8vIHdlIGluc2VydGVkIHRoZSBob29rIHBvaW50IGhlcmUuCiAKICAgICBK
U01vZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxv
YWRlci0+ZXZhbHVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEp
LCBleGVjLT5hcmd1bWVudCgyKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICByZXR1cm4gbG9hZGVyLT5ldmFsdWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+
YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC02MSwxNiArNjEsMTYgQEAgdm9pZCBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjp2aXNpdENoaWxkcgogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXJy
b3JTdHJ1Y3R1cmUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJl
dGVyOjpjb25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+
anNDYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgQVNTRVJUKGVycm9yU3RydWN0dXJlKTsKICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywg
ZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwor
ICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1l
c3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSk7CiB9CiAKIENvbnN0cnVjdFR5cGUg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtNzksMTEgKzc5LDExIEBAIENvbnN0cnVjdFR5cGUg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2UKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9z
dDsKIH0KICAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNh
bGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0
cnVjdG9yKj4oZXhlYy0+anNDYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1
cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOworICAgIHJldHVybiBF
cnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxw
dHIsIFR5cGVOb3RoaW5nLCBmYWxzZSk7CiB9CiAKIENhbGxUeXBlIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bGxHZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbEdldHRlckZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVsbEdldHRlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOSArMzMsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIE51bGxHZXR0ZXJGdW5jdGlvbjo6c19pbmZv
ID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE51
bGxHZXR0ZXJGdW5jdGlvbikgfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFJldHVyblVuZGVmaW5lZChFeGVjU3RhdGUqKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsUmV0dXJuVW5kZWZpbmVkKEV4ZWNTdGF0ZSopCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogQ2FsbFR5cGUgTnVsbEdldHRlckZ1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBD
YWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dWxsU2V0dGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03MCwxNCArNzAsMTQgQEAgc3RhdGljIGJvb2wgY2FsbGVySXNTdHJpY3Qo
RXhlY1N0YXRlKiBleAogICAgIHJldHVybiBpdGVyLmNhbGxlcklzU3RyaWN0KCk7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZXR1cm5VbmRlZmluZWQoRXhl
Y1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmV0dXJuVW5k
ZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChjYWxsZXJJ
c1N0cmljdChleGVjKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXR0aW5nIGEgcHJvcGVydHkgdGhhdCBo
YXMgb25seSBhIGdldHRlciIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlNldHRpbmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIikpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBDYWxsVHlwZSBOdWxsU2V0dGVyRnVuY3Rp
b246OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAsMjAwMyBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAx
MSwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdl
cihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
ckNvbnN0cnVjdG9yRnVuY0lzU2FmZUludGVnZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlckNvbnN0cnVjdG9yRnVuY0lzSW50ZWdlcihFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNT
YWZlSW50ZWdlcihFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKQEAgLTgzLDE4
ICs4MywxOCBAQCB2b2lkIE51bWJlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWCiB9CiAK
IC8vIEVDTUEgMTUuNy4xCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID8gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdU
YXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1
cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBOdW1iZXJP
YmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAg
IG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwganNOdW1iZXIobikpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKKyAgICByZXR1cm4gb2JqZWN0OwogfQogCiBDb25zdHJ1
Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xMDQsOSArMTA0LDkgQEAgQ29uc3RydWN0VHlw
ZSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogfQogCiAvLyBFQ01BIDE1LjcuMgotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE51bWJlckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE51bWJlckNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKCFleGVjLT5hcmd1bWVudENvdW50KCkgPyAwIDogZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA/IDAgOiBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcihleGVj
KSk7CiB9CiAKIENhbGxUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwq
LCBDYWxsRGF0YSYgY2FsbERhdGEpCkBAIC0xMTYsNyArMTE2LDcgQEAgQ2FsbFR5cGUgTnVtYmVy
Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogfQogCiAvLyBFQ01BLTI2MiAyMC4xLjIuMwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyQ29uc3RydWN0b3JGdW5jSXNJ
bnRlZ2VyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVt
YmVyQ29uc3RydWN0b3JGdW5jSXNJbnRlZ2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1Zh
bHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc0ludGVnZXI7CkBA
IC0xMjgsMTEgKzEyOCwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iCiAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBhcmd1bWVudC5hc0RvdWJsZSgpOwogICAgICAg
ICBpc0ludGVnZXIgPSBzdGQ6OmlzZmluaXRlKG51bWJlcikgJiYgdHJ1bmMobnVtYmVyKSA9PSBu
dW1iZXI7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzSW50
ZWdlcikpOworICAgIHJldHVybiBqc0Jvb2xlYW4oaXNJbnRlZ2VyKTsKIH0KIAogLy8gRUNNQS0y
NjIgMjAuMS4yLjUKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlckNv
bnN0cnVjdG9yRnVuY0lzU2FmZUludGVnZXIoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJDb25zdHJ1Y3RvckZ1bmNJc1NhZmVJbnRlZ2VyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgYm9vbCBpc0ludGVnZXI7CkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYgogICAgICAgICBkb3VibGUgbnVtYmVyID0gYXJndW1l
bnQuYXNEb3VibGUoKTsKICAgICAgICAgaXNJbnRlZ2VyID0gdHJ1bmMobnVtYmVyKSA9PSBudW1i
ZXIgJiYgc3RkOjphYnMobnVtYmVyKSA8PSA5MDA3MTk5MjU0NzQwOTkxLjA7CiAgICAgfQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzSW50ZWdlcikpOworICAgIHJldHVy
biBqc0Jvb2xlYW4oaXNJbnRlZ2VyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwLDIwMDMgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDExLCAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDEx
ICs0MiwxMSBAQCB0eXBlZGVmIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1CiAKIG5h
bWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhl
ZChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
TG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3Rh
dGUqKTsKIAogfQogCkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIFN0cmluZyB0b1N0cmluZ1dp
dGhSYWRpeChpbnQzMl90IAogLy8gVGhpcyBtZXRob2QgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1l
bnQgc3BlY2lmeWluZyBhIG51bWJlciBvZiAqZGVjaW1hbCBwbGFjZXMqCiAvLyB0byByb3VuZCB0
aGUgc2lnbmlmaWNhbmQgdG8gKG9yLCBwdXQgYW5vdGhlciB3YXksIHRoaXMgbWV0aG9kIG9wdGlv
bmFsbHkgcm91bmRzCiAvLyB0byBhcmd1bWVudC1wbHVzLW9uZSBzaWduaWZpY2FudCBmaWd1cmVz
KS4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVu
dGlhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9G
dW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zNzks
NyArMzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogCiAg
ICAgLy8gSGFuZGxlIE5hTiBhbmQgSW5maW5pdHkuCiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh4KSkpOworICAgICAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0
KHgpKTsKIAogICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVkLCBh
bHdheXMgZm9ybWF0IGFzIGV4cG9uZW50aWFsLgogICAgIGNoYXIgYnVmZmVyW1dURjo6TnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGhdOwpAQCAtMzg5LDE0ICszODksMTQgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlzVW5kZWZpbmVkCiAgICAgICAgID8g
Y29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWlsZGVyKQogICAgICAgICA6IGNvbnZl
cnRlci5Ub0V4cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmcoYnVpbGRl
ci5GaW5hbGl6ZSgpKSkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcoYnVpbGRl
ci5GaW5hbGl6ZSgpKSk7CiB9CiAKIC8vIHRvRml4ZWQgY29udmVydHMgYSBudW1iZXIgdG8gYSBz
dHJpbmcsIGFsd2F5cyBmb3JtYXR0aW5nIGFzIGFuIGEgZGVjaW1hbCBmcmFjdGlvbi4KIC8vIFRo
aXMgbWV0aG9kIHRha2VzIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYSBudW1iZXIgb2YgZGVjaW1h
bCBwbGFjZXMgdG8gcm91bmQgdGhlCiAvLyBzaWduaWZpY2FuZCB0by4gSG93ZXZlciB3aGVuIGNv
bnZlcnRpbmcgbGFyZ2UgdmFsdWVzICgxZSsyMSBhbmQgYWJvdmUpIHRoaXMKIC8vIG1ldGhvZCB3
aWxsIGluc3RlYWQgZmFsbGJhY2sgdG8gY2FsbGluZyBUb1N0cmluZy4gCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDE1LDE0ICs0MTUsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIC8vIFRoaXMgYWxzbyBjb3ZlcnMgSW5pbml0
eSwgYW5kIHN0cnVjdHVyZSB0aGUgY2hlY2sgc28gdGhhdCBOYU4KICAgICAvLyB2YWx1ZXMgYXJl
IGFsc28gaGFuZGxlZCBieSBudW1iZXJUb1N0cmluZwogICAgIGlmICghKGZhYnMoeCkgPCAxZSsy
MSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoeCkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgpKTsKIAogICAgIC8vIFRo
ZSBjaGVjayBhYm92ZSB3aWxsIHJldHVybiBmYWxzZSBmb3IgTmFOIG9yIEluZmluaXR5LCB0aGVz
ZSB3aWxsIGJlCiAgICAgLy8gaGFuZGxlZCBieSBudW1iZXJUb1N0cmluZy4KICAgICBBU1NFUlQo
c3RkOjppc2Zpbml0ZSh4KSk7CiAKICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBTdHJpbmcobnVtYmVyVG9G
aXhlZFdpZHRoU3RyaW5nKHgsIGRlY2ltYWxQbGFjZXMsIGJ1ZmZlcikpKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhudW1iZXJUb0ZpeGVkV2lkdGhTdHJpbmcoeCwgZGVjaW1h
bFBsYWNlcywgYnVmZmVyKSkpOwogfQogCiAvLyB0b1ByZWNpc2lvbiBjb252ZXJ0cyBhIG51bWJl
ciB0byBhIHN0cmluZywgdGFrZWluZyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIGEKQEAgLTQzMiw3
ICs0MzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAvLyBk
ZWNpbWFsLCB3aGlsc3QgMTAwMCBpcyBjb252ZXJ0ZWQgdG8gdGhlIGV4cG9uZW50aWFsIHJlcHJl
c2VudGF0aW9uIDEuMDBlKzMuCiAvLyBGb3IgbmVnYXRpdmUgZXhwb25lbnRzIHZhbHVlcyA+PSAx
ZS02IGFyZSBmb3JtYXRlZCBhcyBkZWNpbWFsIGZyYWN0aW9ucywKIC8vIHdpdGggc21hbGxlciB2
YWx1ZXMgY29udmVydGVkIHRvIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24o
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDQ5LDE0ICs0NDksMTQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogCiAgICAgLy8gVG8gcHJlY2lz
aW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgVG9TdHJpbmcuCiAgICAg
aWYgKGlzVW5kZWZpbmVkKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgpKSk7CisgICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh4KSk7
CiAKICAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KICAgICBpZiAoIXN0ZDo6aXNmaW5p
dGUoeCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHgpKSk7CisgICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFT
Y3JpcHQoeCkpOwogCiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgU3RyaW5nKG51bWJlclRvRml4ZWRQcmVj
aXNpb25TdHJpbmcoeCwgc2lnbmlmaWNhbnRGaWd1cmVzLCBidWZmZXIpKSkpOworICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBTdHJpbmcobnVtYmVyVG9GaXhlZFByZWNpc2lvblN0cmluZyh4LCBz
aWduaWZpY2FudEZpZ3VyZXMsIGJ1ZmZlcikpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQzMl90
IGV4dHJhY3RSYWRpeEZyb21BcmdzKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTQ3MywyNiArNDczLDI2
IEBAIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBleHRyYWN0UmFkaXhGcm9tQXIKICAgICByZXR1cm4g
cmFkaXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgaW50ZWdlclZhbHVlVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IHJhZGl4LCBpbnQzMl90IHZhbHVlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGludGVnZXJWYWx1ZVRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCByYWRpeCwgaW50MzJfdCB2YWx1ZSkKIHsKICAgICAvLyBBIG5lZ2F0aXZlIHZhbHVl
IGNhc3RlZCB0byB1bnNpZ25lZCB3b3VsZCBiZSBiaWdnZXIgdGhhbiAzNiAodGhlIG1heCByYWRp
eCkuCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkgPCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmFkaXgpKSB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSA8PSAzNik7CiAgICAgICAg
IEFTU0VSVCh2YWx1ZSA+PSAwKTsKICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0tPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0
ZXJTdHJpbmcocmFkaXhEaWdpdHNbdmFsdWVdKSk7CisgICAgICAgIHJldHVybiB2bS0+c21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhyYWRpeERpZ2l0c1t2YWx1ZV0pOwogICAgIH0K
IAogICAgIGlmIChyYWRpeCA9PSAxMCkgewogICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgdm0tPm51bWVyaWNT
dHJpbmdzLmFkZCh2YWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCB2bS0+bnVt
ZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCB0b1N0cmluZ1dpdGhSYWRpeCh2YWx1ZSwgcmFkaXgpKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHRvU3RyaW5nV2l0aFJhZGl4KHZhbHVlLCByYWRpeCkp
OwogCiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUxMCwxNiAr
NTEwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICAg
ICAgcmV0dXJuIGludGVnZXJWYWx1ZVRvU3RyaW5nKGV4ZWMsIHJhZGl4LCBpbnRlZ2VyVmFsdWUp
OwogCiAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKGRvdWJsZVZhbHVlKSkpOworICAg
ICAgICByZXR1cm4ganNTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoZG91YmxlVmFs
dWUpKTsKIAogICAgIGlmICghc3RkOjppc2Zpbml0ZShkb3VibGVWYWx1ZSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVt
YmVyVG9TdHJpbmdFQ01BU2NyaXB0KGRvdWJsZVZhbHVlKSkpOworICAgICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KGRv
dWJsZVZhbHVlKSk7CiAKICAgICBSYWRpeEJ1ZmZlciBzOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgdG9TdHJpbmdXaXRoUmFkaXgocywgZG91YmxlVmFsdWUsIHJh
ZGl4KSkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0b1N0cmluZ1dpdGhSYWRpeChzLCBk
b3VibGVWYWx1ZSwgcmFkaXgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtNTI4LDEwICs1MjgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBudW1iZXJQcm90bwogICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPnRoaXNW
YWx1ZSgpLCB4KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih4KS50b1N0cmluZyhleGVj
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTQwLDcgKzU0MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdG9UaGlzTnVtYmVyKHRoaXNWYWx1ZSwgeCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBXVEY6Om1ha2VTdHJp
bmcoInRoaXNOdW1iZXJWYWx1ZSBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIsIGFzU3RyaW5nKGpz
VHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMsIHRoaXNWYWx1ZSkpLT52YWx1ZShleGVjKSkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoeCkpOworICAgIHJldHVybiBqc051bWJl
cih4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMjQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTEsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNTAsNiArNTAsNiBAQCBwcml2YXRlOgogICAgIE51bWJlclByb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51
bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzksMTkgKzM5
LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2V0UHJvdG90eXBlT2YoRXhlY1N0
YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckNyZWF0ZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JTZWFsKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JQcmV2ZW50RXh0ZW5zaW9ucyhFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JJc0V4dGVuc2libGUoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXMoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUq
KTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNldFByb3RvdHlwZU9m
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNyZWF0ZShFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNlYWwoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0YXRl
Kik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JQcmV2ZW50RXh0ZW5z
aW9ucyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
cklzU2VhbGVkKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9ySXNGcm96ZW4oRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JJc0V4dGVuc2libGUoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JJcyhFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0xMzcsOSArMTM3
LDkgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdAogICAgIHJldHVy
biBhcmcudG9PYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0KTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE9iamVjdENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE9i
amVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNvbnN0cnVjdE9iamVjdChleGVjLCBleGVjLT5uZXdUYXJnZXQoKSkpOworICAgIHJl
dHVybiBjb25zdHJ1Y3RPYmplY3QoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCkpOwogfQogCiBDb25z
dHJ1Y3RUeXBlIE9iamVjdENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0xNDgsOSArMTQ4LDkgQEAgQ29uc3RydWN0
VHlwZSBPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBl
OjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsT2Jq
ZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0T2JqZWN0KGV4ZWMsIEpTVmFsdWUoKSkpOworICAg
IHJldHVybiBjb25zdHJ1Y3RPYmplY3QoZXhlYywgSlNWYWx1ZSgpKTsKIH0KIAogQ2FsbFR5cGUg
T2JqZWN0Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKQEAgLTE1OSwxNyArMTU5LDE3IEBAIENhbGxUeXBlIE9iamVjdENvbnN0cnVjdG9yOjpnZXRD
YWxsRGF0YSgKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5
cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpKTsKKyAgICByZXR1cm4gb2JqZWN0
LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0cnVjdG9yU2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2V0UHJvdG90eXBlT2YoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTgzLDEyICsxODMsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm90b3R5cGUgdmFsdWUgY2FuIG9u
bHkgYmUgYW4gb2JqZWN0IG9yIG51bGwiKSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gb2Jq
ZWN0VmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSB0cnVlOwogICAgIGJvb2wgZGlkU2V0
UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHByb3RvVmFsdWUsIHNo
b3VsZFRocm93SWZDYW50U2V0KTsKICAgICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3RvdHlwZSwg
c2NvcGUuZXhjZXB0aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iamVjdFZhbHVlKTsKKyAgICByZXR1cm4gb2JqZWN0VmFsdWU7CiB9CiAKIEpT
VmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CkBAIC0yNDEsNjkgKzI0MSw2OSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJv
cGVydHlECiAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVj
LT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgb2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmpl
Y3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93
blByb3BlcnR5RGVzY3JpcHRvcnMoZXhlYywgb2JqZWN0KSk7CisgICAgcmV0dXJuIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpOwogfQogCiAv
LyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3Bl
cnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICByZXR1cm4g
b3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhl
IGVudW1lcmF0aW9uIGNhY2hlLgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5U3ltYm9scyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVj
LT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93
blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICByZXR1cm4gb3duUHJvcGVydHlL
ZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhlIGVudW1lcmF0aW9u
IGNhY2hlLgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rvcktl
eXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yS2V5cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOworICAgIHJldHVybiBv
d25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0
eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOworICAgIHJldHVybiBvd25Qcm9wZXJ0
eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiB9CiAKIC8vIEVTNiA2LjIuNC41IFRv
UHJvcGVydHlEZXNjcmlwdG9yCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5l
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDEyLDE3ICs0MTIs
MTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm9wZXJ0
aWVzIGNhbiBvbmx5IGJlIGRlZmluZWQgb24gT2JqZWN0cy4iKSk7CiAgICAgSlNPYmplY3QqIG9i
aiA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBh
dXRvIHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgy
KSwgZGVzY3JpcHRvcik7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNz
KTsKICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9y
LmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29yKSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIG9iai0+bWV0
aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqKTsKKyAgICByZXR1cm4gb2JqOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBk
ZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgSlNPYmpl
Y3QqIHByb3BlcnRpZXMpCkBAIC00NjUsNyArNDY1LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5l
UHJvcGVydGllcyhFeGVjU3RhdAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmlu
ZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDc2LDEyICs0
NzYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpT
T2JqZWN0KiBwcm9wcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEFT
U0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFwcm9wcyk7CiAgICAgaWYgKFVOTElLRUxZKCFw
cm9wcykpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRl
ZmluZVByb3BlcnRpZXMoZXhlYywgdGFyZ2V0T2JqLCBwcm9wcykpOworICAgIHJldHVybiBkZWZp
bmVQcm9wZXJ0aWVzKGV4ZWMsIHRhcmdldE9iaiwgcHJvcHMpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC00OTMsMTEgKzQ5MywxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgID8gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgYXNPYmplY3QocHJvdG8pKQogICAgICAgICA6IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZSgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXdPYmplY3QpOworICAgICAgICByZXR1cm4g
bmV3T2JqZWN0OwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJv
cGVydHkgZGVzY3JpcHRvciBsaXN0IG11c3QgYmUgYW4gT2JqZWN0LiIpKTsKICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZpbmVQcm9wZXJ0aWVzKGV4
ZWMsIG5ld09iamVjdCwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKSk7CisgICAgcmV0dXJu
IGRlZmluZVByb3BlcnRpZXMoZXhlYywgbmV3T2JqZWN0LCBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgxKSkpOwogfQogCiBlbnVtIGNsYXNzIEludGVncml0eUxldmVsIHsKQEAgLTU0Nyw3ICs1NDcs
NyBAQCBib29sIHNldEludGVncml0eUxldmVsKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAgICAgCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yU2VhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3RydWN0b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU1NSwy
MiArNTU1LDIyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUg
b2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOworICAgICAgICByZXR1cm4gb2JqOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9i
amVjdChvYmplY3QpKSB7CiAgICAgICAgIG9iamVjdC0+c2VhbCh2bSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqKTsKKyAgICAgICAgcmV0dXJuIG9iajsKICAgICB9CiAKICAg
ICBib29sIHN1Y2Nlc3MgPSBzZXRJbnRlZ3JpdHlMZXZlbDxJbnRlZ3JpdHlMZXZlbDo6U2VhbGVk
PihleGVjLCB2bSwgb2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHByZXZlbnQgZXh0ZW5zaW9uIGluIE9iamVj
dC5zZWFsIikpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CisgICAg
cmV0dXJuIG9iajsKIH0KIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKQEAgLTU5MCwzMSArNTkwLDMxIEBAIEpTT2Jq
ZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3QKICAgICByZXR1cm4gb2JqZWN0Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXpl
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMS4gSWYgVHlw
ZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gTy4KICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqKTsKKyAgICAgICAgcmV0dXJuIG9iajsKICAgICBKU09iamVjdCogcmVz
dWx0ID0gb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXNPYmplY3Qob2JqKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclByZXZlbnRFeHRlbnNpb25z
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFs
dWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWFyZ3VtZW50LmlzT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnQpOworICAgICAg
ICByZXR1cm4gYXJndW1lbnQ7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGFyZ3Vt
ZW50KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2Jq
ZWN0LCBleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7CisgICAgcmV0
dXJuIG9iamVjdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dHJ1Y3RvcklzU2VhbGVkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTYyMiwxNiArNjIyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3QKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgog
ICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwor
ICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkp
OworICAgICAgICByZXR1cm4ganNCb29sZWFuKG9iamVjdC0+aXNTZWFsZWQodm0pKTsKIAogICAg
IC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NB
bmRTeW1ib2xzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5l
bmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
cHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02NDMsMTcgKzY0MywxNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0
dXJuIGZhbHNlLgogICAgICAgICBpZiAoZGVzYy5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKICAgICB9CiAKICAgICAvLyAzLiBJZiB0aGUgW1tFeHRl
bnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxzZSwgdGhlbiByZXR1cm4gdHJ1
ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KICAgICBib29sIGlzRXh0ZW5z
aWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIHJldHVybiBqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbihFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3pl
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NjEsMTYgKzY2MSwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMS4gSWYgVHlw
ZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gdHJ1ZS4KICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bih0cnVlKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlm
IChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4ob2JqZWN0LT5pc0Zyb3plbih2bSkpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9v
bGVhbihvYmplY3QtPmlzRnJvemVuKHZtKSk7CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBv
d24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGll
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9ICpp
dGVyOwpAQCAtNjgzLDMyICs2ODMsMzIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdAogICAgICAgICAvLyBiLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGRlc2MpIGlzIHRy
dWUgdGhlbgogICAgICAgICAvLyBpLiBJZiBkZXNjLltbV3JpdGFibGVdXSBpcyB0cnVlLCByZXR1
cm4gZmFsc2UuIGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCB0aGVuIHJldHVy
biBmYWxzZS4KICAgICAgICAgaWYgKChkZXNjLmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjLndy
aXRhYmxlKCkpIHx8IGRlc2MuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgcmV0dXJuIGpzQm9v
bGVhbihmYWxzZSk7CiAgICAgfQogCiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1dIGlu
dGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAgLy8g
NC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmpl
Y3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbigh
aXNFeHRlbnNpYmxlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKCFpc0V4dGVuc2libGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKICAgICBib29s
IGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5zaWJsZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpc0V4dGVuc2libGUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXMoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXMoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHNh
bWVWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKSk7Cisg
ICAgcmV0dXJuIGpzQm9vbGVhbihzYW1lVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4
ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhlIGVudW1lcmF0aW9uIGNh
Y2hlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMTEgKzI2
LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3Bl
cnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKEV4ZWNTdGF0ZSopOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcktleXMoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtl
eXMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JH
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4ZWNTdGF0ZSop
OworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlT
eW1ib2xzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yS2V5cyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvd25FbnVtZXJhYmxl
UHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSopOwogCiBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDE1
ICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmlu
ZVNldHRlcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hh
c093blByb3BlcnR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
TG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqKTsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKE9iamVjdFByb3RvdHlwZSk7CiAKQEAgLTc5LDQ1ICs3OSw0NSBAQCBPYmplY3RQcm90
b3R5cGUqIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdmFsdWVPYmog
PSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZU9iaikp
Ci0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodmFsdWVPYmopOworICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiB2YWx1ZU9i
ajsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNIYXNP
d25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgQVNT
RVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmplY3QpOwogICAgIGlmIChVTkxJS0VM
WSghdGhpc09iamVjdCkpCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUodm0pOwogICAgIEhhc093blByb3BlcnR5Q2FjaGUqIGhhc093blByb3BlcnR5Q2Fj
aGUgPSB2bS5lbnN1cmVIYXNPd25Qcm9wZXJ0eUNhY2hlKCk7CiAgICAgaWYgKHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gcmVzdWx0ID0gaGFzT3duUHJvcGVydHlDYWNoZS0+Z2V0KHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lKSkgewogICAgICAgICBBU1NFUlQoKnJlc3VsdCA9PSB0aGlzT2JqZWN0LT5oYXNP
d25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCpy
ZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbigqcmVzdWx0KTsKICAgICB9CiAKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0ID0gdGhpc09iamVjdC0+
aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaGFzT3duUHJvcGVydHlDYWNoZS0+dHJ5QWRkKHZtLCBz
bG90LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihyZXN1
bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lz
UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMTI2LDMxICsxMjYsMzEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5M
SUtFTFkoIXRoaXNPYmopKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAKICAgICBKU1ZhbHVlIHYgPSBhc09iamVjdChl
eGVjLT5hcmd1bWVudCgwKSktPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmICghdi5p
c09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICBp
ZiAodiA9PSB0aGlzT2JqKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKICAgICAg
ICAgdiA9IGFzT2JqZWN0KHYpLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgZ2V0ID0gZXhl
Yy0+YXJndW1lbnQoMSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xNTgsNyArMTU4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIGdl
dHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQo
MCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRH
ZXR0ZXIoZ2V0KTsKQEAgLTE2OSwxNiArMTY5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNE
ZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IEpTVmFsdWUgc2V0ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CkBAIC0xODYsNyArMTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJpbnZhbGlkIHNldHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoc2V0KTsKQEAgLTE5NywxOSArMTk3LDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKICAgICBib29sIGhhc1Byb3BlcnR5ID0gdGhpc09i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CkBAIC0yMTcs
MjkgKzIxNywyOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAg
ICAgaWYgKGhhc1Byb3BlcnR5KSB7CiAgICAgICAgIGlmIChzbG90LmlzQWNjZXNzb3IoKSkgewog
ICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBzbG90LmdldHRlclNldHRl
cigpOwotICAgICAgICAgICAgcmV0dXJuIGdldHRlclNldHRlci0+aXNHZXR0ZXJOdWxsKCkgPyBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkgOiBKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyU2V0
dGVyLT5nZXR0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0dGVyU2V0dGVyLT5pc0dldHRl
ck51bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBnZXR0ZXJTZXR0ZXItPmdldHRlcigpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIEN1c3RvbUFjY2Vzc29yKSB7CiAg
ICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgICAgIEFT
U0VSVChzbG90LnNsb3RCYXNlKCkpOwogICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpID8gSlNW
YWx1ZTo6ZW5jb2RlKGRlc2NyaXB0b3IuZ2V0dGVyKCkpIDogSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldHRlclByZXNl
bnQoKSA/IGRlc2NyaXB0b3IuZ2V0dGVyKCkgOiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1
bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIGJvb2wgaGFzUHJvcGVydHkg
PSB0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
QEAgLTI0Nyw3OSArMjQ3LDc5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG8KICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNBY2Nlc3Nv
cigpKSB7CiAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHNsb3QuZ2V0
dGVyU2V0dGVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0dGVyU2V0dGVyLT5pc1NldHRlck51
bGwoKSA/IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSA6IEpTVmFsdWU6OmVuY29kZShn
ZXR0ZXJTZXR0ZXItPnNldHRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBnZXR0ZXJTZXR0ZXIt
PmlzU2V0dGVyTnVsbCgpID8ganNVbmRlZmluZWQoKSA6IGdldHRlclNldHRlci0+c2V0dGVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgQ3VzdG9tQWNjZXNz
b3IpIHsKICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAg
ICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgICAgICAgICBpZiAoc2xvdC5zbG90
QmFzZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50
KCkgPyBKU1ZhbHVlOjplbmNvZGUoZGVzY3JpcHRvci5zZXR0ZXIoKSkgOiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2V0
dGVyUHJlc2VudCgpID8gZGVzY3JpcHRvci5zZXR0ZXIoKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CiAgICAgYm9vbCBlbnVtZXJhYmxlID0gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikgJiYgZGVzY3JpcHRvci5l
bnVtZXJhYmxlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZW51bWVy
YWJsZSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oZW51bWVyYWJsZSk7CiB9CiAKIC8vIDE1LjIu
NC4zIE9iamVjdC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcoKQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFsdWUgYXMgdGhlIGFy
Z3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMo
ZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIC8vIDIuIExldCB0b1N0cmluZyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gcGFzc2luZyAidG9TdHJpbmciIGFz
IHRoZSBhcmd1bWVudC4KICAgICBKU1ZhbHVlIHRvU3RyaW5nID0gb2JqZWN0LT5nZXQoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICAvLyAzLiBJZiBJc0NhbGxhYmxlKHRvU3RyaW5nKSBpcyBmYWxzZSwgdGhyb3cg
YSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodG9TdHJpbmcsIGNhbGxEYXRhKTsKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
Ly8gNC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwg
bWV0aG9kIG9mIHRvU3RyaW5nIHBhc3NpbmcgTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgbm8gYXJn
dW1lbnRzLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGwoZXhlYywgdG9TdHJpbmcsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5l
bXB0eUxpc3QoKSkpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIHRvU3RyaW5nLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIG9iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1Zh
bHVlLmlzVW5kZWZpbmVkKCkgPyB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkT2JqZWN0U3RyaW5n
KCkgOiB2bS5zbWFsbFN0cmluZ3MubnVsbE9iamVjdFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJu
IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZCgpID8gdm0uc21hbGxTdHJpbmdzLnVuZGVmaW5lZE9iamVj
dFN0cmluZygpIDogdm0uc21hbGxTdHJpbmdzLm51bGxPYmplY3RTdHJpbmcoKTsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBBU1NFUlQo
ISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwogICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAogICAgIFByb3BlcnR5TmFtZSB0b1N0cmluZ1RhZ1N5bWJvbCA9IHZtLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCB0b1N0
cmluZ1RhZ1N5bWJvbCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFn
U2xvdCkgLT4gSlNWYWx1ZSB7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xv
dChleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3Qm
IHRvU3RyaW5nVGFnU2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIGlmIChmb3VuZCkgewogICAg
ICAgICAgICAgSlNWYWx1ZSBzdHJpbmdUYWcgPSB0b1N0cmluZ1RhZ1Nsb3QuZ2V0VmFsdWUoZXhl
YywgdG9TdHJpbmdUYWdTeW1ib2wpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKQEAgLTM0NCw3ICszNDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvCiAgICAgICAgIGF1dG8gcmVzdWx0ID0ganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgbmV3U3RyaW5nKTsKICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+c2V0
T2JqZWN0VG9TdHJpbmdWYWx1ZShleGVjLCB2bSwgcmVzdWx0LCB0b1N0cmluZ1RhZ1Nsb3QpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDUsNiArNDUs
NiBAQCBwcml2YXRlOgogICAgIE9iamVjdFByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwogfTsK
IAotSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4LCAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOCwxNCAr
MzgsMTQgQEAgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcihFeGVjUwogICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0
b20gYWNjZXNzb3JzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTgwMTQKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IG1fYXR0cmlidXRlcyAmIEN1c3Rv
bUFjY2Vzc29yID8gbV90aGlzVmFsdWUgOiBKU1ZhbHVlKHNsb3RCYXNlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBKU1ZhbHVlOjpl
bmNvZGUodGhpc1ZhbHVlKSwgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIG1fZGF0YS5jdXN0
b20uZ2V0VmFsdWUoZXhlYywgdGhpc1ZhbHVlLCBwcm9wZXJ0eU5hbWUpOwogfQogCiBKU1ZhbHVl
IFByb3BlcnR5U2xvdDo6Y3VzdG9tQWNjZXNzb3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGlmICghbV9kYXRhLmN1c3RvbUFj
Y2Vzc29yLmdldHRlclNldHRlci0+Z2V0dGVyKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdl
dHRlclNldHRlci0+Z2V0dGVyKCkoZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKG1fdGhpc1ZhbHVlKSwg
cHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIG1fZGF0YS5jdXN0b21BY2Nlc3Nvci5nZXR0ZXJT
ZXR0ZXItPmdldHRlcigpKGV4ZWMsIG1fdGhpc1ZhbHVlLCBwcm9wZXJ0eU5hbWUpOwogfQogCiBK
U1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0UHVyZVJlc3VsdCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NywgMjAwOCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDctMjAwOCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDAsNyArMTAwLDcgQEAg
cHVibGljOgogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHNsb3RCYXNlIC8gcmVjZWl2ZXIg
YmVoYXZpb3IgZGlmZmVyZW5jZSBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0b20gYWNjZXNzb3Jz
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQK
LSAgICB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgdHlwZWRlZiBKU1Zh
bHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKIAogICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICBKU1ZhbHVlIGdldFZhbHVlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTMsNyArNTMsNyBAQCBQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0cnVjdG9yKFZNJiB2CiB7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VSZXZvY2FibGVQ
cm94eShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VS
ZXZvY2FibGVQcm94eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NCwxOSAr
NjQsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZQogICAgIEpT
VmFsdWUgdGFyZ2V0ID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0
KDEpOwogICAgIFByb3h5T2JqZWN0KiBwcm94eSA9IFByb3h5T2JqZWN0OjpjcmVhdGUoZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0YXJnZXQsIGhhbmRsZXIpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgUHJveHlSZXZva2UqIHJldm9rZSA9IFByb3h5UmV2
b2tlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJveHlSZXZva2VT
dHJ1Y3R1cmUoKSwgcHJveHkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlk
ZW50aWZpZXIodm0sICJwcm94eSIpLCBwcm94eSwgTm9uZSk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIG1ha2VJZGVudGlmaWVyKHZtLCAicmV2b2tlIiksIHJldm9rZSwgTm9uZSk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJveHlSZXZvY2FibGVDb25z
dHJ1Y3RvclRocm93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9yVGhyb3dFcnJvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7
CiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UHJveHkucmV2b2NhYmxlIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4gSXQgY2FuIG9ubHkgYmUgY2Fs
bGVkIikpOwpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFByb3h5Q29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNCiAgICAgcHV0RGlyZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInJldm9jYWJs
ZSIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMiwgQVNDSUlMaXRlcmFs
KCJyZXZvY2FibGUiKSwgbWFrZVJldm9jYWJsZVByb3h5LCBOb0ludHJpbnNpYywgcHJveHlSZXZv
Y2FibGVDb25zdHJ1Y3RvclRocm93RXJyb3IpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0UHJveHlPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RQcm94eU9iamVjdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0o
KSk7CiAgICAgaWYgKGV4ZWMtPm5ld1RhcmdldCgpLmlzVW5kZWZpbmVkKCkpCkBAIC0xMDAsNyAr
MTAwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIEpT
VmFsdWUgdGFyZ2V0ID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0
KDEpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFBy
b3h5T2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0YXJn
ZXQsIGhhbmRsZXIpKTsKKyAgICByZXR1cm4gUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFuZGxlcik7CiB9CiAKIENvbnN0cnVj
dFR5cGUgUHJveHlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMTA5LDEwICsxMDksMTAgQEAgQ29uc3RydWN0VHlw
ZSBQcm94eUNvbnN0cnVjdG9yOjpnZXRDb25zdAogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlOjpI
b3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUHJveHko
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUHJveHko
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KGV4ZWMtPnZtKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3Rv
ckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb3h5Iikp
OworICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJveHkiKTsKIH0KIAogQ2FsbFR5cGUgUHJveHlDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuaAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDggKzQ5LDYgQEAgcHJpdmF0ZToKICAgICBQcm94
eUNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0KLSAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgZ2V0R2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ5MSwxMyArNDkxLDEzIEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0QnlJbmRleENvbW1vbihl
eGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmZvcm1Qcm94eUNhbGwoRXhl
Y1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmb3JtUHJveHlD
YWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkoIXZt
LmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PFBy
b3h5T2JqZWN0Kj4oZXhlYy0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUg
PSBwcm94eS0+aGFuZGxlcigpOwpAQCAtNTA4LDI0ICs1MDgsMjQgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5
IiksIEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChhcHBseU1ldGhv
ZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSh0
YXJnZXQsIGNhbGxEYXRhKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGU6Ok5vbmUpOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCB0YXJnZXQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhl
Yy0+dGhpc1ZhbHVlKCksIEFyZ0xpc3QoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIGNhbGwoZXhl
YywgdGFyZ2V0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGV4ZWMtPnRoaXNWYWx1ZSgpLCBBcmdMaXN0
KGV4ZWMpKTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5
KGV4ZWMsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJn
TGlzdChleGVjKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQoZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQoYXJnQXJyYXkpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhbGwoZXhlYywgYXBwbHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgYXBwbHlNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKIH0KIAogQ2FsbFR5cGUgUHJv
eHlPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpA
QCAtNTQxLDEzICs1NDEsMTMgQEAgQ2FsbFR5cGUgUHJveHlPYmplY3Q6OmdldENhbGxEYXRhKEpT
Q2VsbAogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5Q29uc3RydWN0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRv
UmVjdXJzZVNvZnQoKSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywg
c2NvcGUpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0
Kj4oZXhlYy0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSBwcm94eS0+
aGFuZGxlcigpOwpAQCAtNTU4LDI3ICs1NTgsMjcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlOwogICAgIEpTVmFsdWUgY29uc3RydWN0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9k
KGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJjb25zdHJ1Y3Qi
KSwgQVNDSUlMaXRlcmFsKCInY29uc3RydWN0JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxl
ciBzaG91bGQgYmUgY29uc3RydWN0aWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNv
bnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIENvbnN0cnVjdERhdGEgY29u
c3RydWN0RGF0YTsKICAgICAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdGFyZ2V0
LT5tZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEodGFyZ2V0LCBjb25zdHJ1Y3REYXRh
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBl
OjpOb25lKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVj
dERhdGEsIEFyZ0xpc3QoZXhlYyksIGV4ZWMtPm5ld1RhcmdldCgpKSk7CisgICAgICAgIHJldHVy
biBjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBB
cmdMaXN0KGV4ZWMpLCBleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAgfQogCiAgICAgSlNBcnJheSog
YXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRp
b25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFy
Z3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ0FycmF5KTsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKGV4ZWMtPm5ld1RhcmdldCgpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhbGwoZXhlYywgY29uc3RydWN0TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhh
bmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBp
ZiAoIXJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXN1bHQgZnJvbSBQcm94eSBoYW5kbGVyJ3MgJ2Nv
bnN0cnVjdCcgbWV0aG9kIHNob3VsZCBiZSBhbiBvYmplY3QiKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENvbnN0cnVjdFR5
cGUgUHJveHlPYmplY3Q6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlSZXZva2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5UmV2b2tlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlSZXZva2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDE4ICs1NSwx
OCBAQCB2b2lkIFByb3h5UmV2b2tlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sCiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHBlcmZvcm1Qcm94eVJldm9rZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmZvcm1Qcm94eVJldm9rZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgUHJveHlSZXZva2UqIHByb3h5UmV2b2tlID0ganNDYXN0PFByb3h5UmV2b2tlKj4oZXhl
Yy0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1ZSBwcm94eVZhbHVlID0gcHJveHlSZXZva2UtPnBy
b3h5KCk7CiAgICAgaWYgKHByb3h5VmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ocHJveHlW
YWx1ZSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBwcm94eS0+cmV2b2tlKHZtKTsK
ICAgICBwcm94eVJldm9rZS0+c2V0UHJveHlUb051bGwodm0pOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
IENhbGxUeXBlIFByb3h5UmV2b2tlOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9w
ZXJ0eVNsb3QuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICsz
OCw3IEBAIGNsYXNzIFB1dFByb3BlcnR5U2xvdCB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsg
VW5jYWNoYWJsZSwgRXhpc3RpbmdQcm9wZXJ0eSwgTmV3UHJvcGVydHksIFNldHRlclByb3BlcnR5
LCBDdXN0b21WYWx1ZSwgQ3VzdG9tQWNjZXNzb3IgfTsKICAgICBlbnVtIENvbnRleHQgeyBVbmtu
b3duQ29udGV4dCwgUHV0QnlJZCwgUHV0QnlJZEV2YWwgfTsKLSAgICB0eXBlZGVmIGJvb2wgKCpQ
dXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSk7CiAKICAgICBQdXRQcm9w
ZXJ0eVNsb3QoSlNWYWx1ZSB0aGlzVmFsdWUsIGJvb2wgaXNTdHJpY3RNb2RlID0gZmFsc2UsIENv
bnRleHQgY29udGV4dCA9IFVua25vd25Db250ZXh0LCBib29sIGlzSW5pdGlhbGl6YXRpb24gPSBm
YWxzZSkKICAgICAgICAgOiBtX3R5cGUoVW5jYWNoYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDE3ICszNSwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdENvbnN0cnVjdChF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3REZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RFbnVtZXJhdGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RJc0V4dGVuc2li
bGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZWN0T3duS2V5cyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZmxlY3RPYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyhFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0
U2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RDb25zdHJ1Y3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEVudW1lcmF0ZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldChFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0SXNFeHRlbnNpYmxlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0T3duS2V5cyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdFByZXZlbnRF
eHRlbnNpb25zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZs
ZWN0T2JqZWN0U2V0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0U2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtOTMsNTkg
KzkzLDU5IEBAIHZvaWQgUmVmbGVjdE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
cmVmbGVjdC5jb25zdHJ1Y3QKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amVjdENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVm
bGVjdE9iamVjdENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0Lmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IiKSkpOworICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1Y3Qg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IiKSk7CiAKICAgICBD
b25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlOwogICAgIGlmICghdGFyZ2V0LmlzQ29uc3RydWN0b3IoY29uc3RydWN0VHlwZSwgY29uc3Ry
dWN0RGF0YSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IiKSkpOworICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1Y3Qg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IiKSk7CiAKICAgICBK
U1ZhbHVlIG5ld1RhcmdldCA9IHRhcmdldDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDMpIHsKICAgICAgICAgbmV3VGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMik7CiAgICAgICAg
IGlmICghbmV3VGFyZ2V0LmlzQ29uc3RydWN0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGEgY29uc3RydWN0
b3IgaWYgcHJlc2VudCIpKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhlIHRo
aXJkIGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IgaWYgcHJlc2VudCIpKTsKICAgICB9CiAKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgSlNPYmplY3QqIGFyZ3VtZW50
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgxKSk7CiAg
ICAgaWYgKCFhcmd1bWVudHNPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5jb25zdHJ1
Y3QgcmVxdWlyZXMgdGhlIHNlY29uZCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVj
dC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhlIHNlY29uZCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSk7
CiAKICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShleGVjLCBhcmd1bWVudHNPYmplY3QsIFJ1
bnRpbWVUeXBlTWFza0FsbFR5cGVzLCBBU0NJSUxpdGVyYWwoIlRoaXMgZXJyb3IgbXVzdCBub3Qg
YmUgcmFpc2VkIiksIFsmXSAoSlNWYWx1ZSB2YWx1ZSwgUnVudGltZVR5cGUpIC0+IGJvb2wgewog
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0
LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1bWVudHMsIG5ld1RhcmdldCkpOwor
ICAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmd1bWVudHMsIG5ld1RhcmdldCk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZGVmaW5lcHJvcGVydHkKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlJlZmxlY3QuZGVmaW5lUHJvcGVydHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJl
IGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVByb3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJz
dCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVj
LT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29s
IHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwg
ZGVzY3JpcHRvcik7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNzKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKQotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmli
dXRlcygpICYgQWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKQEAgLTE1MywzNSArMTUzLDM1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBib29sIHNo
b3VsZFRocm93ID0gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldE9iamVjdCA9IGFzT2JqZWN0
KHRhcmdldCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRhcmdldE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eSh0YXJnZXRPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih0YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGFyZ2V0T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7CiB9CiAKIC8vIEZJWE1FOiBSZWZsZWN0LmVudW1l
cmF0ZSBpcyByZW1vdmVkIGluIEVDTUEgMjAxNiBkcmFmdC4KIC8vIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0LmVudW1lcmF0ZQotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RW51bWVyYXRlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RW51bWVyYXRlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJSZWZsZWN0LmVudW1lcmF0ZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlJlZmxlY3QuZW51bWVyYXRlIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVu
dCBiZSBhbiBvYmplY3QiKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgYXNP
YmplY3QodGFyZ2V0KSkpOworICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9wZXJ0eU5hbWVJdGVyYXRv
clN0cnVjdHVyZSgpLCBhc09iamVjdCh0YXJnZXQpKTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXQKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamVjdEdldChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamVjdEdldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXQgcmVxdWlyZXMgdGhlIGZp
cnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpOwogCiAgICAgY29uc3QgSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIHJlY2VpdmVyID0gdGFy
Z2V0OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykKQEAgLTE4OSw5NSArMTg5
LDk1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKIAogICAgIFBy
b3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6R2V0KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0YXJnZXQuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpOworICAgIHJldHVybiB0YXJn
ZXQuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAo
IXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdCIpKTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQo
MSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0
Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0
KSwga2V5KSk7CisgICAgcmV0dXJuIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGV4ZWMsIGFzT2JqZWN0KHRhcmdldCksIGtleSk7CiB9CiAKIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0cHJvdG90eXBlb2YKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0UHJvdG90eXBl
T2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQg
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRo
ZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodGFyZ2V0KS0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRhcmdldCktPmdldFByb3RvdHlwZSh2
bSwgZXhlYyk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJl
ZmxlY3QuaXNleHRlbnNpYmxlCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RJc0V4dGVuc2libGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RJc0V4dGVuc2libGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRh
cmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJl
cXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOworICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5pc0V4
dGVuc2libGUgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKIAog
ICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5zaWJsZSkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihp
c0V4dGVuc2libGUpOwogfQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1yZWZsZWN0Lm93bmtleXMKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amVjdE93bktleXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxl
Y3RPYmplY3RPd25LZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0Lm93bktleXMgcmVxdWlyZXMgdGhlIGZpcnN0
IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0Lm93bktleXMgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywganNDYXN0PEpT
T2JqZWN0Kj4odGFyZ2V0KSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICByZXR1cm4gb3duUHJvcGVydHlL
ZXlzKGV4ZWMsIGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldCksIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKIH0KIAog
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5wcmV2ZW50ZXh0
ZW5zaW9ucwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0UHJldmVu
dEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxl
Y3RPYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFy
Z2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9u
cyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3Qu
cHJldmVudEV4dGVuc2lvbnMgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVj
dCIpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAgICBib29s
IHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmpl
Y3QsIGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihy
ZXN1bHQpOwogfQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZs
ZWN0LnNldAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJSZWZsZWN0LnNldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0
IikpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlJlZmxlY3Quc2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmpl
Y3QiKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldE9iamVjdCA9IGFzT2JqZWN0KHRhcmdldCk7CiAK
ICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXko
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgcmVj
ZWl2ZXIgPSB0YXJnZXQ7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA0KQpAQCAt
Mjg3LDI4ICsyODcsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2Jq
ZQogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxzZTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0YXJnZXRPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBleGVjLT5hcmd1bWVudCgyKSwgc2xvdCkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRhcmdl
dE9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodGFyZ2V0T2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGV4ZWMtPmFyZ3VtZW50KDIpLCBzbG90KSk7CiB9CiAKIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3Quc2V0cHJvdG90eXBlb2YKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdFNldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0UHJvdG90eXBlT2Yo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlJlZmxlY3Quc2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50
IGJlIGFuIG9iamVjdCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LnNldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBm
aXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSk7CiAgICAgSlNWYWx1ZSBwcm90byA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwogICAgIGlmICghcHJvdG8uaXNPYmplY3QoKSAmJiAhcHJvdG8uaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5zZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUg
c2Vjb25kIGFyZ3VtZW50IGJlIGVpdGhlciBhbiBvYmplY3Qgb3IgbnVsbCIpKSk7CisgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0
LnNldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgYmUgZWl0aGVyIGFu
IG9iamVjdCBvciBudWxsIikpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHRh
cmdldCk7CiAKICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAgYm9v
bCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG8s
IHNob3VsZFRocm93SWZDYW50U2V0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihk
aWRTZXRQcm90b3R5cGUpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgIHJldHVybiBqc0Jvb2xlYW4oZGlkU2V0UHJvdG90eXBlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNy0yMDA4LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MzAsMTcgKzMwLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgcmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJv
cGVydHlOYW1lKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBD
b25zdHJ1Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0
b3JJbnB1dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEpTVmFs
dWUgcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKK3N0YXRpYyBKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgSlNWYWx1ZSByZWdFeHBDb25z
dHJ1Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3Rh
dGljIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JSaWdo
dENvbnRleHQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIHRlbXBsYXRlPGlu
dCBOPgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEpTVmFsdWUgcmVn
RXhwQ29uc3RydWN0b3JEb2xsYXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
IAotc3RhdGljIGJvb2wgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotc3RhdGljIGJvb2wgc2V0UmVnRXhwQ29uc3Ry
dWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KTsKK3N0YXRpYyBib29sIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNW
YWx1ZSwgSlNWYWx1ZSk7CitzdGF0aWMgYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGlu
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
QEAgLTE0Niw1NCArMTQ2LDU0IEBAIEpTVmFsdWUgUmVnRXhwQ29uc3RydWN0b3I6OmdldFJpZ2h0
Q29udGUKIH0KIAogdGVtcGxhdGU8aW50IE4+Ci1FbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1
Y3RvckRvbGxhcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KS0+Z2V0QmFja3JlZihleGVjLCBOKSk7CisgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Io
dGhpc1ZhbHVlKS0+Z2V0QmFja3JlZihleGVjLCBOKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgcmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkt
PmlucHV0KCkpOworICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPmlu
cHV0KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5tdWx0aWxp
bmUoKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBDb25zdHJ1Y3Rvcih0aGlzVmFs
dWUpLT5tdWx0aWxpbmUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9y
TGFzdE1hdGNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpLT5nZXRCYWNrcmVmKGV4ZWMsIDApKTsKKyAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3Rv
cih0aGlzVmFsdWUpLT5nZXRCYWNrcmVmKGV4ZWMsIDApOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBy
ZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQ
YXJlbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKS0+Z2V0TGFzdFBhcmVuKGV4ZWMpKTsKKyAgICByZXR1cm4gYXNS
ZWdFeHBDb25zdHJ1Y3Rvcih0aGlzVmFsdWUpLT5nZXRMYXN0UGFyZW4oZXhlYyk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUgcmVnRXhw
Q29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cENv
bnN0cnVjdG9yKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKS0+Z2V0TGVmdENvbnRleHQoZXhl
YykpOworICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHRoaXNWYWx1ZSktPmdldExlZnRD
b250ZXh0KGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0
Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKS0+Z2V0UmlnaHRDb250ZXh0KGV4ZWMpKTsKKyAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1
Y3Rvcih0aGlzVmFsdWUpLT5nZXRSaWdodENvbnRleHQoZXhlYyk7CiB9CiAKLWJvb2wgc2V0UmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitib29sIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5w
dXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwQ29uc3RydWN0
b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpIHsKLSAgICAgICAgY29uc3RydWN0b3It
PnNldElucHV0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9TdHJpbmcoZXhlYykpOwor
ICAgIGlmIChhdXRvIGNvbnN0cnVjdG9yID0ganNEeW5hbWljQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rv
cio+KHRoaXNWYWx1ZSkpIHsKKyAgICAgICAgY29uc3RydWN0b3ItPnNldElucHV0KGV4ZWMsIHZh
bHVlLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgdmFs
dWUpCitib29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKGF1dG8gY29uc3Ry
dWN0b3IgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpKSB7Ci0gICAgICAgIGNvbnN0cnVjdG9yLT5zZXRNdWx0aWxpbmUoSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGlmIChhdXRvIGNvbnN0cnVj
dG9yID0ganNEeW5hbWljQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KHRoaXNWYWx1ZSkpIHsKKyAg
ICAgICAgY29uc3RydWN0b3ItPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk4LDE4
ICsyOTgsMTggQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAg
IHJldHVybiByZWdFeHBDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQsIHBhdHRl
cm5BcmcsIGZsYWdzQXJnKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlc1Nw
ZWNSZWdFeHBDcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVz
U3BlY1JlZ0V4cENyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVl
IHBhdHRlcm5BcmcgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0g
ZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBDcmVh
dGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBqc1VuZGVmaW5lZCgpLCBwYXR0ZXJuQXJnLCBmbGFnc0Fy
ZykpOworICAgIHJldHVybiByZWdFeHBDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBqc1VuZGVm
aW5lZCgpLCBwYXR0ZXJuQXJnLCBmbGFnc0FyZyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhSZWdFeHBD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0UmVnRXhwKGV4ZWMsIGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCksIGFyZ3MsIGV4ZWMt
PmpzQ2FsbGVlKCksIGV4ZWMtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFJl
Z0V4cChleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+anNDYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLCBhcmdzLCBleGVjLT5qc0NhbGxlZSgpLCBleGVjLT5uZXdUYXJnZXQoKSk7CiB9CiAK
IENvbnN0cnVjdFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTMxOCwxMCArMzE4LDEwIEBAIENv
bnN0cnVjdFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENvbnMKICAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZTo6SG9zdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBBcmdMaXN0IGFyZ3MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1
Y3RSZWdFeHAoZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKSwgYXJncywgZXhlYy0+anNDYWxsZWUoKSkpOworICAgIHJldHVybiBjb25zdHJ1
Y3RSZWdFeHAoZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKSwgYXJncywgZXhlYy0+anNDYWxsZWUoKSk7CiB9CiAKIENhbGxUeXBlIFJlZ0V4
cENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTQ1LDYgKzE0NSw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JlZ0V4cChWTSYgdm0s
IEV4ZWMKICAgICByZXR1cm4gb2JqZWN0LT5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjUmVnRXhwQ3JlYXRlKEV4
ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVzU3BlY1JlZ0V4cENyZWF0ZShFeGVj
U3RhdGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LTIw
MDgsIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTMyLDE0ICsxMzIsMTQg
QEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTTwogICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOwogfQogCi1zdGF0aWMgYm9vbCByZWdFeHBPYmplY3RTZXRMYXN0
SW5kZXhTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGJvb2wgcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KS0+c2V0TGFzdEluZGV4KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHRydWUpOworICAg
IHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5zZXRMYXN0SW5kZXgoZXhlYywgdmFs
dWUsIHRydWUpOwogfQogCi1zdGF0aWMgYm9vbCByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIHZhbHVlKQorc3RhdGljIGJvb2wgcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4Tm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKS0+
c2V0TGFzdEluZGV4KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIGZhbHNlKTsKKyAgICBy
ZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+c2V0TGFzdEluZGV4KGV4ZWMsIHZhbHVl
LCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LTIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00NCwxNiArNDQsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY0V4ZWMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckdsb2Jh
bChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvR2V0dGVySWdub3JlQ2FzZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyTXVsdGlsaW5lKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTdGlj
a3koRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0dldHRlclVuaWNvZGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4
ZWMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckdsb2JhbChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNlKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlck11bHRpbGlu
ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9H
ZXR0ZXJTdGlja3koRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvR2V0dGVyVW5pY29kZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyRmxhZ3MoRXhlY1N0YXRlKik7CiAK
IGNvbnN0IENsYXNzSW5mbyBSZWdFeHBQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwUHJvdG90eXBlKSB9Owog
CkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgUmVnRXhwUHJvdG90eXBlOjp2aXNpdENoaWxkcmVuKEpT
Q2UKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0Z1bmNUZXN0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG9GdW5jVGVzdEZhc3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90bwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
Z09yTnVsbChleGVjKTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhc3RyaW5n
KTsKICAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1Zh
bHVlKS0+dGVzdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmluZykpKTsK
KyAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnRlc3QoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJpbmcpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyMywxMiArMTIzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmdPck51bGwoZXhlYyk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXN0cmluZyk7CiAgICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+ZXhlYyhleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmlu
ZykpOworICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzksMTYgKzEzOSwxNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4
Y2VwdGlvbigpID09ICFzdHJpbmcpOwogICAgIGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWFzUmVnRXhw
T2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5nbG9iYWwoKSkgewogICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+ZXhlYyhleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmlu
ZykpOworICAgICAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+ZXhlYyhleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmluZyk7CiAgICAgfQogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KHRo
aXNWYWx1ZSktPm1hdGNoR2xvYmFsKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
c3RyaW5nKSk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPm1hdGNoR2xv
YmFsKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2NywxMiArMTY3LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmVnRXhwID0gYXNS
ZWdFeHBPYmplY3QoYXJnMCktPnJlZ0V4cCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmlu
ZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGFyZzAudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAgaWYgKCFhcmcx
LmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50
b1dURlN0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAg
Y29uc3RydWN0b3IuIikpKTsKICAgICAgICAgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICBhc1JlZ0V4cE9iamVjdCh0aGlz
VmFsdWUpLT5zZXRSZWdFeHAodm0sIHJlZ0V4cCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CisgICAgcmV0dXJuIHRoaXNWYWx1ZTsK
IH0KIAogdHlwZWRlZiBzdGQ6OmFycmF5PGNoYXIsIDUgKyAxPiBGbGFnc1N0cmluZzsgLy8gNSBk
aWZmZXJlbnQgZmxhZ3MgYW5kIGEgbnVsbCBjaGFyYWN0ZXIgdGVybWluYXRvci4KQEAgLTIyNSw3
ICsyMjUsNyBAQCBzdGF0aWMgaW5saW5lIEZsYWdzU3RyaW5nIGZsYWdzU3RyaW5nKEV4CiAgICAg
cmV0dXJuIHN0cmluZzsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtMjM5LDIzICsyMzksMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90bwogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0
KTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5W
YWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJs
eVJldHVyblZhbHVlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1
cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiBlYXJseVJldHVyblZhbHVlOwogCiAgICAgSlNWYWx1
ZSBzb3VyY2VWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
b3VyY2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgU3RyaW5nIHNvdXJj
ZSA9IHNvdXJjZVZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGZsYWdzVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+ZmxhZ3MpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgU3RyaW5nIGZsYWdzID0gZmxhZ3NWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycs
IHNvdXJjZSwgJy8nLCBmbGFncykpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICcvJywgc291cmNlLCAnLycsIGZsYWdzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckdsb2JhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJHbG9iYWwoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMjYzLDE0ICsyNjMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2Jq
ZWN0OjppbmZvKCkpKSkgewogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cFBy
b3RvdHlwZTo6aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJl
Z0V4cC5wcm90b3R5cGUuZ2xvYmFsIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdF
eHAgb2JqZWN0IikpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5nbG9iYWwoKSkpOworICAg
IHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCktPmds
b2JhbCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dl
dHRlcklnbm9yZUNhc2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvR2V0dGVySWdub3JlQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC0yNzgsMTQgKzI3OCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7
CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBlOjppbmZvKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgUmVnRXhwLnByb3RvdHlwZS5p
Z25vcmVDYXNlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Iikp
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzUmVnRXhw
T2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5pZ25vcmVDYXNlKCkpKTsKKyAgICByZXR1cm4g
anNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5pZ25vcmVDYXNl
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVy
TXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0dldHRlck11bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0y
OTMsMTQgKzI5MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoVU5M
SUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7CiAgICAg
ICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgUmVnRXhwLnByb3RvdHlwZS5tdWx0aWxp
bmUgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCktPm11bHRpbGluZSgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVh
bihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdFeHAoKS0+bXVsdGlsaW5lKCkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyU3RpY2t5KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclN0
aWNreShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMDgsMTQgKzMwOCwxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1
ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpKSB7CiAgICAgICAgIGlmICh0aGlzVmFs
dWUuaW5oZXJpdHMoUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJUaGUgUmVnRXhwLnByb3RvdHlwZS5zdGlja3kgZ2V0dGVyIGNhbiBvbmx5
IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiKSk7CiAgICAgfQogICAgIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJl
Z0V4cCgpLT5zdGlja3koKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCktPnN0aWNreSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlclVuaWNvZGUoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyVW5pY29kZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0zMjMsMTQgKzMyMywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50
aGlzVmFsdWUoKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBP
YmplY3Q6OmluZm8oKSkpKSB7CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhw
UHJvdG90eXBlOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUg
UmVnRXhwLnByb3RvdHlwZS51bmljb2RlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBS
ZWdFeHAgb2JqZWN0IikpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdFeHAoKS0+dW5pY29kZSgp
KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5yZWdF
eHAoKS0+dW5pY29kZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0dldHRlckZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0dldHRlckZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
QEAgLTM0MCw5ICszNDAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxs
ZWQgb24gYW4gb2JqZWN0IikpOwogCiAgICAgYXV0byBmbGFncyA9IGZsYWdzU3RyaW5nKGV4ZWMs
IGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBmbGFncy5kYXRhKCkpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTQ1MSw3ICs0NTEsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IHJlc3VsdC50b1N0cmluZygpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0dldHRlclNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtNDU5LDE3ICs0NTksMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaW5oZXJpdHMoUmVnRXhwT2JqZWN0OjppbmZvKCkp
KSkgewogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKFJlZ0V4cFByb3RvdHlwZTo6aW5m
bygpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywg
QVNDSUlMaXRlcmFsKCIoPzopIikpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBBU0NJSUxpdGVyYWwoIig/OikiKSk7CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLnNvdXJjZSBn
ZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCIpKTsKICAgICB9CiAK
ICAgICBTdHJpbmcgcGF0dGVybiA9IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgp
LT5wYXR0ZXJuKCk7CiAgICAgaWYgKHBhdHRlcm4uaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2VJbnRlcm5hbChleGVjLCBwYXR0
ZXJuLCBwYXR0ZXJuLmNoYXJhY3RlcnM4KCksIHBhdHRlcm4ubGVuZ3RoKCkpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoZXhlYywg
cGF0dGVybiwgcGF0dGVybi5jaGFyYWN0ZXJzMTYoKSwgcGF0dGVybi5sZW5ndGgoKSkpOworICAg
ICAgICByZXR1cm4gcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2VJbnRlcm5hbChleGVjLCBwYXR0ZXJu
LCBwYXR0ZXJuLmNoYXJhY3RlcnM4KCksIHBhdHRlcm4ubGVuZ3RoKCkpOworICAgIHJldHVybiBy
ZWdFeHBQcm90b0dldHRlclNvdXJjZUludGVybmFsKGV4ZWMsIHBhdHRlcm4sIHBhdHRlcm4uY2hh
cmFjdGVyczE2KCksIHBhdHRlcm4ubGVuZ3RoKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NlYXJjaEZhc3QoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NlYXJjaEZhc3QoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDc4LDExICs0NzgsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIFN0cmluZyBzID0gc3Ry
aW5nLT52YWx1ZShleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
UmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBzLCAw
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IGpzTnVtYmVyKHJlc3VsdC5z
dGFydCkgOiBqc051bWJlcigtMSkpOworICAgIHJldHVybiByZXN1bHQgPyBqc051bWJlcihyZXN1
bHQuc3RhcnQpIDoganNOdW1iZXIoLTEpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFk
dmFuY2VTdHJpbmdJbmRleChTdHJpbmcgc3RyLCB1bnNpZ25lZCBzdHJTaXplLCB1bnNpZ25lZCBp
bmRleCwgYm9vbCBpc1VuaWNvZGUpCkBAIC01NzMsNyArNTczLDcgQEAgdm9pZCBnZW5lcmljU3Bs
aXQoCiB9CiAKIC8vIEVTIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmlu
ZywgbGltaXQpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1Nw
bGl0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG9GdW5jU3BsaXRGYXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU4Niw3
ICs1ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAg
Ly8gMy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IFMgYmUgPyBUb1N0cmluZyhzdHJpbmcp
LgogICAgIEpTU3RyaW5nKiBpbnB1dFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpOwogICAgIFN0cmluZyBpbnB1dCA9IGlucHV0U3RyaW5nLT52YWx1ZShleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEFTU0VSVCghaW5wdXQuaXNOdWxsKCkp
OwogCiAgICAgLy8gNC4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IEMgYmUgPyBTcGVjaWVz
Q29uc3RydWN0b3IocngsICVSZWdFeHAlKS4KQEAgLTYwMCw3ICs2MDAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgLy8gMTEuIExldCBBIGJlIEFycmF5
Q3JlYXRlKDApLgogICAgIC8vIDEyLiBMZXQgbGVuZ3RoQSBiZSAwLgogICAgIEpTQXJyYXkqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOwogCiAgICAgLy8gMTMu
IElmIGxpbWl0IGlzIHVuZGVmaW5lZCwgbGV0IGxpbSBiZSAyXjMyLTE7IGVsc2UgbGV0IGxpbSBi
ZSA/IFRvVWludDMyKGxpbWl0KS4KQEAgLTYxNSw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAKICAgICAvLyAxNi4gSWYgbGltID09IDAsIHJldHVy
biBBLgogICAgIGlmICghbGltaXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIDE3LiBJZiBzaXplID09IDAs
IHRoZW4KICAgICBpZiAoaW5wdXQuaXNFbXB0eSgpKSB7CkBAIC02MjUsOSArNjI1LDkgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICAvLyBkLiBSZXR1
cm4gQS4KICAgICAgICAgaWYgKCFyZWdleHAtPm1hdGNoKHZtLCBpbnB1dCwgMCkpIHsKICAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgaW5wdXRTdHJpbmcpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICAvLyAxOC4gTGV0IHEgPSBwLgpAQCAtNjUyLDEwICs2NTIsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICAgICAg
ICAgIHJldHVybiBBYm9ydFNwbGl0OwogICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU3BsaXQ7
CiAgICAgICAgIH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAo
cmVzdWx0TGVuZ3RoID49IGxpbWl0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaWYgKHJlc3VsdExlbmd0aCA8IG1h
eFNpemVGb3JEaXJlY3RQYXRoKSB7CiAgICAgICAgIC8vIDIwLiBMZXQgVCBiZSBhIFN0cmluZyB2
YWx1ZSBlcXVhbCB0byB0aGUgc3Vic3RyaW5nIG9mIFMgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVu
dHMgYXQgaW5kaWNlcyBwIChpbmNsdXNpdmUpIHRocm91Z2ggc2l6ZSAoZXhjbHVzaXZlKS4KICAg
ICAgICAgLy8gMjEuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJvcGVydHkoQSwgISBUb1N0cmluZyhs
ZW5ndGhBKSwgVCkuCkBAIC02NjMsNyArNjYzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90bwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJl
c3VsdExlbmd0aCwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBp
bnB1dFN0cmluZywgcG9zaXRpb24sIGlucHV0U2l6ZSAtIHBvc2l0aW9uKSk7CiAgICAgICAgIAog
ICAgICAgICAvLyAyMi4gUmV0dXJuIEEuCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgLy8gTm93
IGRvIGEgZHJ5IHJ1biB0byBzZWUgaG93IGJpZyB0aGluZ3MgZ2V0LiBHaXZlIHVwIGlmIHRoZXkg
Z2V0IGFic3VyZC4KQEAgLTY4Niw3ICs2ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAgICAgCiAgICAgaWYgKHJlc3VsdExlbmd0aCArIGRyeVJ1bkNvdW50
ID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIC8vIE9LLCB3ZSBrbm93IHRoYXQg
aWYgd2UgZmluaXNoIHRoZSBzcGxpdCwgd2Ugd29uJ3QgaGF2ZSB0byBPT00uCkBAIC03MDUsMTcg
KzcwNSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEFib3J0U3BsaXQ7CiAgICAgICAgICAgICByZXR1cm4gQ29udGlu
dWVTcGxpdDsKICAgICAgICAgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIGlmIChyZXN1bHRMZW5ndGggPj0gbGltaXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICAvLyAyMC4g
TGV0IFQgYmUgYSBTdHJpbmcgdmFsdWUgZXF1YWwgdG8gdGhlIHN1YnN0cmluZyBvZiBTIGNvbnNp
c3Rpbmcgb2YgdGhlIGVsZW1lbnRzIGF0IGluZGljZXMgcCAoaW5jbHVzaXZlKSB0aHJvdWdoIHNp
emUgKGV4Y2x1c2l2ZSkuCiAgICAgLy8gMjEuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJvcGVydHko
QSwgISBUb1N0cmluZyhsZW5ndGhBKSwgVCkuCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5nLCBwb3NpdGlvbiwgaW5wdXRT
aXplIC0gcG9zaXRpb24pKTsKICAgICAvLyAyMi4gUmV0dXJuIEEuCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDctMjAwOCwg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTU3LDkgKzU3LDkgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8UmVnRXhw
PiBtX2VtcHR5UmVnRXhwOwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0Z1bmNNYXRjaEZhc3QoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NlYXJjaEZhc3QoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqKTsK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVGVzdEZhc3QoRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jTWF0Y2hGYXN0
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NlYXJj
aEZhc3QoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5j
U3BsaXRGYXN0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY1Rlc3RGYXN0KEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzNCArNDcsMzQgQEAgdm9p
ZCBTZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIAogICAgIHB1dERpcmVjdE5vbklu
ZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNwZWNpZXNTeW1ib2wsIHNwZWNpZXNT
eW1ib2wsIEFjY2Vzc29yIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTZXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RC
ZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJTZXQiKSk7CisgICAgcmV0
dXJuIHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsICJTZXQiKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0U2V0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0U2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+
anNDYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywg
dm0sIHNldFN0cnVjdHVyZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBK
U1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0KTsK
KyAgICAgICAgcmV0dXJuIHNldDsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHNldC0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmFkZCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShhZGRlckZ1bmN0aW9uLCBh
ZGRlckZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChVTkxJS0VMWShhZGRlckZ1bmN0aW9uQ2Fs
bFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgZm9yRWFjaElu
SXRlcmFibGUoZXhlYywgaXRlcmFibGUsIFsmXShWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBuZXh0VmFsdWUpIHsKQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgICAgICBjYWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24sIGFkZGVy
RnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhLCBzZXQsIGFyZ3VtZW50cyk7
CiAgICAgfSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldCk7CisgICAgcmV0dXJu
IHNldDsKIH0KIAogQ29uc3RydWN0VHlwZSBTZXRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2LTIwMTcgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyAr
MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFNldEl0ZXJhdG9yUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJTZXQgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFNldEl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvclByb3RvdHlw
ZUZ1bmNOZXh0KEV4ZWNTdGF0ZSopOwogCiB2b2lkIFNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CkBAIC00
Niw3ICs0Niw3IEBAIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW8KICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJp
bmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIlNldCBJdGVyYXRvciIpLCBEb250RW51bSB8IFJl
YWRPbmx5KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvclBy
b3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU0LDE0ICs1NCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIFNldEl0ZXJhdG9yCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgSlNTZXRJdGVy
YXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTU2V0SXRlcmF0b3IqPihjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
Q2Fubm90IGNhbGwgU2V0SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLVNldEl0ZXJhdG9yIG9iamVj
dCIpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFNldEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1TZXRJ
dGVyYXRvciBvYmplY3QiKSk7CiAKICAgICBpZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCBy
ZXN1bHQpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwg
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxG
cmFtZSwgcmVzdWx0LCBmYWxzZSk7CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFt
ZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3Vs
dE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTUgKzQ3LDE1IEBAIGNvbnN0IENs
YXNzSW5mbyBTZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsKIEBlbmQKICovCiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
RGVsZXRlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c2V0UHJvdG9GdW5jSGFzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jVmFsdWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRW50cmllcyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRkKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVl
cyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
RW50cmllcyhFeGVjU3RhdGUqKTsKIAogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzZXRQcm90b0Z1bmNTaXplKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKEV4ZWNTdGF0ZSopOwogCiB2b2lkIFNldFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewpAQCAtOTMsNzkgKzkzLDc5IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU2V0KiBnZXRTZXQo
Q2FsbEYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBKU1NldCogc2V0
ID0gZ2V0U2V0KGNhbGxGcmFtZSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIXNldCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgc2V0LT5hZGQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CisgICAgcmV0dXJu
IHRoaXNWYWx1ZTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1
bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1NldCogc2V0ID0g
Z2V0U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzZXQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHNldC0+Y2xlYXIoY2FsbEZyYW1lKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0Rl
bGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNTZXQqIHNldCA9IGdl
dFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc2V0KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHNldC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIGpzQm9vbGVhbihzZXQtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNI
YXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9G
dW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXNldCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzZXQtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBq
c0Jvb2xlYW4oc2V0LT5oYXMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jU2l6ZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKHNldC0+c2l6ZShjYWxsRnJhbWUpKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIHJldHVybiBqc051bWJlcihzZXQtPnNpemUoY2FsbEZyYW1lKSk7CiB9
CiAgICAgCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNW
YWx1ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
U2V0KiB0aGlzT2JqID0ganNEeW5hbWljQ2FzdDxKU1NldCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICghdGhpc09iaikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVh
dGUgYSBTZXQgdmFsdWUgaXRlcmF0b3IgZm9yIGEgbm9uLVNldCBvYmplY3QuIikpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1l
LT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhp
c09iaiwgSXRlcmF0ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxs
RnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgYSBTZXQgdmFsdWUgaXRl
cmF0b3IgZm9yIGEgbm9uLVNldCBvYmplY3QuIikpOworICAgIHJldHVybiBKU1NldEl0ZXJhdG9y
OjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0
ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVWYWx1ZSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRW50cmllcyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1NldCogdGhpc09iaiA9
IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAo
IXRoaXNPYmopCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIGEgU2V0IGVudHJ5
IGl0ZXJhdG9yIGZvciBhIG5vbi1TZXQgb2JqZWN0LiIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1NldEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+anNDYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVL
ZXlWYWx1ZSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIGEgU2V0IGVudHJ5IGl0ZXJhdG9yIGZvciBh
IG5vbi1TZXQgb2JqZWN0LiIpKTsKKyAgICByZXR1cm4gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZt
LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVj
dHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5VmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4oZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpKTsKICAgICBKU1NldCogc2V0ID0ganNDYXN0PEpTU2V0Kj4oZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTZXRJdGVyYXRv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5z
ZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBzZXQsIEl0ZXJhdGVLZXkpKTsKKyAgICByZXR1cm4gSlNT
ZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBzZXQsIEl0ZXJhdGVLZXkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY1NldEl0ZXJh
dG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNT
ZXRJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKSk7CiAgICAgSlNTZXRJdGVyYXRvciogaXRl
cmF0b3IgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTE3
Myw5ICsxNzMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jCiAg
ICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGV4ZWMsIHJlc3VsdCkpIHsKICAgICAgICAgSlNBcnJheSog
cmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIHJlc3VsdCk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBl
LmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0
KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0
b3IoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVy
YXRvck5leHQoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDggKzMxLDgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21Db2RlUG9pbnQoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChFeGVjU3RhdGUq
KTsKIAogfQogCkBAIC03NiwxMSArNzYsMTEgQEAgc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVl
IHN0cmluZ0Zyb21DaAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsK
IH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJD
b2RlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
RnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoTElLRUxZKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAxKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJ
bnQzMihleGVjKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nRnJvbUNoYXJD
b2RlU2xvd0Nhc2UoZXhlYykpOworICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYykpOworICAg
IHJldHVybiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShleGVjKTsKIH0KIAogSlNDZWxsKiBK
U0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qg
YXJnKQpAQCAtODgsNyArODgsNyBAQCBKU0NlbGwqIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNo
YXJDb2RlCiAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGFyZyk7CiB9
CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21Db2RlUG9p
bnQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdG
cm9tQ29kZVBvaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTk5LDcgKzk5
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBjb2Rl
UG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICB1aW50
MzJfdCBjb2RlUG9pbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29kZVBvaW50QXNEb3VibGUp
OwogCkBAIC0xMTUsMjMgKzExNSwyMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpCiAgICAgfQogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYnVpbGRlci50b1N0cmluZygpKSk7CisgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhTdHJpbmdDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdp
dGhTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5qc0NhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CisgICAgICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICBKU1N0cmluZyogc3RyID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdP
YmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBzdHIpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCBzdHIpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC0x
NDcsMTEgKzE0NywxMSBAQCBKU0NlbGwqIHN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
CiAgICAgcmV0dXJuIGFyZ3VtZW50LnRvU3RyaW5nKGV4ZWMpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcoZXhlYykpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpKTsKKyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7Cisg
ICAgcmV0dXJuIHN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKIH0KIAogQ2FsbFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2Vs
bCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDgsIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogIENv
cHlyaWdodCAoQykgMjAxNSBKb3JkYW4gSGFyYmFuZCAobGpoYXJiQGdtYWlsLmNvbSkKICAqCkBA
IC01OCw0NCArNTgsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShTdHJpbmdQcm90b3R5cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NvZGVQb2ludEF0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSopOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdS
ZWdFeHAoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUq
KTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5n
KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJD
YXNlKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzZShFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRl
Kik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4
ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKik7Ci1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSop
OwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhl
Y1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xp
bmsoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1RyaW0oRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRlKik7Ci1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0VuZHNXaXRoKEV4ZWNT
dGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmNs
dWRlcyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jTm9ybWFsaXplKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb2RlUG9pbnRBdChFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqKTsK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdS
ZWdFeHAoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKik7CitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKik7CitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZUxvd2Vy
Q2FzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNU
b0xvY2FsZVVwcGVyQ2FzZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0VuZHNXaXRoKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSopOworSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZShFeGVjU3RhdGUqKTsKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqKTsK
IAogfQogCkBAIC00NDEsMTAgKzQ0MSwxMCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGpzU3BsaWNlU3ViCiAjZGVmaW5lIE9VVF9PRl9NRU1PUlkoZXhlY19fLCBzY29wZV9fKSBcCiAg
ICAgZG8geyBcCiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjX18sIHNjb3BlX18p
OyBcCi0gICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOyBcCisgICAgICAgIHJldHVybiB7
IH07IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlLCBSZWdFeHAqIHJlZ0V4cCkK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgc291
cmNlLCBSZWdFeHAqIHJlZ0V4cCkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwpAQCAtNDc3LDE3ICs0NzcsMTcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgcmVtbwogICAgIH0KIAogICAgIGlmICghbGFzdEluZGV4KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN0cmluZyk7CisgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pIHsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFzb3VyY2VSYW5nZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxhc3RJbmRl
eCwgc291cmNlTGVuIC0gbGFzdEluZGV4KSkpCiAgICAgICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4
ZWMsIHNjb3BlKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTcGxpY2VTdWJzdHJpbmdzKGV4ZWMsIHN0cmluZywgc291cmNlLCBzb3Vy
Y2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VSYW5nZXMuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGpzU3Bs
aWNlU3Vic3RyaW5ncyhleGVjLCBzdHJpbmcsIHNvdXJjZSwgc291cmNlUmFuZ2VzLmRhdGEoKSwg
c291cmNlUmFuZ2VzLnNpemUoKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCgKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAogICAgIFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBDYWxsRGF0YSYgY2Fs
bERhdGEsCiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUsIFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewpAQCAtNDk1LDcgKzQ5NSw3IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKIAogICAgIGNvbnN0IFN0cmluZyYgc291cmNl
ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2Uu
bGVuZ3RoKCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBSZWdFeHBPYmpl
Y3QqIHJlZ0V4cE9iamVjdCA9IGFzUmVnRXhwT2JqZWN0KHNlYXJjaFZhbHVlKTsKICAgICBSZWdF
eHAqIHJlZ0V4cCA9IHJlZ0V4cE9iamVjdC0+cmVnRXhwKCk7CiAgICAgYm9vbCBnbG9iYWwgPSBy
ZWdFeHAtPmdsb2JhbCgpOwpAQCAtNTAzLDcgKzUwMyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBpZiAoZ2xvYmFsKSB7CiAgICAgICAgIC8vIEVTNS4x
IDE1LjUuNC4xMCBzdGVwIDguYS4KICAgICAgICAgcmVnRXhwT2JqZWN0LT5zZXRMYXN0SW5kZXgo
ZXhlYywgMCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKQEAgLTUyNyw3ICs1Mjcs
NyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgIGlu
dCBhcmdDb3VudCA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEgKyAyOwogICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jID0ganNDYXN0PEpTRnVuY3Rpb24qPihyZXBsYWNlVmFsdWUpOwogICAg
ICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZnVuYywgYXJnQ291bnQpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhC
aXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpbnQq
IG92ZWN0b3I7CkBAIC01NTUsNyArNTU1LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVkQ2FsbC5j
YWxsKCk7CiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3VsdC50b1dU
RlN0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7
CiAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RJbmRleDsKQEAgLTU5NCw3ICs1
OTQsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
ICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAg
ICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvV1RGU3RyaW5nKGV4ZWMpKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
ICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgICAgICAgICBzdGFy
dFBvc2l0aW9uID0gbGFzdEluZGV4OwpAQCAtNjM0LDExICs2MzQsMTEgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5k
KHN0cmluZyk7CiAKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlcGxhY2VtZW50ID0gY2FsbChl
eGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJn
cyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVu
dC50b1dURlN0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQo
cmVwbGFjZW1lbnRTdHJpbmcpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGxhc3RJbmRleCA8IHJlc3VsdC5zdGFydCB8fCByZXBsTGVuKSB7CkBAIC02NjUsMTQg
KzY2NSwxNCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAg
fQogCiAgICAgaWYgKCFsYXN0SW5kZXggJiYgcmVwbGFjZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmcpOworICAgICAgICByZXR1cm4gc3RyaW5n
OwogCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0SW5kZXgpIDwgc291cmNlTGVu
KSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc291cmNlUmFuZ2VzLnRyeUNvbnN0cnVjdEFuZEFw
cGVuZChsYXN0SW5kZXgsIHNvdXJjZUxlbiAtIGxhc3RJbmRleCkpKQogICAgICAgICAgICAgT1VU
X09GX01FTU9SWShleGVjLCBzY29wZSk7CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3Jz
KGV4ZWMsIHN0cmluZywgc291cmNlLCBzb3VyY2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VSYW5nZXMu
c2l6ZSgpLCByZXBsYWNlbWVudHMuZGF0YSgpLCByZXBsYWNlbWVudHMuc2l6ZSgpKSk7CisgICAg
cmV0dXJuIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKGV4ZWMsIHN0cmluZywgc291
cmNlLCBzb3VyY2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VSYW5nZXMuc2l6ZSgpLCByZXBsYWNlbWVu
dHMuZGF0YSgpLCByZXBsYWNlbWVudHMuc2l6ZSgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIo
CkBAIC02ODgsMTQgKzY4OCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0CiAgICAgICAgIHNlYXJjaFZhbHVlLT5zZXRMYXN0SW5kZXgoZXhlYywgMCk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiByZW1vdmVVc2luZ1JlZ0V4cFNlYXJj
aCh2bSwgZXhlYywgdGhpc1ZhbHVlLCB0aGlzVmFsdWUtPnZhbHVlKGV4ZWMpLCByZWdFeHApOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZt
LCBleGVjLCB0aGlzVmFsdWUsIHRoaXNWYWx1ZS0+dmFsdWUoZXhlYyksIHJlZ0V4cCkpOwogICAg
IH0KIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmlu
ZyA9IGVtcHR5U3RyaW5nKCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiByZXBs
YWNlVXNpbmdSZWdFeHBTZWFyY2goCi0gICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUsIHNlYXJj
aFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCBKU1Zh
bHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVwbGFjZVVzaW5nUmVnRXhwU2Vh
cmNoKAorICAgICAgICB2bSwgZXhlYywgdGhpc1ZhbHVlLCBzZWFyY2hWYWx1ZSwgY2FsbERhdGEs
IENhbGxUeXBlOjpOb25lLCByZXBsYWNlbWVudFN0cmluZywgSlNWYWx1ZSgpKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFj
ZVJlZ0V4cFN0cmluZygKQEAgLTcwNiwxMSArNzA2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3QKICAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBT
dHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlU3RyaW5nLT52YWx1ZShleGVjKTsKLSAg
ICByZXR1cm4gcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAotICAgICAgICB2bSwgZXhlYywgdGhp
c1ZhbHVlLCBzZWFyY2hWYWx1ZSwgY2FsbERhdGEsIENhbGxUeXBlOjpOb25lLCByZXBsYWNlbWVu
dFN0cmluZywgcmVwbGFjZVN0cmluZyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXBs
YWNlVXNpbmdSZWdFeHBTZWFyY2goCisgICAgICAgIHZtLCBleGVjLCB0aGlzVmFsdWUsIHNlYXJj
aFZhbHVlLCBjYWxsRGF0YSwgQ2FsbFR5cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCByZXBs
YWNlU3RyaW5nKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJl
cGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCitzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwg
SlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVwbAogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVw
bGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25l
KSB7CiAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvV1RGU3RyaW5n
KGV4ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAK
ICAgICBzY29wZS5yZWxlYXNlKCk7CkBAIC03MjcsMTggKzcyNywxOCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHNl
YXJjaFZhbHVlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHJlcGxhY2VtZW50U3RyaW5nLCByZXBsYWNl
VmFsdWUpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNl
VXNpbmdTdHJpbmdTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBqc1N0
cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCitzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShl
eGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHNpemVfdCBtYXRj
aFN0YXJ0ID0gc3RyaW5nLmZpbmQoc2VhcmNoU3RyaW5nKTsKIAogICAgIGlmIChtYXRjaFN0YXJ0
ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKTsK
KyAgICAgICAgcmV0dXJuIGpzU3RyaW5nOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsK
QEAgLTc0OCwxMSArNzQ4LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGwKICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobWF0Y2hTdGFydCkpOwogICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZyk7CiAgICAgICAgIHJlcGxhY2VWYWx1ZSA9IGNhbGwoZXhl
YywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3Mp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKICAgICBT
dHJpbmcgcmVwbGFjZVN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1w
bCA9IHN0cmluZy5pbXBsKCk7CiAgICAgU3RyaW5nIGxlZnRQYXJ0KFN0cmluZ0ltcGw6OmNyZWF0
ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpzdHJpbmdJbXBsLCAwLCBtYXRjaFN0YXJ0KSk7CkBAIC03
NjQsNyArNzY0LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAog
ICAgIHNpemVfdCBsZWZ0TGVuZ3RoID0gc3RyaW5nSW1wbC0+bGVuZ3RoKCkgLSBtYXRjaEVuZDsK
ICAgICBTdHJpbmcgcmlnaHRQYXJ0KFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJ
bXBsKCpzdHJpbmdJbXBsLCBtYXRjaEVuZCwgbGVmdExlbmd0aCkpOwogICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNTdHJpbmcoZXhlYywgbGVm
dFBhcnQsIG1pZGRsZVBhcnQsIHJpZ2h0UGFydCkpOworICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
KGV4ZWMsIGxlZnRQYXJ0LCBtaWRkbGVQYXJ0LCByaWdodFBhcnQpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgY2hlY2tPYmplY3RDb2VyY2libGUoSlNWYWx1ZSB0aGlzVmFsdWUpCkBAIC04MDAs
NyArODAwLDcgQEAgc3RhdGljIGlubGluZSBKU1N0cmluZyogcmVwZWF0Q2hhcmFjdGVyKAogICAg
IHJldHVybiBqc1N0cmluZygmZXhlYywgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVyKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBlYXRDaGFy
YWN0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODE4LDcgKzgxOCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpbnQzMl90IHJl
cGVhdENvdW50OwogICAgIGRvdWJsZSB2YWx1ZSA9IHJlcGVhdENvdW50VmFsdWUuYXNOdW1iZXIo
KTsKICAgICBpZiAodmFsdWUgPiBKU1N0cmluZzo6TWF4TGVuZ3RoKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSkpOworICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICByZXBl
YXRDb3VudCA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKTsKICAgICBBU1NFUlQocmVwZWF0
Q291bnQgPj0gMCk7CiAgICAgQVNTRVJUKCFyZXBlYXRDb3VudFZhbHVlLmlzRG91YmxlKCkgfHwg
cmVwZWF0Q291bnRWYWx1ZS5hc0RvdWJsZSgpID09IHJlcGVhdENvdW50KTsKQEAgLTgyOSwxMSAr
ODI5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSB2aWV3WzBdOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBpZiAo
IShjaGFyYWN0ZXIgJiB+MHhmZikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVw
ZWF0Q2hhcmFjdGVyKCpleGVjLCBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyKSwgcmVwZWF0
Q291bnQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlcGVhdENoYXJhY3RlcigqZXhl
YywgY2hhcmFjdGVyLCByZXBlYXRDb3VudCkpOworICAgICAgICByZXR1cm4gcmVwZWF0Q2hhcmFj
dGVyKCpleGVjLCBzdGF0aWNfY2FzdDxMQ2hhcj4oY2hhcmFjdGVyKSwgcmVwZWF0Q291bnQpOwor
ICAgIHJldHVybiByZXBlYXRDaGFyYWN0ZXIoKmV4ZWMsIGNoYXJhY3RlciwgcmVwZWF0Q291bnQp
OwogfQogCi1BTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCitBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgcmVwbGFjZSgKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7
CiAgICAgaWYgKHNlYXJjaFZhbHVlLmluaGVyaXRzKFJlZ0V4cE9iamVjdDo6aW5mbygpKSkKQEAg
LTg0MSw3ICs4NDEsNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAg
ICAgcmV0dXJuIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCh2bSwgZXhlYywgc3RyaW5nLCBzZWFy
Y2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAotQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZXBsYWNlKAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIHJlcGxhY2UoCiAgICAgVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC04NDksMzQgKzg0OSwzNCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1Zh
bHVlIHJlcGxhY2UoCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJp
bmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gcmVwbGFjZSh2
bSwgZXhlYywgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2VVc2luZ1JlZ0V4cChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1N0cmluZyogc3RyaW5nID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXNlYXJjaFZhbHVlLmluaGVyaXRzKFJlZ0V4cE9i
amVjdDo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgcmV0dXJuIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCh2bSwgZXhlYywgc3RyaW5n
LCBzZWFyY2hWYWx1ZSwgZXhlYy0+YXJndW1lbnQoMSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFj
ZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2godm0sIGV4ZWMsIHN0cmluZywgZXhlYy0+
YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKQEAgLTg4OSwxMiArODg5LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3QKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAg
ICAKLSAgICByZXR1cm4gcmVwbGFjZSgKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlcGxh
Y2UoCiAgICAgICAgIHZtLCBleGVjLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSwgSlNWYWx1
ZTo6ZGVjb2RlKHNlYXJjaFZhbHVlKSwKLSAgICAgICAgSlNWYWx1ZTo6ZGVjb2RlKHJlcGxhY2VW
YWx1ZSkpOworICAgICAgICBKU1ZhbHVlOjpkZWNvZGUocmVwbGFjZVZhbHVlKSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MDMsMTUgKzkwMywxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgLy8gQWxzbyB1c2Vk
IGZvciB2YWx1ZU9mLgogCiAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzVmFs
dWU7CiAKICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKFN0cmluZ09iamVjdDo6aW5mbygpKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1N0cmluZ09iamVjdCh0aGlzVmFsdWUp
LT5pbnRlcm5hbFZhbHVlKCkpOworICAgICAgICByZXR1cm4gYXNTdHJpbmdPYmplY3QodGhpc1Zh
bHVlKS0+aW50ZXJuYWxWYWx1ZSgpOwogCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0NoYXJBdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkyMCwy
MyArOTIwLDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoKmV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgU3RyaW5nVmlldyB2aWV3ID0g
dmlld1dpdGhTdHJpbmcudmlldzsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkg
ewogICAgICAgICB1aW50MzJfdCBpID0gYTAuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGkgPCB2
aWV3Lmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyhleGVjLCB2aWV3W2ldKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgICAgICByZXR1cm4ganNTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgdmlld1tpXSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5
U3RyaW5nKGV4ZWMpOwogICAgIH0KICAgICBkb3VibGUgZHBvcyA9IGEwLnRvSW50ZWdlcihleGVj
KTsKICAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCB2aWV3Lmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHZpZXdb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRwb3MpXSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZyhleGVjLCB2aWV3W3N0YXRpY19jYXN0PHVuc2lnbmVkPihkcG9zKV0pOworICAgIHJl
dHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtOTQ1LDE5ICs5NDUsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IGF1dG8gdmlld1dpdGhTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRo
VW5kZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICBTdHJpbmdWaWV3IHZpZXcgPSB2aWV3V2l0aFN0cmluZy52aWV3OwogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewogICAgICAg
ICB1aW50MzJfdCBpID0gYTAuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGkgPCB2aWV3Lmxlbmd0
aCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2aWV3W2ld
KSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CisgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIodmlld1tpXSk7CisgICAgICAgIHJldHVybiBqc05hTigpOwogICAg
IH0KICAgICBkb3VibGUgZHBvcyA9IGEwLnRvSW50ZWdlcihleGVjKTsKICAgICBpZiAoZHBvcyA+
PSAwICYmIGRwb3MgPCB2aWV3Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKHZpZXdbc3RhdGljX2Nhc3Q8aW50PihkcG9zKV0pKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmlld1tz
dGF0aWNfY2FzdDxpbnQ+KGRwb3MpXSk7CisgICAgcmV0dXJuIGpzTmFOKCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgVUNoYXIzMiBjb2RlUG9pbnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTk3MCw3ICs5NzAsNyBAQCBzdGF0aWMg
aW5saW5lIFVDaGFyMzIgY29kZVBvaW50QXQoY29uc3QgCiAgICAgcmV0dXJuIGNoYXJhY3RlcjsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb2RlUG9p
bnRBdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQ29kZVBvaW50QXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTgwLDI3
ICs5ODAsMjcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcg
c3RyaW5nID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAg
ICAgSlNWYWx1ZSBhcmd1bWVudDAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYXJndW1l
bnQwLmlzVUludDMyKCkpIHsKICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBhcmd1bWVudDAu
YXNVSW50MzIoKTsKICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjb2RlUG9pbnRBdChzdHJpbmcsIHBvc2l0
aW9uLCBsZW5ndGgpKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoY29kZVBvaW50QXQoc3RyaW5nLCBw
b3NpdGlvbiwgbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9z
aXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgaWYgKGRvdWJsZVBvc2l0aW9uID49IDAgJiYgZG91YmxlUG9zaXRpb24g
PCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY29kZVBv
aW50QXQoc3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlUG9zaXRpb24pLCBsZW5n
dGgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKGNvZGVQb2ludEF0KHN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRvdWJsZVBvc2l0aW9uKSwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29uY2F0
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmND
b25jYXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTAwOCwxOCArMTAwOCwx
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzU3Ry
aW5nKCkgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgSlNTdHJpbmcq
IHN0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGFzU3RyaW5n
KHRoaXNWYWx1ZSksIHN0cikpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYXNTdHJp
bmcodGhpc1ZhbHVlKSwgc3RyKTsKICAgICB9CiAKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNp
YmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZ0Zyb21Bcmd1bWVudHMoZXhlYywgdGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nRnJvbUFyZ3VtZW50cyhleGVjLCB0aGlzVmFsdWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTAzMiw5ICsxMDMyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgx
KTsKIAogICAgIEpTU3RyaW5nKiB0aGlzSlNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBKU1N0cmluZyogb3RoZXJK
U1N0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICB1bnNpZ25lZCBwb3MgPSAwOwogICAgIGlmICghYTEuaXNVbmRlZmluZWQoKSkg
ewpAQCAtMTA1MywxOSArMTA1MywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgfQogCiAgICAgaWYgKHRoaXNKU1N0cmluZy0+bGVuZ3RoKCkgPCBvdGhl
ckpTU3RyaW5nLT5sZW5ndGgoKSArIHBvcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcigtMSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogCiAgICAgYXV0
byB0aGlzVmlld1dpdGhTdHJpbmcgPSB0aGlzSlNTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBhdXRvIG90
aGVyVmlld1dpdGhTdHJpbmcgPSBvdGhlckpTU3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJp
bmcoKmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2l6ZV90IHJl
c3VsdCA9IHRoaXNWaWV3V2l0aFN0cmluZy52aWV3LmZpbmQob3RoZXJWaWV3V2l0aFN0cmluZy52
aWV3LCBwb3MpOwogICAgIGlmIChyZXN1bHQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHJlc3VsdCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoLTEpOworICAgIHJl
dHVybiBqc051bWJlcihyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0xMDc4LDEwICsxMDc4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAKICAgICBKU1N0cmluZyogdGhpc0pTU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgdW5zaWduZWQgbGVuID0gdGhp
c0pTU3RyaW5nLT5sZW5ndGgoKTsKICAgICBKU1N0cmluZyogb3RoZXJKU1N0cmluZyA9IGEwLnRv
U3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBkb3Vi
bGUgZHBvcyA9IGExLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwogICAgIHVuc2lnbmVkIHN0
YXJ0UG9zaXRpb247CkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZHBvcyk7CiAKICAgICBpZiAobGVuIDwgb3RoZXJKU1N0cmluZy0+bGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKKyAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKC0xKTsKIAogICAgIFN0cmluZyB0aGlzU3RyaW5nID0gdGhpc0pTU3Ry
aW5nLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcgb3RoZXJTdHJpbmcgPSBvdGhlckpTU3RyaW5n
LT52YWx1ZShleGVjKTsKQEAgLTExMDMsMTEgKzExMDMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gdGhpc1N0
cmluZy5yZXZlcnNlRmluZChvdGhlclN0cmluZywgc3RhcnRQb3NpdGlvbik7CiAgICAgaWYgKHJl
c3VsdCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cigtMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0KSk7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcigtMSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2Uo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTExMTYsNyArMTExNiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaW50IGxlbiA9IHMu
bGVuZ3RoKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuID49IDApOwpAQCAtMTEzNCwxMCArMTEz
NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAg
ICAgICBmcm9tID0gMDsKICAgICAgICAgaWYgKHRvID4gbGVuKQogICAgICAgICAgICAgdG8gPSBs
ZW47Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywgcywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pIC0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pKSk7CisgICAgICAgIHJldHVybiBqc1N1YnN0cmlu
ZyhleGVjLCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0bykgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkpOwogICAgIH0KIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIGpz
RW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKIC8vIFJldHVybiB0cnVlIGluIGNhc2Ugb2YgZWFybHkg
cmV0dXJuIChyZXN1bHRMZW5ndGggZ290IHRvIGxpbWl0TGVuZ3RoKS4KQEAgLTExNzQsNyArMTE3
NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgc3BsaXRTdHJpbmdCeU8KIH0KIAogLy8g
RVMgMjEuMS4zLjE3IFN0cmluZy5wcm90b3R5cGUuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZh
c3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTE4NCwxMyArMTE4NCwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgLy8gMy4gTGV0
IFMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBnaXZpbmcgaXQgdGhlIHRoaXMg
dmFsdWUgYXMgaXRzIGFyZ3VtZW50LgogICAgIC8vIDcuIExldCBzIGJlIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBpbiBTLgogICAgIFN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1dURlN0cmlu
ZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEFTU0VSVCghaW5w
dXQuaXNOdWxsKCkpOwogCiAgICAgLy8gNC4gTGV0IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRlZCBh
cyBpZiBieSB0aGUgZXhwcmVzc2lvbiBuZXcgQXJyYXkoKQogICAgIC8vICAgIHdoZXJlIEFycmF5
IGlzIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBjb25zdHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4KICAg
ICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyA1LiBMZXQgbGVuZ3RoQSBiZSAwLgog
ICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CkBAIC0xMjA2LDExICsxMjA2LDExIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndp
c2UgbGV0IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFs
dWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0g
c2VwYXJhdG9yVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIC8vIDEwLiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCiAgICAgaWYgKCFs
aW1pdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogCiAgICAgLy8gMTEuIElmIHNlcGFyYXRvciBpcyB1bmRlZmluZWQsIHRo
ZW4KICAgICBpZiAoc2VwYXJhdG9yVmFsdWUuaXNVbmRlZmluZWQoKSkgewpAQCAtMTIxOCw3ICsx
MjE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
MCwganNTdHJpbmdXaXRoUmV1c2UoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCkpOwogICAgICAgICAv
LyBiLiBSZXR1cm4gQS4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIDEyLiBJZiBzID09IDAsIHRo
ZW4KQEAgLTEyMzEsNyArMTIzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwganNTdHJpbmdXaXRoUmV1c2UoZXhlYywgdGhpc1Zh
bHVlLCBpbnB1dCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvLyBPcHRpbWl6
ZWQgY2FzZSBmb3Igc3BsaXR0aW5nIG9uIHRoZSBlbXB0eSBzdHJpbmcuCkBAIC0xMjQyLDEwICsx
MjQyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAg
ICAgICBkbyB7CiAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHBvc2l0
aW9uLCBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBpbnB1dFtwb3NpdGlvbl0pKTsKLSAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfSB3
aGlsZSAoKytwb3NpdGlvbiA8IGxpbWl0KTsKIAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLy8gMyBj
YXNlczoKQEAgLTEyNjYsMTUgKzEyNjYsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgICAgICBpZiAoc3RyaW5nSW1wbC0+aXM4Qml0KCkpIHsKICAgICAg
ICAgICAgIGlmIChzcGxpdFN0cmluZ0J5T25lQ2hhcmFjdGVySW1wbDxMQ2hhcj4oZXhlYywgcmVz
dWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJpbmdJbXBsLCBzZXBhcmF0b3JDaGFyYWN0ZXIsIHBv
c2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0KSkgewogICAgICAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzcGxpdFN0cmluZ0J5T25lQ2hhcmFjdGVySW1wbDxV
Q2hhcj4oZXhlYywgcmVzdWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJpbmdJbXBsLCBzZXBhcmF0
b3JDaGFyYWN0ZXIsIHBvc2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0KSkgewogICAgICAgICAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyAxMy4gTGV0IHEgPSBwLgogICAgICAgICBzaXplX3Qg
bWF0Y2hQb3NpdGlvbjsKQEAgLTEyODcsMTEgKzEyODcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgICAgLy8gICAgdGhyb3VnaCBxIChleGNs
dXNpdmUpLgogICAgICAgICAgICAgLy8gMi4gQ2FsbCBDcmVhdGVEYXRhUHJvcGVydHkoQSwgVG9T
dHJpbmcobGVuZ3RoQSksIFQpLgogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCByZXN1bHRMZW5ndGgsIGpzU3Vic3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgaW5wdXQsIHBv
c2l0aW9uLCBtYXRjaFBvc2l0aW9uIC0gcG9zaXRpb24pKTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIC8vIDMuIEluY3JlbWVudCBs
ZW5ndGhBIGJ5IDEuCiAgICAgICAgICAgICAvLyA0LiBJZiBsZW5ndGhBID09IGxpbSwgcmV0dXJu
IEEuCiAgICAgICAgICAgICBpZiAoKytyZXN1bHRMZW5ndGggPT0gbGltaXQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKICAgICAgICAgICAgIC8vIDUuIExldCBwID0gZS4KICAgICAgICAgICAg
IC8vIDYuIExldCBxID0gcC4KQEAgLTEzMDYsMTAgKzEzMDYsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgcmVzdWx0TGVuZ3RoKyssIGpzU3Vic3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgaW5wdXQsIHBv
c2l0aW9uLCBpbnB1dC5sZW5ndGgoKSAtIHBvc2l0aW9uKSk7CiAKICAgICAvLyAxNy4gUmV0dXJu
IEEuCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vi
c3RyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNTdWJzdHIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTMyNSw3ICsxMzI1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBs
ZW4gPSBqc1N0cmluZy0+bGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdVN0cmluZyA9
IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CiAgICAgfQogCkBA
IC0xMzM1LDcgKzEzMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGRvdWJsZSBs
ZW5ndGggPSBhMS5pc1VuZGVmaW5lZCgpID8gbGVuIDogYTEudG9JbnRlZ2VyKGV4ZWMpOwogICAg
IGlmIChzdGFydCA+PSBsZW4gfHwgbGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNFbXB0eVN0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKGV4ZWMpOwogICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgc3RhcnQgKz0gbGVuOwog
ICAgICAgICBpZiAoc3RhcnQgPCAwKQpAQCAtMTM0NiwxMSArMTM0NiwxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgdW5zaWduZWQgc3Vic3RyaW5nU3Rh
cnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwogICAgIHVuc2lnbmVkIHN1YnN0cmlu
Z0xlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpOwogICAgIGlmIChqc1N0cmlu
ZykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBqc1N0
cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdWJzdHJpbmcoZXhlYywgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1
YnN0cmluZ0xlbmd0aCkpOworICAgICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhlYywganNTdHJp
bmcsIHN1YnN0cmluZ1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpOworICAgIHJldHVybiBqc1N1YnN0
cmluZyhleGVjLCB1U3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBidWlsdGluU3RyaW5nU3Vic3RySW50ZXJu
YWwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdT
dWJzdHJJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gQHN1YnN0ckludGVybmFs
IHNob3VsZCBub3QgaGF2ZSBhbnkgb2JzZXJ2YWJsZSBzaWRlIGVmZmVjdHMgKGUuZy4gaXQgc2hv
dWxkIG5vdCBjYWxsCiAgICAgLy8gR2V0TWV0aG9kKC4uLiwgQEB0b1ByaW1pdGl2ZSkgb24gdGhl
IHRoaXNWYWx1ZSkuCkBAIC0xMzY0LDcgKzEzNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGJ1aWx0aW5TdHJpCiAgICAgcmV0dXJuIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihleGVj
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJz
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzc0LDcg
KzEzNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5n
KiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTEzODIsNyArMTM4Miw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBSRUxFQVNFX0FTU0VS
VChsZW4gPj0gMCk7CiAKICAgICBkb3VibGUgc3RhcnQgPSBhMC50b051bWJlcihleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGRvdWJsZSBlbmQ7CiAgICAgaWYgKCEo
c3RhcnQgPj0gMCkpIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSB2YWx1ZXMgb3IgTmFOCiAgICAgICAg
IHN0YXJ0ID0gMDsKQEAgLTEzOTIsNyArMTM5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gbGVuOwogICAgIGVsc2UgeyAKICAgICAg
ICAgZW5kID0gYTEudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgICAgICBpZiAoIShlbmQgPj0gMCkpIC8vIGNoZWNrIGZvciBuZWdhdGl2
ZSB2YWx1ZXMgb3IgTmFOCiAgICAgICAgICAgICBlbmQgPSAwOwogICAgICAgICBlbHNlIGlmIChl
bmQgPiBsZW4pCkBAIC0xNDA1LDEwICsxNDA1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICB9CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nU3RhcnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwogICAgIHVuc2lnbmVkIHN1YnN0cmluZ0xlbmd0
aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpIC0gc3Vic3RyaW5nU3RhcnQ7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhleGVjLCBqc1N0cmluZywgc3Vic3RyaW5n
U3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOworICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBq
c1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0MTcsMTYgKzE0MTcsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgY29uc3QgU3RyaW5n
JiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAgICAgU3RyaW5nIGxvd2VyY2FzZWRTdHJpbmcgPSBz
LmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAobG93ZXJjYXNlZFN0
cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
c1ZhbCk7CisgICAgICAgIHJldHVybiBzVmFsOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJD
YXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0MzUsMTYgKzE0MzUsMTYg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgY29uc3QgU3Ry
aW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAgICAgU3RyaW5nIHVwcGVyY2FzZWRTdHJpbmcg
PSBzLmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBpZiAodXBwZXJjYXNl
ZFN0cmluZy5pbXBsKCkgPT0gcy5pbXBsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc1ZhbCk7CisgICAgICAgIHJldHVybiBzVmFsOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHVwcGVyY2FzZWRTdHJpbmcp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXBwZXJjYXNlZFN0cmluZyk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9j
YWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDUzLDE2ICsx
NDUzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dU
RlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNW
YWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cmluZyBzdHIgPSBhMC50b1dURlN0
cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKENvbGxhdG9yKCkuY29s
bGF0ZShzLCBzdHIpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpOwogfQogCiAjaWYg
RU5BQkxFKElOVEwpCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTdGF0
ZSogc3RhdGUsIGludDMyX3QgKCpjb252ZXJ0Q2FzZSkoVUNoYXIqLCBpbnQzMl90LCBjb25zdCBV
Q2hhciosIGludDMyX3QsIGNvbnN0IGNoYXIqLCBVRXJyb3JDb2RlKikpCitzdGF0aWMgSlNWYWx1
ZSB0b0xvY2FsZUNhc2UoRXhlY1N0YXRlKiBzdGF0ZSwgaW50MzJfdCAoKmNvbnZlcnRDYXNlKShV
Q2hhciosIGludDMyX3QsIGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgY29uc3QgY2hhciosIFVFcnJv
ckNvZGUqKSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDc0LDIxICsxNDc0LDIxIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKIAogICAgIC8vIDIuIExldCBTIGJlIFRv
U3RyaW5nKE8pLgogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKHN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGNvbnN0IFN0cmluZyYgcyA9
IHNWYWwtPnZhbHVlKHN0YXRlKTsKIAogICAgIC8vIDMuIFJldHVybklmQWJydXB0KFMpLgotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVt
cHR5IHN0cmluZ3MuCiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHNWYWwpOworICAgICAgICByZXR1cm4gc1ZhbDsKIAogICAgIC8vIDQuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAg
IC8vIDYuIExldCBsZW4gYmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiByZXF1ZXN0ZWRMb2Nh
bGVzLgogICAgIHNpemVfdCBsZW4gPSByZXF1ZXN0ZWRMb2NhbGVzLnNpemUoKTsKQEAgLTE1NDQs
MTcgKzE1NDQsMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjUwog
CiAgICAgLy8gMTguIFJldHVybiBMLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHN0YXRlLCBsb3dlcikpOworICAgIHJldHVybiBqc1N0
cmluZyhzdGF0ZSwgbG93ZXIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvTG9jYWxlTG93ZXJDYXNlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVMb3dlckNhc2UoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICAvLyAxMy4xLjIgU3RyaW5nLnByb3RvdHlwZS50b0xvY2FsZUxvd2Vy
Q2FzZSAoW2xvY2FsZXNdKQogICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL3B1
YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDIuaHRtCiAgICAgcmV0dXJuIHRvTG9jYWxlQ2Fz
ZShzdGF0ZSwgdV9zdHJUb0xvd2VyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNUb0xvY2FsZVVwcGVyQ2FzZShFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9jYWxlVXBwZXJDYXNlKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgLy8gMTMuMS4zIFN0cmluZy5wcm90b3R5cGUudG9Mb2NhbGVV
cHBlckNhc2UgKFtsb2NhbGVzXSkKICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtNDAyLmh0bQpAQCAtMTU2Myw3ICsxNTYzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogfQogI2VuZGlmIC8v
IEVOQUJMRShJTlRMKQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jQmlnKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1NzIsMTIgKzE1
NzIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOworICAgIHJldHVybiBqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICI8YmlnPiIsIHMsICI8L2JpZz4iKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTU4NiwxMiArMTU4NiwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJs
ZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c21hbGw+Iiwg
cywgIjwvc21hbGw+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8c21hbGw+IiwgcywgIjwvc21hbGw+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTE2MDAsMTIgKzE2MDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIp
KTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMs
ICI8L2JsaW5rPiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0JvbGQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTYxNCwx
MiArMTYxNCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAg
ICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKKyAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiPGI+IiwgcywgIjwvYj4iKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTYyOCwxMiArMTYyOCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+IiwgcywgIjwv
dHQ+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+Iiwg
cywgIjwvdHQ+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
NjQyLDEyICsxNjQyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOworICAgIHJldHVybiBqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8aT4iLCBzLCAiPC9pPiIpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2NTYsMTIgKzE2NTYsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN0cmlr
ZT4iLCBzLCAiPC9zdHJpa2U+IikpOworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICI8c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC0xNjcwLDEyICsxNjcwLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdWI+IiwgcywgIjwvc3ViPiIp
KTsKKyAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1Yj4iLCBzLCAi
PC9zdWI+Iik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jU3VwKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNTdXAoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTY4NCwxMiArMTY4
NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYg
KCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9XVEZT
dHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8c3VwPiIsIHMsICI8L3N1cD4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE2OTgsMTcgKzE2OTgsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIGNvbG9yID0gYTAudG9XVEZTdHJpbmcoZXhlYyk7CiAg
ICAgY29sb3IucmVwbGFjZVdpdGhMaXRlcmFsKCciJywgIiZxdW90OyIpOwogCiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0
cmluZyhleGVjLCAiPGZvbnQgY29sb3I9XCIiLCBjb2xvciwgIlwiPiIsIHMsICI8L2ZvbnQ+Iikp
OworICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBjb2xvcj1c
IiIsIGNvbG9yLCAiXCI+IiwgcywgIjwvZm9udD4iKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAKQEAgLTE3MjksNyArMTcyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgYXV0byBpbXBsID0gU3Ry
aW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZmZXJTaXplLCBidWZmZXIpOwogICAg
ICAgICBpZiAoIWltcGwpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGJ1
ZmZlclswXSA9ICc8JzsKICAgICAgICAgYnVmZmVyWzFdID0gJ2YnOwogICAgICAgICBidWZmZXJb
Ml0gPSAnbyc7CkBAIC0xNzUzLDE3ICsxNzUzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgYnVmZmVyWzE5ICsgc3RyaW5nU2l6ZV0gPSAnbic7
CiAgICAgICAgIGJ1ZmZlclsyMCArIHN0cmluZ1NpemVdID0gJ3QnOwogICAgICAgICBidWZmZXJb
MjEgKyBzdHJpbmdTaXplXSA9ICc+JzsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShpbXBsKSkpOworICAgICAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogICAgIH0KIAogICAgIFN0
cmluZyBmb250U2l6ZSA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwogICAgIGZvbnRTaXplLnJlcGxh
Y2VXaXRoTGl0ZXJhbCgnIicsICImcXVvdDsiKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxm
b250IHNpemU9XCIiLCBmb250U2l6ZSwgIlwiPiIsIHMsICI8L2ZvbnQ+IikpOworICAgIHJldHVy
biBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwgZm9udFNpemUs
ICJcIj4iLCBzLCAiPC9mb250PiIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE3NzIsMTcgKzE3NzIsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5n
IGFuY2hvciA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwogICAgIGFuY2hvci5yZXBsYWNlV2l0aExp
dGVyYWwoJyInLCAiJnF1b3Q7Iik7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8YSBuYW1lPVwi
IiwgYW5jaG9yLCAiXCI+IiwgcywgIjwvYT4iKSk7CisgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiLCBhbmNob3IsICJcIj4iLCBzLCAiPC9hPiIpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmso
RXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTc5MSw3ICsxNzkxLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIGxpbmtUZXh0ID0gYTAudG9XVEZTdHJpbmcoZXhl
Yyk7CkBAIC0xODA0LDcgKzE4MDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNpemUsIGJ1ZmZlcik7CiAgICAgaWYgKCFp
bXBsKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBidWZmZXJbMF0gPSAnPCc7CiAgICAgYnVm
ZmVyWzFdID0gJ2EnOwogICAgIGJ1ZmZlclsyXSA9ICcgJzsKQEAgLTE4MjIsNyArMTgyMiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBidWZmZXJbMTIg
KyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICcvJzsKICAgICBidWZmZXJbMTMgKyBsaW5r
VGV4dFNpemUgKyBzdHJpbmdTaXplXSA9ICdhJzsKICAgICBidWZmZXJbMTQgKyBsaW5rVGV4dFNp
emUgKyBzdHJpbmdTaXplXSA9ICc+JzsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKSk7CisgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogZW51bSB7CkBAIC0xODU5LDIy
ICsxODU5LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3RyLnN1YnN0cmluZ1NoYXJpbmdJbXBsKGxlZnQsIHJp
Z2h0IC0gbGVmdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0cmltU3Ry
aW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQgfCBUcmltUmlnaHQpKTsKKyAgICByZXR1cm4g
dHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1MZWZ0IHwgVHJpbVJpZ2h0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxl
ZnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0cmltU3RyaW5nKGV4ZWMsIHRo
aXNWYWx1ZSwgVHJpbUxlZnQpKTsKKyAgICByZXR1cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFs
dWUsIFRyaW1MZWZ0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltUmlnaHQpKTsKKyAgICByZXR1cm4g
dHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1SaWdodCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQoZG91YmxlIHZhbHVlLCB1bnNp
Z25lZCBtaW4sIHVuc2lnbmVkIG1heCkKQEAgLTE4ODYsNyArMTg4Niw3IEBAIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgY2xhbXBBbmRUcnVuY2F0ZVQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdGFydHNXaXRoKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE4OTYsMTYgKzE4OTYsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBhMCA9
IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVn
RXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBp
ZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fu
bm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9XVEZT
dHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFs
dWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICB1bnNpZ25lZCBzdGFydCA9
IDA7CkBAIC0xOTE0LDEzICsxOTE0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
VG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9V
bnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uaGFzSW5maXhTdGFydGluZ0F0
KHNlYXJjaFN0cmluZywgc3RhcnQpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihzdHJpbmdUb1Nl
YXJjaEluLmhhc0luZml4U3RhcnRpbmdBdChzZWFyY2hTdHJpbmcsIHN0YXJ0KSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0VuZHNXaXRo
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE5MzAsMTYgKzE5MzAsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFy
Y2hJbiA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJv
b2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmVuZHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaElu
Lmxlbmd0aCgpOwogCkBAIC0xOTQ5LDEzICsxOTQ5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9zaXRp
b25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRlZmlu
ZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQb3Np
dGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uaGFzSW5maXhFbmRpbmdBdChzZWFyY2hTdHJpbmcs
IHN0ZDo6bWluKGVuZCwgbGVuZ3RoKSkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHN0cmluZ1Rv
U2VhcmNoSW4uaGFzSW5maXhFbmRpbmdBdChzZWFyY2hTdHJpbmcsIHN0ZDo6bWluKGVuZCwgbGVu
Z3RoKSkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdJ
bmNsdWRlc0ltcGwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZyBzdHJpbmdUb1NlYXJj
aEluLCBTdHJpbmcgc2VhcmNoU3RyaW5nLCBKU1ZhbHVlIHBvc2l0aW9uQXJnKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdJbmNsdWRlc0ltcGwoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluLCBTdHJpbmcgc2VhcmNoU3RyaW5nLCBKU1Zh
bHVlIHBvc2l0aW9uQXJnKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICB1bnNpZ25lZCBzdGFydCA9IDA7CkBAIC0xOTY0LDEzICsxOTY0LDEzIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKICAgICBlbHNlIHsKICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAg
c3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIo
ZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHN0cmluZ1Rv
U2VhcmNoSW4uY29udGFpbnMoc2VhcmNoU3RyaW5nLCB0cnVlLCBzdGFydCkpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uY29udGFpbnMoc2VhcmNoU3RyaW5nLCB0cnVl
LCBzdGFydCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNJbmNsdWRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0x
OTgwLDE2ICsxOTgwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2bSwg
ZXhlYywgYTApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKGlzUmVn
dWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyBjYW5ub3QgYmUgYSBS
ZWdFeHAiKTsKIAogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1dURlN0cmluZyhleGVj
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlv
bkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCkBAIC0xOTk3LDcgKzE5OTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgcmV0dXJuIHN0cmluZ0luY2x1
ZGVzSW1wbCh2bSwgZXhlYywgc3RyaW5nVG9TZWFyY2hJbiwgc2VhcmNoU3RyaW5nLCBwb3NpdGlv
bkFyZyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ0lu
Y2x1ZGVzSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1
aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTIwMDYsMTEgKzIwMDYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBi
dWlsdGluU3RyaQogICAgIEFTU0VSVChjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKTsK
IAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIGEwID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEw
LnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKQEAgLTIwMTgsNyAr
MjAxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmkKICAgICBy
ZXR1cm4gc3RyaW5nSW5jbHVkZXNJbXBsKHZtLCBleGVjLCBzdHJpbmdUb1NlYXJjaEluLCBzZWFy
Y2hTdHJpbmcsIHBvc2l0aW9uQXJnKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtMjAyNyw4ICsyMDI3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3Ry
aW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1N0cmluZ0l0ZXJhdG9yOjpjcmVhdGUoZXhlYywgZXhlYy0+anNDYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCktPnN0cmluZ0l0ZXJhdG9yU3RydWN0dXJlKCksIHN0cmluZykpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTU3RyaW5nSXRlcmF0
b3I6OmNyZWF0ZShleGVjLCBleGVjLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c3RyaW5n
SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgc3RyaW5nKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9ybWFs
aXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxl
bmd0aCwgVU5vcm1hbGl6YXRpb25Nb2RlIGZvcm0pCkBAIC0yMDU5LDcgKzIwNTksNyBAQCBzdGF0
aWMgSlNWYWx1ZSBub3JtYWxpemUoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIFdURk1vdmUoaW1wbCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTIwNjgsMTQgKzIwNjgsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVl
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIGF1
dG8gdmlld1dpdGhTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXdXaXRoVW5k
ZXJseWluZ1N0cmluZygqZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBTdHJpbmdWaWV3IHZpZXcgPSB2aWV3V2l0aFN0cmluZy52aWV3OwogCiAgICAgVU5vcm1hbGl6
YXRpb25Nb2RlIGZvcm0gPSBVTk9STV9ORkM7CiAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGFyZ3Vt
ZW50IGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdW5kZWZpbmVkLgogICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBTdHJpbmcgZm9ybVN0cmluZyA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICBpZiAoZm9ybVN0cmluZyA9PSAi
TkZDIikKICAgICAgICAgICAgIGZvcm0gPSBVTk9STV9ORkM7CkBAIC0yMDkwLDcgKzIwOTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgfQogCiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobm9ybWFsaXplKGV4
ZWMsIHZpZXcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIHZpZXcubGVuZ3RoKCksIGZvcm0pKTsK
KyAgICByZXR1cm4gbm9ybWFsaXplKGV4ZWMsIHZpZXcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCks
IHZpZXcubGVuZ3RoKCksIGZvcm0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02MSwxMCAr
NjEsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdAogCiBTdHJp
bmcgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIFN0
cmluZ1ZpZXcgc291cmNlLCBjb25zdCBpbnQqIG92ZWN0b3IsIFJlZ0V4cCogcmVnKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBlYXRDaGFyYWN0ZXIo
RXhlY1N0YXRlKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1NwbGl0RmFzdChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNSZXBlYXRDaGFyYWN0ZXIoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0KEV4ZWNTdGF0ZSopOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdTdWJzdHJJbnRlcm5hbChFeGVjU3RhdGUqKTsKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ0luY2x1ZGVzSW50ZXJuYWwo
RXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ1N1YnN0cklu
dGVybmFsKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJ
bmNsdWRlc0ludGVybmFsKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNiw4ICszNiw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
eW1ib2xDb25zdHJ1Y3RvckZvcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yS2V5Rm9yKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdHJ1Y3RvckZvcihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sQ29uc3RydWN0b3JLZXlGb3IoRXhl
Y1N0YXRlKik7CiAKIH0KIApAQCAtNzUsMTIgKzc1LDEyIEBAIHZvaWQgU3ltYm9sQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKFYKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTeW1ib2woRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgZGVzY3JpcHRpb24gPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoZGVzY3Jp
cHRpb24uaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTeW1i
b2w6OmNyZWF0ZShleGVjLT52bSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTeW1i
b2w6OmNyZWF0ZShleGVjLCBkZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKSkpOworICAgICAgICBy
ZXR1cm4gU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIFN5bWJvbDo6Y3Jl
YXRlKGV4ZWMsIGRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogQ29uc3RydWN0VHlw
ZSBTeW1ib2xDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJikKQEAgLTk0LDM2ICs5NCwzNiBAQCBDYWxsVHlwZSBTeW1ib2xDb25zdHJ1Y3Rvcjo6Z2V0
Q2FsbERhdGEoCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdHJ1Y3RvckZvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nS2V5ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1ZShleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTeW1ib2w6OmNy
ZWF0ZShleGVjLT52bSgpLCBleGVjLT52bSgpLnN5bWJvbFJlZ2lzdHJ5KCkuc3ltYm9sRm9yS2V5
KHN0cmluZykpKTsKKyAgICByZXR1cm4gU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJpbmcpKTsKIH0KIAogY29uc3Qg
Y2hhciogY29uc3QgU3ltYm9sS2V5Rm9yVHlwZUVycm9yID0gIlN5bWJvbC5rZXlGb3IgcmVxdWly
ZXMgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBzeW1ib2wiOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yS2V5Rm9yKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25zdHJ1Y3RvcktleUZvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHN5bWJvbFZhbHVlID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgaWYgKCFzeW1ib2xWYWx1ZS5pc1N5bWJvbCgpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoU3ltYm9sS2V5Rm9yVHlwZUVycm9yKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbChTeW1ib2xLZXlGb3JUeXBlRXJyb3IpKTsK
IAogICAgIFN5bWJvbEltcGwmIHVpZCA9IGFzU3ltYm9sKHN5bWJvbFZhbHVlKS0+cHJpdmF0ZU5h
bWUoKS51aWQoKTsKICAgICBpZiAoIXVpZC5zeW1ib2xSZWdpc3RyeSgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIEFTU0VSVCh1aWQuc3ltYm9sUmVnaXN0cnkoKSA9PSAmdm0uc3ltYm9s
UmVnaXN0cnkoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB2
bS5zeW1ib2xSZWdpc3RyeSgpLmtleUZvclN5bWJvbCh1aWQpKSk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIHZtLnN5bWJvbFJlZ2lzdHJ5KCkua2V5Rm9yU3ltYm9sKHVpZCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1
c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1ZhbHVlT2Yo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1i
b2xQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTcwLDcgKzcwLDcgQEAg
dm9pZCBTeW1ib2xQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJgogc3RhdGljIGNvbnN0IGNo
YXIqIFN5bWJvbFRvU3RyaW5nVHlwZUVycm9yID0gIlN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcg
cmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYSBzeW1ib2wgb3IgYSBzeW1ib2wgb2JqZWN0IjsKIHN0
YXRpYyBjb25zdCBjaGFyKiBTeW1ib2xWYWx1ZU9mVHlwZUVycm9yID0gIlN5bWJvbC5wcm90b3R5
cGUudmFsdWVPZiByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhIHN5bWJvbCBvciBhIHN5bWJvbCBv
YmplY3QiOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04OCwxNyAr
ODgsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xQcm90bwogICAgICAg
ICBzeW1ib2wgPSBhc1N5bWJvbChqc0Nhc3Q8U3ltYm9sT2JqZWN0Kj4odGhpc09iamVjdCktPmlu
dGVybmFsVmFsdWUoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgc3ltYm9sLT5kZXNjcmlwdGl2ZVN0cmluZygpKSk7CisgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBzeW1ib2wtPmRlc2NyaXB0aXZlU3RyaW5n
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbFByb3Rv
RnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzU3lt
Ym9sKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXNWYWx1ZTsKIAogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTeW1ib2xWYWx1ZU9m
VHlwZUVycm9yKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN5bWJvbFByb3RvCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pbmhlcml0cyhTeW1ib2xPYmpl
Y3Q6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBTeW1ib2xWYWx1ZU9mVHlwZUVycm9yKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNDYXN0PFN5bWJvbE9iamVjdCo+KHRoaXNPYmplY3QpLT5pbnRlcm5hbFZhbHVlKCkpOworICAg
IHJldHVybiBqc0Nhc3Q8U3ltYm9sT2JqZWN0Kj4odGhpc09iamVjdCktPmludGVybmFsVmFsdWUo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwzMyArNDUsMzMgQEAgdm9pZCBXZWFr
TWFwQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RW51
bSB8IFJlYWRPbmx5KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFdlYWtNYXAoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsV2Vha01hcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2Vha01hcCIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25z
dHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldl
YWtNYXAiKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0V2Vha01hcChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdFdlYWtNYXAoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5q
c0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrTWFwU3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhl
Yy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgpKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vh
a01hcDo6Y3JlYXRlKGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFi
bGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrTWFwKTsKKyAgICAgICAg
cmV0dXJuIHdlYWtNYXA7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5K
U09iamVjdDo6Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNldCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShhZGRlckZ1
bmN0aW9uLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChhZGRlckZ1bmN0aW9uQ2Fs
bFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBmb3JFYWNoSW5J
dGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIG5leHRJdGVtKSB7CkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgY2FsbChleGVjLCBhZGRlckZ1bmN0aW9uLCBhZGRl
ckZ1bmN0aW9uQ2FsbFR5cGUsIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSwgd2Vha01hcCwgYXJndW1l
bnRzKTsKICAgICB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7Cisg
ICAgcmV0dXJuIHdlYWtNYXA7CiB9CiAKIENvbnN0cnVjdFR5cGUgV2Vha01hcENvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYtMjAxNyBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCwxMCArMzQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBXZWFrTWFw
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWFrTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShXZWFrTWFwUHJvdG90eXBlKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEdldChFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dl
YWtNYXBIYXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcm90b0Z1bmNXZWFrTWFwU2V0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwR2V0KEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwSGFzKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwU2V0KEV4ZWNTdGF0
ZSopOwogCiB2b2lkIFdlYWtNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKQEAgLTcwLDM2ICs3MCwzNiBAQCBzdGF0aWMg
V2Vha01hcERhdGEqIGdldFdlYWtNYXBEYXRhKENhbGxGCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcERlbGV0ZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFr
TWFwRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFdlYWtNYXBEYXRhKiBtYXAg
PSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAg
IGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
a2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5yZW1vdmUoYXNPYmplY3Qoa2V5KSkpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKGtleS5pc09iamVjdCgpICYmIG1hcC0+cmVtb3ZlKGFzT2JqZWN0KGtleSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwR2V0
KENhbGxGcmFtZSogY2FsbEZyYW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dl
YWtNYXBHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgV2Vha01hcERhdGEqIG1hcCA9
IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAg
aWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWtleS5pc09iamVjdCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobWFwLT5nZXQoYXNPYmplY3Qoa2V5KSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICByZXR1cm4gbWFwLT5nZXQoYXNPYmplY3Qoa2V5KSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEhhcyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwSGFzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewogICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYg
bWFwLT5jb250YWlucyhhc09iamVjdChrZXkpKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oa2V5
LmlzT2JqZWN0KCkgJiYgbWFwLT5jb250YWlucyhhc09iamVjdChrZXkpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcFNldChDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwU2V0KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMDcsMTIgKzEwNywxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlCiAgICAgV2Vha01hcERh
dGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIW1hcCk7CiAgICAgaWYgKCFt
YXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIWtleS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIFdURjo6QVNDSUlM
aXRlcmFsKCJBdHRlbXB0ZWQgdG8gc2V0IGEgbm9uLW9iamVjdCBrZXkgaW4gYSBXZWFrTWFwIikp
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIFdURjo6
QVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8gc2V0IGEgbm9uLW9iamVjdCBrZXkgaW4gYSBXZWFr
TWFwIikpOwogICAgIG1hcC0+c2V0KHZtLCBhc09iamVjdChrZXkpLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIHJldHVybiBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDMzICs0NSwz
MyBAQCB2b2lkIFdlYWtTZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIERvbnRFbnVtIHwgUmVhZE9ubHkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsV2Vha1NldChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWFrU2V0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNh
bGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJXZWFrU2V0IikpOworICAgIHJl
dHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCAiV2Vha1NldCIpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RXZWFrU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2Vha1NldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmpzQ2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUq
IHdlYWtTZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrU2V0U3RydWN0
dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgSlNXZWFrU2V0KiB3
ZWFrU2V0ID0gSlNXZWFrU2V0OjpjcmVhdGUoZXhlYywgd2Vha1NldFN0cnVjdHVyZSk7CiAgICAg
SlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtT
ZXQpOworICAgICAgICByZXR1cm4gd2Vha1NldDsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlv
biA9IHdlYWtTZXQtPkpTT2JqZWN0OjpnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+YWRkKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYgKGFk
ZGVyRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgbmV4dFZhbHVlKSB7CkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgY2FsbChleGVjLCBhZGRlckZ1
bmN0aW9uLCBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUsIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSwgd2Vh
a1NldCwgYXJndW1lbnRzKTsKICAgICB9KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
d2Vha1NldCk7CisgICAgcmV0dXJuIHdlYWtTZXQ7CiB9CiAKIENvbnN0cnVjdFR5cGUgV2Vha1Nl
dENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBXZWFr
U2V0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWFrU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShXZWFrU2V0UHJvdG90eXBlKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhhcyhF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVu
Y1dlYWtTZXRBZGQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBy
b3RvRnVuY1dlYWtTZXREZWxldGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3RvRnVuY1dlYWtTZXRIYXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRBZGQoRXhlY1N0YXRlKik7CiAKIHZvaWQgV2Vh
a1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewpAQCAtNjgsMjUgKzY4LDI1IEBAIHN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0
V2Vha01hcERhdGEoQ2FsbEYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKENhbGxGcmFtZSogY2FsbEZy
YW1lKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxldGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRh
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAm
JiBtYXAtPnJlbW92ZShhc09iamVjdChrZXkpKSkpOworICAgIHJldHVybiBqc0Jvb2xlYW4oa2V5
LmlzT2JqZWN0KCkgJiYgbWFwLT5yZW1vdmUoYXNPYmplY3Qoa2V5KSkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRIYXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhhcyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGtleS5pc09iamVjdCgpICYm
IG1hcC0+Y29udGFpbnMoYXNPYmplY3Qoa2V5KSkpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGtl
eS5pc09iamVjdCgpICYmIG1hcC0+Y29udGFpbnMoYXNPYmplY3Qoa2V5KSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRBZGQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTQsMTIgKzk0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2UKICAgICBXZWFrTWFwRGF0
YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKICAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsKICAgICBpZiAoIW1h
cCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGlmICgha2V5LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxp
dGVyYWwoIkF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQiKSkp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpB
U0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtT
ZXQiKSk7CiAgICAgbWFwLT5zZXQodm0sIGFzT2JqZWN0KGtleSksIGpzVW5kZWZpbmVkKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAg
cmV0dXJuIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDE1ICs2MSwxNSBAQCB2b2lkIEpTRG9s
bGFyVk1Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uKFZNCiAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlm
aWVyLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgYXJndW1lbnRzLCBpZGVu
dGlmaWVyLnN0cmluZygpLCBmdW5jdGlvbikpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyYXNoKEV4ZWNTdGF0ZSopCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3Jhc2goRXhlY1N0YXRlKikKIHsKICAgICBDUkFTSCgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25ERkdU
cnVlKEV4ZWNTdGF0ZSopCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uREZH
VHJ1ZShFeGVjU3RhdGUqKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiB9CiAKIGNsYXNzIENhbGxl
ckZyYW1lSklUVHlwZUZ1bmN0b3IgewpAQCAtOTYsMjIgKzk2LDIyIEBAIHByaXZhdGU6CiAgICAg
bXV0YWJsZSBKSVRDb2RlOjpKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTExpbnRUcnVlKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25MTGludFRydWUoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGlmICghZXhlYykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQ2Fs
bGVyRnJhbWVKSVRUeXBlRnVuY3RvciBmdW5jdG9yOwogICAgIGV4ZWMtPml0ZXJhdGUoZnVuY3Rv
cik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZnVuY3Rvci5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOworICAgIHJldHVybiBqc0Jvb2xlYW4o
ZnVuY3Rvci5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSklUVHJ1ZShFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSklUVHJ1ZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFleGVjKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBDYWxsZXJGcmFtZUpJVFR5cGVGdW5jdG9yIGZ1bmN0b3I7CiAgICAgZXhlYy0+aXRlcmF0
ZShmdW5jdG9yKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmdW5jdG9y
LmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkpOworICAgIHJldHVybiBqc0Jvb2xl
YW4oZnVuY3Rvci5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogfQogCiB2b2lk
IEpTRG9sbGFyVk1Qcm90b3R5cGU6OmdjKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEyMSwxMCArMTIx
LDEwIEBAIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MoRXhlY1N0YXRlKiAKICAgICBleGVj
LT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAgICAgCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNEb2xsYXJWTVByb3RvdHlwZTo6Z2MoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogdm9pZCBK
U0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTM0LDEwICsx
MzQsMTAgQEAgdm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjplZGVuR0MoRXhlY1N0YQogICAgIGV4
ZWMtPmhlYXAoKS0+Y29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNEb2xsYXJWTVByb3RvdHlwZTo6ZWRlbkdDKGV4ZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKIGJvb2wgSlNEb2xsYXJWTVByb3RvdHlwZTo6aXNJbkhlYXAoSGVh
cCogaGVhcCwgdm9pZCogcHRyKQpAQCAtMjU0LDE0ICsyNTQsMTQgQEAgQ29kZUJsb2NrKiBKU0Rv
bGxhclZNUHJvdG90eXBlOjpjb2RlQmxvYwogICAgIHJldHVybiBmdW5jdG9yLmNvZGVCbG9jazsK
IH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxv
Y2tGb3JGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ29kZUJsb2NrRm9yRnJhbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBpZiAoIXZhbHVl
LmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gV2UgbmVlZCB0byBp
bmMgdGhlIGZyYW1lIG51bWJlciBiZWNhdXNlIHRoZSBjYWxsZXIgd291bGQgY29uc2lkZXIKICAg
ICAvLyBpdHMgb3duIGZyYW1lIGFzIGZyYW1lIDAuIEhlbmNlLCB3ZSBuZWVkIGRpc2NvdW50IHRo
ZSBmcmFtZSBmb3IgdGhpcwpAQCAtMjcxLDcgKzI3MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAvLyBUaG91Z2ggQ29kZUJsb2NrIGlzIGEgSlNDZWxs
LCBpdCBpcyBub3Qgc2FmZSB0byByZXR1cm4gaXQgZGlyZWN0bHkgYmFjayB0byBKUyBjb2RlCiAg
ICAgLy8gYXMgaXQgaXMgYW4gaW50ZXJuYWwgdHlwZSB0aGF0IHRoZSBKUyBjb2RlIGNhbm5vdCBo
YW5kbGUuIEhlbmNlLCB3ZSBmaXJzdCBlbmNvZGUgdGhlCiAgICAgLy8gQ29kZUJsb2NrKiBhcyBh
IGRvdWJsZSB0b2tlbiAod2hpY2ggaXMgc2FmZSBmb3IgSlMgY29kZSB0byBoYW5kbGUpIGJlZm9y
ZSByZXR1cm5pbmcgaXQuCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJpdHdp
c2VfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oY29kZUJsb2NrKSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUoYml0d2lzZV9jYXN0
PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2spKSkpOwogfQogCiBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2tGcm9tQXJn
KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTMwNiw0MiArMzA2LDQyIEBAIHN0YXRpYyBDb2RlQmxvY2sq
IGNvZGVCbG9ja0Zyb21BcmcoRXhlY1MKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Db2RlQmxvY2tGb3IoRXhlY1N0
YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9j
a0ZvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2Rl
QmxvY2tGcm9tQXJnKGV4ZWMpOwogICAgIFdURjo6U3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOwog
ICAgIGlmIChjb2RlQmxvY2spIHsKICAgICAgICAgc3RyZWFtLnByaW50KCpjb2RlQmxvY2spOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0
cmluZygpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHJlYW0udG9TdHJpbmco
KSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTb3VyY2VGb3IoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U291cmNlRm9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhl
Yyk7CiAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgY29kZUJsb2NrLT5kdW1wU291cmNlKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludEJ5dGVDb2RlRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludEJ5dGVDb2RlRm9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja0Zyb21BcmcoZXhlYyk7CiAg
ICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgY29kZUJsb2NrLT5kdW1wQnl0ZWNvZGUoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBhcmdTdHIgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1dURlN0cmluZyhleGVjKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGRhdGFMb2coYXJnU3RyKTsKICAg
ICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAogY2xhc3MgUHJpbnRGcmFtZUZ1bmN0b3IgewpAQCAtNDA0
LDIwICs0MDQsMjAgQEAgdm9pZCBKU0RvbGxhclZNUHJvdG90eXBlOjpwcmludFN0YWNrKENhbAog
ICAgIEpTQzo6cHJpbnRTdGFjayh0b3BDYWxsRnJhbWUsIDApOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50Q2FsbEZyYW1lKEV4ZWNTdGF0ZSog
ZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludENhbGxGcmFt
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMg
ZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGluZyB0byBwcmludCB0aGVpcgogICAgIC8vIG93biBm
cmFtZS4gU28gc2tpcCAxIGZvciB0aGlzIGZyYW1lLgogICAgIHByaW50Q2FsbEZyYW1lKGV4ZWMs
IDEpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUHJpbnRTdGFjayhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGFjayhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Ly8gV2hlbiB0aGUgY2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGlu
ZyB0byBwcmludCB0aGUKICAgICAvLyBzdGFjayBzdGFydGluZyB0aGVpciBvd24gZnJhbWUuIFNv
IHNraXAgMSBmb3IgdGhpcyBmcmFtZS4KICAgICBwcmludFN0YWNrKGV4ZWMsIDEpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6cHJpbnRWYWx1ZShKU1ZhbHVl
IHZhbHVlKQpAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgSlNEb2xsYXJWTVByb3RvdHlwZTo6cHJp
bnRWYWx1ZShKU1YKICAgICBkYXRhTG9nKHZhbHVlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmFsdWUoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFdURjo6U3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtNDM0LDEzICs0MzQsMTMg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICBzdHJl
YW0ucHJpbnQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0cmVhbS50b1N0cmluZygpKTsKIH0KIAogI2lm
ICFQTEFURk9STShXSU4pCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdldFBJRChFeGVjU3RhdGUqKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdldFBJRChFeGVjU3RhdGUqKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoZ2V0cGlkKCkpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZ2V0cGlkKCkpOwogfQogI2Vu
ZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHku
Y3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dl
YkFzc2VtYmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxNiArNDAsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1dlYkFzc2Vt
Ymx5KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRl
RnVuYyhFeGVjU3RhdGUqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlDb21waWxlRnVuYyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSopOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIGF1dG8gY2F0Y2hTY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0cnVs
eSBhc3luY2hyb25vdXM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjAxNgpAQCAtNTcsMTQgKzU5LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHkKICAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNj
b3BlLmV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAgICAgICAgcmV0dXJuIHBy
b21pc2UtPnByb21pc2UoKTsKICAgICB9CiAKICAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIG1v
ZHVsZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwor
ICAgIHJldHVybiBwcm9taXNlLT5wcm9taXNlKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTcyLDExICs3NCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgc2l6ZV90IGJ5dGVPZmZzZXQ7CiAgICAgc2l6ZV90IGJ5
dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9m
ZnNldCwgYnl0ZVNpemUpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFu
IE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00u
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSgpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5OjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
ZWJBc3NlbWJseSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwy
MSArNDQsMjEgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQwogIEBl
bmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBzdGF0
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRl
cm5hbEZ1bmN0aW9uKHN0YXRlLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJB
c3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdl
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNz
YWdlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNh
bm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IiKTsKIH0KIAogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rv
ciogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlKiB0aGlz
UHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDEzICs0NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFdl
YkFzc2VtYmx5RnVuY3Rpb246OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RnVuY3Rpb24iLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RnVuY3Rp
b24pIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3Nl
bWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwogICAgIGlmICghd2FzbUZ1
bmN0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVkIGEgV2ViQXNzZW1ibHkg
ZnVuY3Rpb24iLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhl
Yy0+anNDYWxsZWUoKSkpKSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5IGZ1bmN0
aW9uIiwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmpz
Q2FsbGVlKCkpKSk7CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSB3
YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
KiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0
dXJlSW5kZXgpOwogCkBAIC02MywxNCArNjMsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbAogICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoYXJn
SW5kZXgpID09IFdhc206Okk2NCkgewogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IqIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMs
IHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5UnVudGltZUVycm9y
U3RydWN0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICJXZWJBc3NlbWJseSBmdW5jdGlvbiB3
aXRoIGFuIGk2NCBhcmd1bWVudCBjYW4ndCBiZSBjYWxsZWQgZnJvbSBKYXZhU2NyaXB0Iik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgZXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGVycm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IGlmIChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpJNjQpIHsKICAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IqIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksCiAgICAgICAgICAgICAgICAgIldlYkFzc2Vt
Ymx5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpNjQgY2FuJ3QgYmUgY2FsbGVkIGZyb20gSmF2YVNj
cmlwdCIpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05Myw3ICs5Myw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgY2Fz
ZSBXYXNtOjpBbnlmdW5jOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICAgICAgYm94ZWRBcmdzLmFwcGVuZChhcmcpOwogICAgIH0KIApAQCAtMTI0LDIwICsxMjQsMjAg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgc3dpdGNo
IChzaWduYXR1cmUtPnJldHVyblR5cGUoKSkgewogICAgIGNhc2UgV2FzbTo6Vm9pZDoKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3UmVzdWx0KSkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3UmVzdWx0KSk7
CiAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIocHVyaWZ5TmFOKHN0YXRpY19jYXN0PGRvdWJsZT4oYml0d2lzZV9jYXN0PGZsb2F0Pihz
dGF0aWNfY2FzdDxpbnQzMl90PihyYXdSZXN1bHQpKSkpKSk7CisgICAgICAgIHJldHVybiBqc051
bWJlcihwdXJpZnlOYU4oc3RhdGljX2Nhc3Q8ZG91YmxlPihiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0
YXRpY19jYXN0PGludDMyX3Q+KHJhd1Jlc3VsdCkpKSkpOwogICAgIGNhc2UgV2FzbTo6RjY0Ogot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHB1cmlmeU5hTihiaXR3aXNl
X2Nhc3Q8ZG91YmxlPihyYXdSZXN1bHQpKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVy
aWZ5TmFOKGJpdHdpc2VfY2FzdDxkb3VibGU+KHJhd1Jlc3VsdCkpKTsKICAgICBjYXNlIFdhc206
Okk2NDoKICAgICBjYXNlIFdhc206OkZ1bmM6CiAgICAgY2FzZSBXYXNtOjpBbnlmdW5jOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBF
bmNvZGVkSlNWYWx1ZSgpOworICAgIHJldHVybiB7IH07CiB9CiAKIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9p
bnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw3
IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3QKICBAZW5kCiAgKi8K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3Nl
bWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC02MiwyOCArNjIsMjggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgIC8vIElmIG1vZHVsZU9iamVjdCBpcyBub3QgYSBXZWJB
c3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIWpzTW9kdWxlKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFz
c2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFyZ3VtZW50KDApKSkpKTsK
KyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmFyZ3VtZW50KDApKSkpOwogICAgIGNv
bnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJh
bWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmpl
Y3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0g
ZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFy
Z3VtZW50LmdldE9iamVjdCgpOwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQo
KSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVu
ZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlw
ZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
InNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5l
ZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKGltcG9ydEFyZ3VtZW50KSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmlt
cG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwg
YSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRz
LnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0
IGJlIE9iamVjdCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwg
ZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50
KSkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJB
c3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5N
b2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZv
clZhbHVlKGltcG9ydEFyZ3VtZW50KSkpOwogCiAgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwg
IldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1v
ZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5
LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAKICAgICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGds
b2JhbE9iamVjdC0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VT
dHJ1Y3R1cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVj
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgewogICAg
ICAgICAvLyBBbHdheXMgc3RhcnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+
IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5
aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgogICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5
OwpAQCAtMTAxLDIyICsxMDEsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29ucwogICAgIGZvciAoYXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0
cykgewogICAgICAgICAvLyAxLiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZv
cm1pbmcgR2V0KGltcG9ydE9iamVjdCwgaS5tb2R1bGVfbmFtZSkuCiAgICAgICAgIEpTVmFsdWUg
aW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxl
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
ICAgICAvLyAyLiBJZiBUeXBlKG8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgog
ICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVj
dCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9k
dWxlVmFsdWUpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0
IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFs
dWUoaW1wb3J0TW9kdWxlVmFsdWUpKSk7CiAKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZh
bHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0LmZpZWxkKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgICAgIHN3aXRj
aCAoaW1wb3J0LmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OkZ1bmN0
aW9uOiB7CiAgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgogICAg
ICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3Nl
bWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJ
TGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rp
b24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1
ZS5hc0NlbGwoKTsKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0
aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAgICAgICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiog
aW1wb3J0ZWRFeHBvcnQgPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxs
KSkgewpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4ID0gaW1wb3J0ZWRFeHBvcnQtPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAg
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2lu
ZEluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBl
eHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24n
cyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rp
b24ncyBzaWduYXR1cmUiKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24n
dCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkp
OwogICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lzZToKQEAgLTE0MywyMiAr
MTQzLDIwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNz
ZW1ibHlUYWJsZSo+KHZhbHVlKTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2Vi
QXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAg
ICAgICAgICAgIGlmICghdGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4g
aW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFdlYkFzc2VtYmx5LlRhYmxlIikpKTsKIAogICAgICAgICAgICAgdWludDMyX3Qg
ZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0
aWFsKCk7CiAgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPnNpemUo
KTsKICAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlM
aXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNt
YWxsIikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiVGFibGUgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFs
bCIpKSk7CiAKICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBleHBlY3Rl
ZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkg
ewogICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGFjdHVhbE1heGltdW0g
PSB0YWJsZS0+bWF4aW11bSgpOwogICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQg
ZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0
IGRvZXMiKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiVGFibGUgaW1wb3J0IGRvZXMgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRo
ZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKCphY3R1YWxNYXhpbXVtID4gKmV4cGVjdGVkTWF4aW11bSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJsZSdz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0n
IikpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxp
dGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1
bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIApAQCAtMTc1LDIzICsxNzMsMjEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29ucwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odmFsdWUpOwogICAgICAgICAgICAg
Ly8gaS4gSWYgdiBpcyBub3QgYSBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0LCB0aHJvdyBhIFdl
YkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgIGlmICghbWVtb3J5KQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFs
KCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnki
KSkpOwogCiAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKTsKICAgICAgICAgICAgIFdhc206OlBhZ2VD
b3VudCBhY3R1YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOwogICAgICAg
ICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1l
bW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVt
b3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwog
CiAgICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsKICAgICAgICAgICAgICAgICBXYXNtOjpQ
YWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1lbW9yeS0+bWVtb3J5KCktPm1heGltdW0oKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1heGltdW0pIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4aW11
bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQg
aXQgZG9lcyIpKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGFj
dHVhbE1heGltdW0gPiBleHBlY3RlZE1heGltdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFu
IHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMgJ21h
eGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlpLiBB
cHBlbmQgdiB0byBtZW1vcmllcy4KQEAgLTIwNSw3ICsyMDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBBU1NFUlQobW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IFdhc206Okdsb2Jh
bDo6SW1tdXRhYmxlKTsKICAgICAgICAgICAgIC8vIGlpLiBJZiBUeXBlKHYpIGlzIG5vdCBOdW1i
ZXIsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwg
QVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIpKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVk
IGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIikpKTsKICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5k
IFRvV2ViQXNzZW1ibHlWYWx1ZSh2KSB0byBpbXBvcnRzLgogICAgICAgICAgICAgc3dpdGNoICht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAg
ICAgICAgIGNhc2UgV2FzbTo6STMyOgpAQCAtMjM4LDcgKzIzNCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgIGJvb2wgZmFpbGVkOwogICAg
ICAgICAgICAgV2FzbTo6TWVtb3J5IG1lbW9yeShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5p
dGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOwogICAg
ICAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoZXhlYykpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLAogICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVt
b3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwogICAgICAgICB9CkBAIC0yNzgsMjIg
KzI3NCwyMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
fQogCiAgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICBtb2R1bGVSZWNvcmQtPmR1bXAoKTsKICAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxl
UmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKICAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShpbnN0YW5jZSk7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNl
KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIikpOwor
ICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIik7CiB9CiAKIFdlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlJbnN0YW5jZVBy
b3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwy
MSArNDQsMjEgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29ucwogIEBl
bmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBzdGF0ZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1
bmN0aW9uKHN0YXRlLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlu
a0Vycm9yU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseUxp
bmtFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseUxp
bmtFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LkxpbmtFcnJvciIp
KTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5MaW5rRXJyb3IiKTsKIH0KIAogV2Vi
QXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TGlu
a0Vycm9yUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDE4
ICs0OCwxOCBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1CiAgQGVu
ZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1v
cnkgZXhwZWN0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpKSkpOworICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQi
KSkpOwogCiAgICAgSlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7CiAgICAgewogICAgICAgICBK
U1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlmICghYXJndW1l
bnQuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJl
IGFuIG9iamVjdCIpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2Vt
Ymx5Lk1lbW9yeSBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkp
OwogICAgICAgICBtZW1vcnlEZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQp
OwogICAgIH0KIApAQCAtNjcsMTEgKzY3LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOwogICAgICAgICBKU1ZhbHVlIG1pblNp
emVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICB1aW50MzJf
dCBzaXplID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBtaW5TaXplVmFsdWUpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlmICgh
V2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5ICdpbml0aWFsJyBwYWdl
IGNvdW50IGlzIHRvbyBsYXJnZSIpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseS5NZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikp
KTsKICAgICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKICAg
ICB9CiAKQEAgLTc5LDE5ICs3OSwxOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgewogICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9
IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChoYXNQ
cm9wZXJ0eSkgewogICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNj
cmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9
IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgbWF4U2l6ZVZhbHVlKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBp
ZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGlt
dW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMg
dG9vIGxhcmdlIikpKTsKICAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBXYXNtOjpQYWdl
Q291bnQoc2l6ZSk7CiAKICAgICAgICAgICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11
bVBhZ2VDb3VudCkgewotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIidtYXhpbXVtJyBwYWdlIGNvdW50IG11c3Qg
YmUgdGhhbiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwYWdlIGNvdW50
IikpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCInbWF4aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC05OSwxNiArOTksMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGJvb2wgZmFpbGVkOwogICAgIFdhc206Ok1lbW9yeSBt
ZW1vcnkoaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgZmFpbGVkKTsKICAgICBp
ZiAoZmFpbGVkKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZXhlYykpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgcmV0dXJuIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpOwogfQogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1lbW9y
eShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNX
ZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVk
QXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9y
eSIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlv
blR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSIpOwogfQog
CiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQAog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1
bmNHcm93KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CiB9CiAKICNpbmNsdWRlICJXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCIKQEAgLTUxLDcgKzUxLDcgQEAgY29uc3QgQ2xh
c3NJbmZvIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eQogQGVuZAogKi8KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3Rh
dGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1
ZmZlcihFeGVjU3RhdGUqKTsKIAogQUxXQVlTX0lOTElORSBKU1dlYkFzc2VtYmx5TWVtb3J5KiBn
ZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewpAQCAtNjAsMjQgKzYw
LDI0IEBAIEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseU1lbW9yeSogZ2V0TWUKIAogICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1l
bW9yeSo+KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgCisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseS5NZW1vcnkucHJvdG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9u
IFdlYkFzc2VtYmx5Lk1lbW9yeSB8dGhpc3wgdmFsdWUiKSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZm
ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gbWVtb3J5LT5idWZmZXIoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTkyLDcgKzkyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIFdhc206OlBhZ2VDb3VudCByZXN1
bHQgPSBtZW1vcnktPmdyb3coZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFp
bHVyZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQucGFnZUNvdW50KCkpKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKTsKIH0KIAogV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01MywyMSArNTMsMjEgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBzdHJ1Y3R1
cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVj
LT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1v
ZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBzdHJ1Y3R1
cmUpKTsKKyAgICByZXR1cm4gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9k
dWxlKGV4ZWMsIHN0cnVjdHVyZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dD
b25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
ICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CisgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JDYW5u
b3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHku
TW9kdWxlIik7CiB9CiAKIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlTW9kdWxlKEV4ZWNTdGF0ZSogc3RhdGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
MCw4ICsyMzAsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50
LmZ1bmN0aW9uSW5kaWNlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8
IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjpkZWNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZNUmFu
Z2VFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRWxlbWVudCBpcyBzZXR0aW5nIHRo
ZSB0YWJsZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVk
LiBGSVhNRS4iKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGluZyB0aGUgdGFi
bGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gRklY
TUUuIikpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxOCArMzMsMTggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5RnVuY3Rpb25WYWxpZGF0ZShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUZ1bmN0aW9uVmFsaWRhdGUoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gcHJvcGVy
dHkiKSkpKTsKKyAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVF
cnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1l
bnQgdGhlIHZhbGlkYXRlIGZ1bmN0aW9uIHByb3BlcnR5IikpKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlGdW5jdGlvbkNvbXBpbGUoRXhlY1N0
YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlGdW5j
dGlvbkNvbXBpbGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9y
KHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0
aGUgY29tcGlsZSBmdW5jdGlvbiBwcm9wZXJ0eSIpKSkpOworICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgY29tcGlsZSBmdW5jdGlvbiBwcm9wZXJ0
eSIpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwy
MSArNDQsMjEgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQwogIEBl
bmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBzdGF0
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRl
cm5hbEZ1bmN0aW9uKHN0YXRlLT5qc0NhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2Vt
Ymx5UnVudGltZUVycm9yU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNzYWdl
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXR1cm4gSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKHN0YXRlLCB2bSwgc3RydWN0dXJlLCBtZXNz
YWdlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldl
YkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIpKTsKKyAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckNh
bm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJs
eS5SdW50aW1lRXJyb3IiKTsKIH0KIAogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ciogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlKiB0aGlz
UHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDcgKzQ1LDcgQEAgY29uc3QgQ2xhc3NJbmZv
IFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1YwogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01NCw1MSAr
NTQsNTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIHsK
ICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgICAgICBp
ZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3Vt
ZW50IHRvIGJlIGFuIG9iamVjdCIpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IldlYkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9i
amVjdCIpKSk7CiAgICAgICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nhc3Q8SlNPYmplY3QqPihh
cmd1bWVudCk7CiAgICAgfQogCiAgICAgewogICAgICAgICBJZGVudGlmaWVyIGVsZW1lbnRJZGVu
dCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZWxlbWVudCIpOwogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnRWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBlbGVtZW50SWRl
bnQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0gZWxlbWVudFZhbHVlLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgICAgIGlmIChlbGVtZW50U3RyaW5nICE9ICJhbnlmdW5jIikKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBp
dHMgJ2VsZW1lbnQnIGZpZWxkIHRvIGJlIHRoZSBzdHJpbmcgJ2FueWZ1bmMnIikpKSk7CisgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUgZXhwZWN0cyBpdHMg
J2VsZW1lbnQnIGZpZWxkIHRvIGJlIHRoZSBzdHJpbmcgJ2FueWZ1bmMnIikpKTsKICAgICB9CiAK
ICAgICBJZGVudGlmaWVyIGluaXRpYWxJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiaW5pdGlhbCIpOwogICAgIEpTVmFsdWUgaW5pdGlhbFNpemVWYWx1ZSA9IG1lbW9yeURlc2Ny
aXB0b3ItPmdldChleGVjLCBpbml0aWFsSWRlbnQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIHVpbnQzMl90IGluaXRpYWwgPSB0b05vbldyYXBwaW5nVWlu
dDMyKGV4ZWMsIGluaXRpYWxTaXplVmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogCiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKICAg
ICBJZGVudGlmaWVyIG1heGltdW1JZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bWF4aW11bSIpOwogICAgIGJvb2wgaGFzUHJvcGVydHkgPSBtZW1vcnlEZXNjcmlwdG9yLT5oYXNQ
cm9wZXJ0eShleGVjLCBtYXhpbXVtSWRlbnQpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGlmIChoYXNQcm9wZXJ0eSkgewogICAgICAgICBKU1ZhbHVlIG1h
eFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtSWRlbnQpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAg
IG1heGltdW0gPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIG1heFNpemVWYWx1ZSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgICAgICBp
ZiAoaW5pdGlhbCA+ICptYXhpbXVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCi0gICAgICAgICAgICAgICAgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIidtYXhpbXVtJyBwcm9wZXJ0eSBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgJ2luaXRpYWwnIHByb3BlcnR5IikpKSk7
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAg
ICAgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiJ21heGlt
dW0nIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSAnaW5pdGlh
bCcgcHJvcGVydHkiKSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGhyb3dTY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNy
ZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRh
YmxlU3RydWN0dXJlKCksIGluaXRpYWwsIG1heGltdW0pKTsKKyAgICByZXR1cm4gSlNXZWJBc3Nl
bWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0aWFsLCBtYXhpbXVtKTsKIH0KIAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlUYWJsZShF
eGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJB
c3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlv
blR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWJsZSIpKTsKKyAgICByZXR1
cm4gdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWJsZSIpOwogfQogCiBXZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIHRoaXNQcm90b3R5
cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTYsNTAgKzU2LDUwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTV2Vi
QXNzZW1ibHlUYWJsZSoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKik7
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNH
cm93KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eVRhYmxlUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKik7
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dyb3coRXhl
Y1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVu
Y0dldChFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxl
UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPnNpemUoKSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4ganNOdW1iZXIodGFibGUtPnNp
emUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdl
YkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGV4ZWMs
IHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGlmICghdGFibGUtPmdyb3coaW5kZXgpKSB7CiAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBu
b3QgZ3JvdyB0aGUgdGFibGUiKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlU
YWJsZVByb3RvRnVuY0dldChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0dldChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJsZShleGVj
LCB2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogCiAgICAgdWludDMyX3QgaW5kZXggPSB0b05vbldyYXBwaW5nVWludDMyKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpZiAoaW5kZXggPj0gdGFibGUtPnNpemUoKSkgewogICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAogICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhw
ZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdGFibGUiKSkpOwpAQCAt
MTA3LDE3ICsxMDcsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eQogICAgIH0KIAogICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiByZXN1bHQgPSB0YWJsZS0+
Z2V0RnVuY3Rpb24oaW5kZXgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT5hcmd1bWVudCgxKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZhbHVlKTsKQEAgLTEyOCw3ICsxMjgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgfQogCiAg
ICAgdWludDMyX3QgaW5kZXggPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAg
IGlmIChpbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsCkBAIC0xNDMsNyArMTQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4
LCBmdW5jdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIFdlYkFzc2VtYmx5
VGFibGVQcm90b3R5cGUqIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTU3IEBACisyMDE3LTAxLTAzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdGhlIHVzZSBvZiBFbmNvZGVk
SlNWYWx1ZSwgYW5kIHVzZSBKU1ZhbHVlIGluc3RlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2NTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZWxldGVkIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvciwgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yLCBhbmQKKyAgICAgICAgY3JlYXRlSlNC
dWlsdGluIGJlY2F1c2UgdGhleSBhcmUgbm8gbG9uZ2VyIHVzZWQgYW55d2hlcmUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBvbmx5IHJlZmFjdG9ycyBjb2RlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRocm93VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRNdXN0
QmVFbnVtRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dBcmd1bWVudFR5cGVFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjp0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFi
bGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0dldHRlclR5cGVFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpyZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjp0aHJvd1RoaXNUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6cmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxUaHJvd1R5
cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI6OmNhbGxQcm9taXNlT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QmluZGluZ0NhbGxlcjo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
bmRpbmdDYWxsZXI6OmF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3Rh
dGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSlNCdWlsdGluKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTo6Y2FsbFRocm93
VHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xh
c3M+OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNCdWlsdGluQ29uc3Ry
dWN0b3I8SlNDbGFzcz46OmNvbnN0cnVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVRoaXNUeXBlRXJyb3JGb3JC
dWlsdGlucyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlR2V0dGVyVHlwZUVycm9yRm9yQnVpbHRp
bnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6Okl0ZXJhdG9yVHJhaXRzPjo6bmV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlamVjdGVkUHJvbWlzZVdp
dGhUeXBlRXJyb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmpzRE9NV2luZG93V2ViS2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTRXZlbnRUYXJn
ZXQ+OjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlv
bik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjppbnNlcnRCZWZvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNOb2RlOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OmFwcGVuZENo
aWxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGxQbHVnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJl
YW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpT
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpT
V29ya2VyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0SGFuZGxl
cnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzdHJ1Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzdHJ1Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1N0cnVjdHVyZWRDbG9uZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVP
dmVybG9hZGVkRnVuY3Rpb25PckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24pOgorICAgICAg
ICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uSXRlcmFi
bGVGdW5jdGlvbnMpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+OjpjYXN0Rm9yQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5n
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5j
dGlvbkV4Y2l0aW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3Nh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVu
Y3Rpb25Qb3N0TWVzc2FnZUNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxs
ZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0
aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFj
dGlvbnNDYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxs
ZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90
b3R5cGVGdW5jdGlvblRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQ2FsbGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZUZ1
bmN0aW9uQW5vdGhlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb25DYWxsZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjpjYXN0Rm9yQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEFueUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RE9NSklUQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUQnl0ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUT2N0ZXRBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFNob3J0QXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RET01KSVRMb25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnNp
Z25lZExvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVExvbmdMb25nQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRGbG9hdEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVERvdWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUVW5yZXN0cmljdGVkRG91YmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01K
SVREb21TdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEJ5dGVTdHJp
bmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTm9kZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RET01KSVRCeXRlTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVE9jdGV0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFNo
b3J0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVk
U2hvcnROdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ051
bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdO
dWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ0xvbmdOdWxs
YWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9u
Z051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRGbG9hdE51bGxh
YmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9h
dE51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVREb3VibGVOdWxs
YWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91
YmxlTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVERvbVN0cmlu
Z051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCeXRlU3RyaW5n
TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVzdlN0cmluZ051
bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVROb2RlTnVsbGFibGVB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdERPTUpJVENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25IYXNBdHRyaWJ1dGVDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJv
dG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50
c0J5TmFtZUNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6QmluZGlu
Z0NhbGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RXZl
bnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZl
bnRUYXJnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFdmVudFRh
cmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb25JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdD
YWxsZXI8SlNUZXN0RXhjZXB0aW9uPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RFeGNlcHRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdD
YWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlv
bmFsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVn
dWxhckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25S
ZWd1bGFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdElu
c3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rp
b25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9u
RW5hYmxlZEluU3BlY2lmaWNXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxP
YmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZENhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZh
dGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkNhbGxlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNS
ZWFkT25seUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW1lbnRzU3RhdGljQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRh
bFN0YXRpY1JlYWRPbmx5QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxl
bWVudHNTdGF0aWNBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUltcGxlbWVu
dHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
U3VwcGxlbWVudGFsU3RhdGljQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkltcGxlbWVudHNNZXRob2QyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9k
M0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1
bmN0aW9uSW1wbGVtZW50c01ldGhvZDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMUNh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
blN1cHBsZW1lbnRhbE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
Myk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1
cHBsZW1lbnRhbE1ldGhvZDNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3JDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJvdG90
eXBlRnVuY3Rpb25FbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJh
YmxlUHJvdG90eXBlRnVuY3Rpb25LZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEl0ZXJh
YmxlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3I+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlUldDdXN0b20pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1
bmN0aW9uQ2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RDYWxsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
Q29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6QmluZGlu
Z0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FzdEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3ROb2RlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2Vy
UHJvbWlzZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0NhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpSZWFkT25seVN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVhZE9u
bHlUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1JlYWRPbmx5TG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JTdGF0aWNTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0
cnVjdG9yVGVzdFN1Yk9iaik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0U3ViT2Jq
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakJ5dGVBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iak9jdGV0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVXN2c3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0
TnVsbGFibGVPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQnl0ZVN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialVz
dnN0cmluZ0xvbmdSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmlu
Z09ialJlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nTnVsbGFi
bGVPYmpSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakRpY3Rpb25hcnlB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpYTUxPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9iakNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialR5cGVkQXJyYXlBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakF0dHJp
YnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0
cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDdXN0b21BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak9uZm9vKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak9ud2Via2l0Zm9vKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqQ2FjaGVkQXR0cmlidXRlMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNo
ZWRBdHRyaWJ1dGUyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakFueUF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqQ29udGVudERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iak11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbW11dGFi
bGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTdHJhd2JlcnJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iaklkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakhhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpO
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
QXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHV0
Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpT
dHJpbmdpZmllckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbnVtQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpCeXRlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpPY3RldEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
U2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakxvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakxvbmdMb25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpVbnNpZ25lZExvbmdMb25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVGVzdE9iakF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0
cmluZ0xvbmdSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0
cmluZ0xvbmdSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmlu
Z09ialJlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakRpY3Rp
b25hcnlBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlRGljdGlv
bmFyeUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25F
bnVtQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialJlZmxlY3RlZFVSTEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialR5cGVkQXJyYXlBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJp
YnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
QXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iak9uZm9vKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9ud2Via2l0Zm9vKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iak9iamVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpNdXRh
YmxlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyYXdiZXJyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpJZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpS
ZXBsYWNlYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbjJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRo
b2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Vm9pZE1ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0NhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2QpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhv
ZFdpdGhBcmdzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2N0ZXRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PY3RldE1ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0
aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1l
dGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3Jn
ZWFibGVNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z1N0YXRpY01ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZENhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhF
bnVtQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEVudW1BcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmdD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxFbnVtQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1B
cmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNW
U3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJs
ZVVTVlN0cmluZ0FyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0Fy
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhCeXRlU3RyaW5nQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVT
dHJpbmdBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0
ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFJlY29yZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
blJldHVybmluZ0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZ0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1
cm5pbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Q2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9k
V2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
dXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZh
dGVNZXRob2RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdFN0YXRlVm9pZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3Rh
dGVWb2lkRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVu
dEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aENhbGxlckRvY3VtZW50QXJndW1lbnRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJn
dW1lbnRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmRE
ZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNW
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXRvbWljU3RyaW5nQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVm
YXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nSXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5n
SXNVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZENhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21p
Y1N0cmluZ0lzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENhbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0lzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmdD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3Ry
aW5nSXNFbXB0eVN0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91Ymxl
SXNOYU5DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTkNhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbExvbmdMb25nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lz
WmVybyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9u
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25n
SXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVl
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU2VxdWVuY2VDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxTZXF1ZW5jZUlzRW1wdHlDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkNh
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBbnkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBbnlDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmpl
Y3RDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJD
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBw
ZXJJc051bGxDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVz
b2x2ZXJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tB
cmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQ2FsbGJhY2tBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxs
YmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tBbmRPcHRpb25hbEFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rp
b25BcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0
aW9uYWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnQ2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2Fs
bGJhY2tBbmRPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2Qx
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMUNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJDYWxsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qz
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kNENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVDYWxsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
Nik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q2Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0NhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kOSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q5Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEx
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDExQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEz
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoT3B0aW9uYWxQYXJhbWV0ZXIyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5p
b24xQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGlu
Z3Vpc2hpbmdVbmlvbjJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9u
czFDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0
aW5ndWlzaGluZ1VuaW9uczJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjEpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNo
aW5nVW5pb24xQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNo
aW5nVW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGVVbmlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24pOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bFVuaW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bFVuaW9uMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5n
UGFyYW1ldGVyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1
aXNoaW5nUGFyYW1ldGVyMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNz
TWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25D
bGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5m
b3JjZVJhbmdlQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNl
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3Ry
aW5nQXJyYXlGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25D
YWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVu
Y2VDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25H
ZXRFbGVtZW50QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudENhbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDFDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0Mik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQ2FsbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDMpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9p
bnRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VDYWxs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRp
Y1N0cmluZ01ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZENhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGlj
Tm9kZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZhcmlhZGljTm9kZU1ldGhvZENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
RnVuY3Rpb25Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJn
dW1lbnRDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9u
UHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25h
bEludEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50UHJvbWlzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uMVByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFDYWxsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92
ZXJsb2FkZWRGdW5jdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJQcm9taXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVk
RnVuY3Rpb24yQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQ
cm9taXNlRnVuY3Rpb25Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1By
b21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNl
RnVuY3Rpb25DYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92
ZXJsb2FkMkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQx
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2lu
Z2xlQ29uZGl0aW9uYWxPdmVybG9hZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zl
cmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRh
Y2hTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQXR0YWNoU2hhZG93Um9vdENhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25X
aXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1l
dGVyQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZ0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkNhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Ry
dWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJyaWRlQnVpbHRpbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1
aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25OYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtQ2FsbGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpj
YXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJp
YWxpemFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0Nh
bGxlcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0Rm9yQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0
aW9uUmV0dXJuaW5nQ2FsbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdDYWxsZXI8SlNU
ZXN0VHlwZWRlZnM+OjpjYXN0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmopOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2Vx
dWVuY2VBcmdDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYWJsZXNBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYWJsZXNBcmdDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxh
YmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxs
YWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25Bcmcp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9u
QXJnQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25GdW5jV2l0aENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQ
b2ludEZ1bmN0aW9uQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uQ2Fs
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbjJDYWxsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVu
Y2VUaGF0UmVxdWlyZXNJbmNsdWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZUNhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxlcik6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y2FsbE9iakNG
YWxsYmFja09iamVjdCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAg
ICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgICogYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgor
ICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoSlND
OjpjYWxsUnVudGltZU1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6
CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmZpZWxkR2V0dGVyKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6Om1ldGhvZEdldHRlcik6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpjYWxsUnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxs
UnVudGltZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoK
KwogMjAxNy0wMS0wMyAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTihyMjEwMjI2KTogZmFzdC9oaXN0b3J5L2JhY2stZnJvbS1wYWdlLXdpdGgt
Zm9jdXNlZC1pZnJhbWUuaHRtbCBjcmFzaGVzIHVuZGVyIEd1YXJkTWFsbG9jCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIxMDI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAx
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Vi
a2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxA
NjhrLm9yZz4KICAqCkBAIC04MDUsNyArODA1LDcgQEAgYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVAogICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50
KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7CiB9CiAgICAg
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkK
K3N0YXRpYyBKU1ZhbHVlIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogfQpAQCAtODI5LDE5
ICs4MjksNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCCiAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewot
ICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGNvbnRl
eHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJyIs
IGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotICAgIAot
dm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewot
ICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGNvbnRl
eHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVydHkgJyIsIGF0
dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIpKTsK
LX0KLQogdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKQEAgLTg2OCw3ICs4NTUsNyBAQCB2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgCiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNo
YXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQorSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2Nv
cGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKIHsKICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CiAgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRl
eCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7CkBA
IC04NzcsNyArODY0LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJl
RQogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK0pTVmFsdWUg
dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dT
Y29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50
TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
KQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBhcHBlbmRBcmd1bWVudE11c3RC
ZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSk7CkBAIC04ODUsNyArODcyLDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0FyZ3VtZW50TXVzdEJlRgogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK0pTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbklu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0
ZWRUeXBlKQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBhcHBlbmRBcmd1bWVu
dE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50
ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKQEAgLTkwNCw3ICs4OTEsNyBAQCB2b2lkIHRocm93
QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0CiAgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVO
YW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkp
OwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRUeXBlKQorSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEV4ZWNTdGF0
ZSYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25z
dCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQogewogICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJl
ciAiKTsKQEAgLTkxNiw3ICs5MDMsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWly
ZWRNZW1iZXJUCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVp
bGRlci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVj
dG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
KQorSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxh
YmxlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUpCiB7CiAgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVSZWZlcmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwg
IiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxl
IikpKTsKIH0KQEAgLTkzNiwxMiArOTIzLDEyIEBAIFN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCAKICAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5h
bWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0
YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQorSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKIHsKICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1l
KSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRl
clR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogewogICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFBy
b21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRl
cmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7CiB9CkBAIC05NTcsMTggKzk0NCwxOCBAQCBTdHJp
bmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoCiAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIg
b24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSB0
aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpCitKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQogewogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VU
aGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKIH0KIAot
SlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJy
ZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBtZXRob2ROYW1lKQorSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVm
ZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBtZXRob2ROYW1lKQogewogICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRo
aXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG1ldGhvZE5hbWUpCitKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBtZXRob2ROYW1lKQogewogICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRo
VHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
bWV0aG9kTmFtZSkpOwogfQpAQCAtOTkzLDEyICs5ODAsMTIgQEAgdm9pZCBET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdDo6dmlzaQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aW5pdGlhbGl6ZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJD
b25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKIENhbGxUeXBl
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAx
MywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAxMiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTExMyw5ICsx
MTMsNiBAQCBET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0CiBET01XaW5k
b3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwogRE9NV2luZG93JiBmaXJzdERP
TVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
LQogdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CiBXRUJDT1JFX0VYUE9SVCBib29sIHRo
cm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CiAKQEAg
LTEzMSwyMSArMTI4LDIxIEBAIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwKIFdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwogdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFy
KiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7
CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFs
dWVzKTsKK0pTQzo6SlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVl
IHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRo
cm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6SlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKIAogU3RyaW5nIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwogU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKIAot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFs
dWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKIAot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIG9wZXJhdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBK
U0M6OkpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlz
ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUp
OworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIG9wZXJhdGlvbk5hbWUpOwogCiBXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0
Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qKTsKIFdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8q
KTsKQEAgLTE1Niw4ICsxNTMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpT
Qzo6SlNPCiAKIHZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1
aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlv
biwgSlNET01HbG9iYWxPYmplY3QmKTsKLQogSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJP
d25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CiB2b2lkKiB3cmFwcGVy
S2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKIApAQCAtMzE0LDcgKzMwOSw3IEBAIHZvaWQgcHJpbnRF
cnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGMKIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmlu
ZyhKU0M6OlByb3BlcnR5TmFtZSk7CiBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNT
dHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9u
LCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6
SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIAogCiBlbnVtIGNsYXNzIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3Nl
cnQgfTsKQEAgLTMyMywxNCArMzE4LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CiBz
dHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24g
PSBib29sKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJv
d1Njb3BlJik7CiAgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNp
bmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21pc2VP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7
CisgICAgdXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpF
eGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlz
ZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwogCi0g
ICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RG
b3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKIAogICAgIHRlbXBsYXRlPFByb21pc2VPcGVy
YXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlz
ZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChzdGF0ZSk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOwpAQCAtMzQ0LDcgKzMzOSw3IEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25D
YWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxP
cGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCiAgICAgewogICAgICAgICBBU1NFUlQo
c3RhdGUpOwogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKQEAgLTM2MiwxOCArMzU3LDE4IEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93PgotICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMgYm9v
bCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoc3RhdGUpOwogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKICAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkg
OiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6
OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0
dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB2YWx1ZSwgdGhyb3dTY29wZSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RhdGUpOwogICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKQEAgLTM4Myw5ICsz
NzgsOSBAQCBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5j
bGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwogICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQogICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNDOjpK
U1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsK
KyAgICAgICAgcmV0dXJuIGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB9CiB9OwogCkBAIC00NTIsMTMgKzQ0Nyw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcz4gaW5saW5lIEoKICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+
KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9u
JiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVj
dHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9i
amVjdCk7Ci0gICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpvYmpl
Y3QsIGluaXRpYWxpemVGdW5jdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2Rl
KG9iamVjdCk7Ci19Ci0KIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgpLm1f
dHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKQEAgLTc2Miw5ICs3
NTAsOSBAQCBpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljCiAgICAgcmV0
dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkg
OiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKIH0KIAotdGVtcGxhdGU8SlNDOjpOYXRpdmVG
dW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBu
b25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3RlbXBsYXRl
PEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6SlNW
YWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52
bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gSlNDOjpKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuaAkocmV2aXNp
b24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTYgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtNDMsMTIgKzQzLDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVXN1YWxseSBk
ZWZpbmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgogICAgIHZvaWQgaW5pdGlhbGl6
ZVByb3BlcnRpZXMoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0JikgeyB9CiAKLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAg
ICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIEpTQzo6dGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiSWxsZWdhbCBjb25zdHJ1Y3RvciIpKTsKLSAgICAgICAgcmV0dXJu
IEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNOdWxsKCkpOworICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNzgsNyArNzgsNyBA
QCBwcml2YXRlOgogICAgIC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlv
biBjbGFzcy4KICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpIHsgfQogICAgIC8vIE11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFs
aXphdGlvbiBjbGFzcy4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NTmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCB7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBVc3VhbGx5IGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xhc3MuCiAg
ICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KSB7IH0KICAgICAvLyBNdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xh
c3MuCi0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3QoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBjbGFzcyBKU0J1aWx0aW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdCB7CkBAIC0xMjAsMTAgKzEyMCwxMCBAQCBwcml2YXRlOgogICAgIEpT
QnVpbHRpbkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkgeyB9
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
ICAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKIAot
ICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU09iamVjdCYpOwotICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbENvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCopOworICAgIEpTQzo6SlNWYWx1ZSBjYWxs
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0Jik7CisgICAgSlNDOjpK
U1ZhbHVlIGNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QqKTsK
IAogICAgIC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFzcy4K
ICAgICB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpIHsgfQpAQCAtMjIwLDEzICsyMjAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
aW5saW5lIHZvaWQgSgogICAgIGluaXRpYWxpemVQcm9wZXJ0aWVzKHZtLCBnbG9iYWxPYmplY3Qp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgb2JqZWN0KQordGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0Ns
YXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVj
dCYgb2JqZWN0KQogewogICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRl
LCBvYmplY3QsICppbml0aWFsaXplRnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1
ZTo6ZW5jb2RlKCZvYmplY3QpOworICAgIHJldHVybiAmb2JqZWN0OwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0J1aWx0aW5Db25z
dHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU09iamVjdCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5l
IEpTQzo6SlNWYWx1ZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCogb2JqZWN0KQogewogICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CkBAIC0yNTksNyArMjU5LDcgQEAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SlNET01PYmplY3RJbnNwZQogICAgIHJldHVybiBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0
dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2Jq
ZWN0LCBKU0NsYXNzOjpET01XcmFwcGVkOjpjcmVhdGUoKmNvbnRleHQpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwogICAgIGF1dG8q
IGNhc3RlZFRoaXMgPSBKU0M6OmpzQ2FzdDxKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHN0YXRlLT5q
c0NhbGxlZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIDIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00OCw4ICs0OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZvckJ1
aWx0aW5zKEV4ZWNTdGF0ZSopOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlR2V0
dGVyVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKik7CitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFrZVRoaXNUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqKTsKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYWtlR2V0dGVyVHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKik7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xvYmFs
T2JqZWN0IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNET01HbG9iYWxPYmplY3QpIH07CiAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBKU0RPTUdsb2Jh
bE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIAogICAgIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9iYWxPYmplY3QoKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0
aW5zKEV4ZWNTdGF0ZSogZXhlY1N0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VUaGlz
VHlwZUVycm9yRm9yQnVpbHRpbnMoRXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNTRVJU
KGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpID09IDIp
OwpAQCAtODIsMTAgKzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVRo
aXNUeXAKICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
IGF1dG8gZnVuY3Rpb25OYW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRT
dHJpbmcoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRhKCksIGZ1bmN0aW9uTmFt
ZS51dGY4KCkuZGF0YSgpKSkpOworICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlY1N0YXRl
LCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBm
dW5jdGlvbk5hbWUudXRmOCgpLmRhdGEoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyhFeGVjU3RhdGUqIGV4ZWNTdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlR2V0dGVyVHlwZUVycm9yRm9yQnVpbHRpbnMo
RXhlY1N0YXRlKiBleGVjU3RhdGUpCiB7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNT
RVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwpAQCAtOTYsNyArOTYsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUCiAgICAgQVNTRVJUX1VOVVNF
RChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGF0dHJpYnV0ZU5hbWUgPSBl
eGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwogICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlVHlwZUVycm9yKGV4ZWNTdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50
ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKSk7
CisgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJy
b3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgYXR0cmlidXRlTmFtZS51dGY4
KCkuZGF0YSgpKSk7CiB9CiAKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9i
YWxzKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJh
dG9yLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQ2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBuZXh0KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG5leHQoSlNDOjpFeGVjU3RhdGUqKTsKIAogcHJpdmF0ZToKICAgICBKU0RPTUl0ZXJh
dG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkgeyB9CkBAIC0yNDIsMTYgKzI0MiwxNiBAQCBKU0M6OkpTVmFsdWUg
SlNET01JdGVyYXRvcjxKU1dyYXBwZXIsIEl0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3Jh
cHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNET01JdGVyYXRvclByb3RvdHlwZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRz
Pjo6bmV4dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+OjpuZXh0
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8g
aXRlcmF0b3IgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTUl0ZXJhdG9yPEpTV3JhcHBlciwgSXRl
cmF0b3JUcmFpdHM+Kj4oc3RhdGUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQot
ICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVyYXRv
ciBvYmplY3QiKSkpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVyYXRvciBvYmpl
Y3QiKSk7CiAKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3ItPm5leHQo
KnN0YXRlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5uZXh0KCpzdGF0ZSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIx
MDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc0LDcgKzE3NCw3IEBAIFJlZjxEZWZlcnJlZFByb21p
c2U+IGNyZWF0ZURlZmVycmVkUHJvbWkKICAgICByZXR1cm4gRGVmZXJyZWRQcm9taXNlOjpjcmVh
dGUoZG9tV2luZG93LCAqZGVmZXJyZWQpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0
ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK0pTQzo6SlNWYWx1ZSBjcmVhdGVSZWplY3RlZFByb21p
c2VXaXRoVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAg
ICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKnN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAg
LTE5MCw3ICsxOTAsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJvbWlz
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQocmVqZWN0aW9uVmFsdWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKCZz
dGF0ZSwgcmVqZWN0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgcHJvbWlzZUNvbnN0cnVj
dG9yLCBhcmd1bWVudHMpKTsKKyAgICByZXR1cm4gY2FsbCgmc3RhdGUsIHJlamVjdEZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHByb21pc2VDb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgcGFyc2VBc0pTT04oSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMSw3ICsyMDEsNyBA
QCB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oUmVmPERlZmVycmVkCiB2b2lkIGZ1bGZpbGxQ
cm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEFycmF5QnVmZmVy
Kik7CiB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21p
c2U+JiYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogdm9pZCByZWplY3RQcm9taXNlV2l0aEV4Y2Vw
dGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTUHJv
bWlzZURlZmVycmVkJik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJvbWlz
ZVdpdGhUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmKTsKK0pTQzo6SlNW
YWx1ZSBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgU3RyaW5nJik7CiAKIHVzaW5nIFByb21pc2VGdW5jdGlvbiA9IHZvaWQoSlNDOjpFeGVj
U3RhdGUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBAIGlu
bGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbigKICAgICByZXR1cm4gcHJvbWlz
ZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLXVzaW5nIEJpbmRpbmdQcm9taXNlRnVuY3Rpb24g
PSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJik7Cit1c2luZyBCaW5kaW5nUHJvbWlzZUZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiB0ZW1wbGF0ZTxCaW5kaW5nUHJv
bWlzZUZ1bmN0aW9uIGJpbmRpbmdGdW5jdGlvbj4KIGlubGluZSB2b2lkIGJpbmRpbmdQcm9taXNl
RnVuY3Rpb25BZGFwdGVyKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwLCAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDYs
NyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9u
U2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSopOworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzRE9N
V2luZG93SW5zdGFuY2VGdW5jdGlvblNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqKTsKIAogdm9p
ZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CkBAIC01NSwxMiArNTUsMTIgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZQogfQogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRvd1dlYktpdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWUganNET01X
aW5kb3dXZWJLaXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIEpTRE9NV2luZG93KiBjYXN0ZWRUaGlzID0gdG9KU0RPTVdpbmRvdyhKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNET01XaW5kb3cqIGNhc3RlZFRoaXMgPSB0
b0pTRE9NV2luZG93KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVkVGhpcy0+d3JhcHBlZCgpKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGNh
c3RlZFRoaXMtPndyYXBwZWQoKS53ZWJraXROYW1lc3BhY2UoKSkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndlYmtpdE5hbWVzcGFjZSgpKTsKIH0KICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBA
QCBKU1ZhbHVlIEpTRG9jdW1lbnQ6OmNyZWF0ZVRvdWNoTGlzdChFeGVjCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBhdXRv
KiBpdGVtID0gSlNUb3VjaDo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsK
ICAgICAgICAgaWYgKCFpdGVtKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgaSwgInRvdWNoZXMiLCAiRG9jdW1l
bnQiLCAiY3JlYXRlVG91Y2hMaXN0IiwgIlRvdWNoIikpOworICAgICAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBpLCAidG91Y2hlcyIsICJEb2N1bWVu
dCIsICJjcmVhdGVUb3VjaExpc3QiLCAiVG91Y2giKTsKIAogICAgICAgICB0b3VjaExpc3QtPmFw
cGVuZCgqaXRlbSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
LDEwICs1MSwxMCBAQCBwcml2YXRlOgogc3RkOjp1bmlxdWVfcHRyPEpTRXZlbnRUYXJnZXRXcmFw
cGVyPiBqc0V2ZW50VGFyZ2V0Q2FzdChKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ0NhbGxlcjxKU0V2ZW50VGFyZ2V0PiB7Ci0gICAgdXNpbmcgT3Bl
cmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNFdmVudFRhcmdldFdyYXBwZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
RXZlbnRUYXJnZXRXcmFwcGVyKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKICAgICB0ZW1wbGF0ZTxP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXI+Ci0gICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsT3BlcmF0
aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwpAQCAtNjUsNyArNjUsNyBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nQ2FsbGVyPEpTRXZlbnRUCiAKICAgICAgICAgaWYgKGF1dG8qIHdp
bmRvdyA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS50b0RPTVdpbmRvdygpKSB7CiAgICAgICAgICAg
ICBpZiAoIXdpbmRvdy0+ZnJhbWUoKSB8fCAhQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KHN0YXRlLCAqd2luZG93LCBUaHJvd1NlY3VyaXR5RXJyb3IpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0Lmdl
dCgpLCB0aHJvd1Njb3BlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMTAyNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGljIEpT
VmFsdWUgbmFtZWRJdGVtcyhFeGVjU3RhdGUmIHN0YQogfQogCiAvLyBIVE1MQWxsQ29sbGVjdGlv
bnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLgot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxB
bGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8v
IERvIG5vdCB1c2UgdGhpc09iaiBoZXJlLiBJdCBjYW4gYmUgdGhlIEpTSFRNTERvY3VtZW50LCBp
biB0aGUgZG9jdW1lbnQuZm9ybXMoaSkgY2FzZS4KICAgICBKU0hUTUxBbGxDb2xsZWN0aW9uKiBq
c0NvbGxlY3Rpb24gPSBqc0Nhc3Q8SlNIVE1MQWxsQ29sbGVjdGlvbio+KGV4ZWMtPmpzQ2FsbGVl
KCkpOwpAQCAtNjgsMjMgKzY4LDIzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAg
Ly8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgU3RyaW5n
IHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqc3RyaW5nLmltcGwoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxP
YmplY3QoKSwgY29sbGVjdGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9u
Lml0ZW0oaW5kZXgudmFsdWUoKSkpOwogCiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50
LmltYWdlcygnPG5hbWU+JykgZXRjLgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5h
bWVkSXRlbXMoKmV4ZWMsIGpzQ29sbGVjdGlvbiwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCBzdHJpbmcpKSk7CisgICAgICAgIHJldHVybiBuYW1lZEl0ZW1zKCpleGVjLCBqc0NvbGxlY3Rp
b24sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgc3RyaW5nKSk7CiAgICAgfQogCiAgICAg
Ly8gVGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdh
bnQKICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhl
Yyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KCpleGVjLT5hcmd1bWVudCgxKS50b1dURlN0
cmluZyhleGVjKS5pbXBsKCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBpdGVtID0gY29sbGVjdGlv
bi5uYW1lZEl0ZW1XaXRoSW5kZXgoc3RyaW5nLCBpbmRleC52YWx1ZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9i
amVjdCgpLCAqaXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywganNDb2xsZWN0
aW9uLT5nbG9iYWxPYmplY3QoKSwgKml0ZW0pOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
IENhbGxUeXBlIEpTSFRNTEFsbENvbGxlY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVs
ZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0hU
TUxFbGVtZW50KEV4ZWNTdGF0ZSYgZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU0hUTUxFbGVtZW50KEV4ZWNTdGF0ZSYgZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzcsMzQg
Kzc3LDM0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBp
ZiAoIWVsZW1lbnRJbnRlcmZhY2UtPmlzVXBncmFkaW5nRWxlbWVudCgpKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IGdldERPTVN0cnVjdHVyZTxKU0hUTUxFbGVtZW50Pih2
bSwgKmdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8qIG5ld0VsZW1lbnRTdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZSgmZXhlYywgbmV3VGFyZ2V0
VmFsdWUsIGJhc2VTdHJ1Y3R1cmUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6
Y3JlYXRlKGVsZW1lbnRJbnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwogICAgICAgICBlbGVt
ZW50LT5zZXRJc0RlZmluZWRDdXN0b21FbGVtZW50KCplbGVtZW50SW50ZXJmYWNlKTsKICAgICAg
ICAgYXV0byoganNFbGVtZW50ID0gSlNIVE1MRWxlbWVudDo6Y3JlYXRlKG5ld0VsZW1lbnRTdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgZWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGNhY2hlV3JhcHBl
cihnbG9iYWxPYmplY3QtPndvcmxkKCksIGVsZW1lbnQucHRyKCksIGpzRWxlbWVudCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGpz
RWxlbWVudDsKICAgICB9CiAKICAgICBFbGVtZW50KiBlbGVtZW50VG9VcGdyYWRlID0gZWxlbWVu
dEludGVyZmFjZS0+bGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNrKCk7CiAgICAgaWYgKCFl
bGVtZW50VG9VcGdyYWRlKSB7CiAgICAgICAgIHRocm93SW52YWxpZFN0YXRlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGluc3RhbnRpYXRlIGEgY3VzdG9tIGVsZW1lbnQg
aW5zaWRlIGl0cyBvd24gY29uc3RyY3V0b3IgZHVyaW5nIHVwZ3JhZGVzIikpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKICAgICBKU1ZhbHVlIGVsZW1lbnRXcmFwcGVyVmFsdWUgPSB0
b0pTKCZleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgKmVsZW1lbnRUb1VwZ3Jh
ZGUpOwogICAgIEFTU0VSVChlbGVtZW50V3JhcHBlclZhbHVlLmlzT2JqZWN0KCkpOwogCiAgICAg
SlNWYWx1ZSBuZXdQcm90b3R5cGUgPSBuZXdUYXJnZXQtPmdldCgmZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
SlNPYmplY3QqIGVsZW1lbnRXcmFwcGVyT2JqZWN0ID0gYXNPYmplY3QoZWxlbWVudFdyYXBwZXJW
YWx1ZSk7CiAgICAgSlNPYmplY3Q6OnNldFByb3RvdHlwZShlbGVtZW50V3JhcHBlck9iamVjdCwg
JmV4ZWMsIG5ld1Byb3RvdHlwZSwgdHJ1ZSAvKiBzaG91bGRUaHJvd0lmQ2FudFNldCAqLyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGVsZW1lbnRJbnRlcmZhY2UtPmRp
ZFVwZ3JhZGVMYXN0RWxlbWVudEluQ29uc3RydWN0aW9uU3RhY2soKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZWxlbWVudFdyYXBwZXJWYWx1ZSk7CisgICAgcmV0dXJuIGVsZW1lbnRX
cmFwcGVyVmFsdWU7CiB9CiAKIEpTU2NvcGUqIEpTSFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRs
ZXJTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQzLDcgKzQz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTTXV0YXRpb25PYnNlcnZlcihFeGVj
U3RhdGUmIGV4ZWMpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNNdXRhdGlvbk9i
c2VydmVyKEV4ZWNTdGF0ZSYgZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjEsNyArNjEsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgSlNPYmplY3QqIGpz
T2JzZXJ2ZXIgPSBhc09iamVjdCh0b0pTTmV3bHlDcmVhdGVkKCZleGVjLCBqc0NvbnN0cnVjdG9y
LT5nbG9iYWxPYmplY3QoKSwgTXV0YXRpb25PYnNlcnZlcjo6Y3JlYXRlKFdURk1vdmUoY2FsbGJh
Y2spKSkpOwogICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFtZTsKICAgICBqc09ic2VydmVyLT5w
dXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgb2JqZWN0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzT2JzZXJ2ZXIpOworICAgIHJldHVybiBqc09ic2VydmVyOwogfQogCiBib29sIEpT
TXV0YXRpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOS0yMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOS0yMDEwLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEs
NyArMTIxLDcgQEAgSlNWYWx1ZSBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUmIAogICAg
IEpTVmFsdWUgbmV3Q2hpbGRWYWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAg
IGF1dG8qIG5ld0NoaWxkID0gSlNOb2RlOjp0b1dyYXBwZWQobmV3Q2hpbGRWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFuZXdDaGlsZCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAi
aW5zZXJ0QmVmb3JlIiwgIk5vZGUiKSk7CisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm5vZGUiLCAiTm9kZSIsICJpbnNlcnRCZWZvcmUiLCAi
Tm9kZSIpOwogCiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgd3JhcHBlZCgp
Lmluc2VydEJlZm9yZSgqbmV3Q2hpbGQsIEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKSkpOwogICAgIHJldHVybiBuZXdDaGlsZFZhbHVlOwpAQCAtMTQwLDggKzE0
MCw4IEBAIEpTVmFsdWUgSlNOb2RlOjpyZXBsYWNlQ2hpbGQoRXhlY1N0YXRlJiAKICAgICBhdXRv
KiBvbGRDaGlsZCA9IEpTTm9kZTo6dG9XcmFwcGVkKG9sZENoaWxkVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghbmV3Q2hpbGQgfHwgIW9sZENoaWxkKSkgewogICAgICAgICBpZiAoIW5ld0NoaWxk
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgIm5vZGUiLCAiTm9kZSIsICJyZXBsYWNlQ2hpbGQiLCAiTm9k
ZSIpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMSwgImNoaWxkIiwgIk5vZGUiLCAicmVwbGFjZUNoaWxkIiwgIk5v
ZGUiKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAicmVwbGFjZUNoaWxkIiwgIk5vZGUiKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAiY2hpbGQi
LCAiTm9kZSIsICJyZXBsYWNlQ2hpbGQiLCAiTm9kZSIpOwogICAgIH0KIAogICAgIHByb3BhZ2F0
ZUV4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5yZXBsYWNlQ2hpbGQoKm5ld0NoaWxk
LCAqb2xkQ2hpbGQpKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1ZhbHVlIEpTTm9kZTo6cmVtb3Zl
Q2hpbGQoRXhlY1N0YXRlJiBzCiAgICAgSlNWYWx1ZSBjaGlsZFZhbHVlID0gc3RhdGUuYXJndW1l
bnQoMCk7CiAgICAgYXV0byogY2hpbGQgPSBKU05vZGU6OnRvV3JhcHBlZChjaGlsZFZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNoaWxkKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZSh0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNoaWxkIiwgIk5vZGUi
LCAicmVtb3ZlQ2hpbGQiLCAiTm9kZSIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiY2hpbGQiLCAiTm9kZSIsICJyZW1vdmVDaGlsZCIs
ICJOb2RlIik7CiAKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCB3cmFwcGVk
KCkucmVtb3ZlQ2hpbGQoKmNoaWxkKSk7CiAgICAgcmV0dXJuIGNoaWxkVmFsdWU7CkBAIC0xNzAs
NyArMTcwLDcgQEAgSlNWYWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSYgcwogICAg
IEpTVmFsdWUgbmV3Q2hpbGRWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDApOwogICAgIGF1dG8gbmV3
Q2hpbGQgPSBKU05vZGU6OnRvV3JhcHBlZChuZXdDaGlsZFZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIW5ld0NoaWxkKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm5vZGUiLCAiTm9kZSIsICJhcHBlbmRDaGls
ZCIsICJOb2RlIikpOworICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIDAsICJub2RlIiwgIk5vZGUiLCAiYXBwZW5kQ2hpbGQiLCAiTm9kZSIpOwogCiAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgd3JhcHBlZCgpLmFwcGVuZENoaWxk
KCpuZXdDaGlsZCkpOwogICAgIHJldHVybiBuZXdDaGlsZFZhbHVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTk0
LDE5ICs5NCwxOSBAQCBKU09iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0KEV4ZWNTdGF0ZSogCiAg
ICAgcmV0dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQogICAgIAot
RW5jb2RlZEpTVmFsdWUgcGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBwbHVnaW5FbGVtZW50UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0hU
TUxFbGVtZW50Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTSFRNTEVsZW1l
bnQqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0hUTUxFbGVtZW50Kj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2Ny
aXB0T2JqZWN0KGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIGlmICghc2NyaXB0T2JqZWN0KQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNjcmlw
dE9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBzY3JpcHRPYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCiBib29sIHBsdWdpbkVsZW1lbnRDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTSFRNTEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0x
MzIsNyArMTMyLDcgQEAgYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tUHV0KEV4ZWNTdGF0ZSogZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNIVE1MRWxlbWVudCogZWxl
bWVudCA9IGpzQ2FzdDxKU0hUTUxFbGVtZW50Kj4oZXhlYy0+anNDYWxsZWUoKSk7CiAKQEAgLTE1
MSw3ICsxNTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAK
ICAgICAvLyBDYWxsIHRoZSBvYmplY3QuCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMs
IHNjcmlwdE9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT50aGlzVmFsdWUoKSwgYXJn
dW1lbnRMaXN0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogQ2FsbFR5cGUgcGx1Z2luRWxlbWVudEdldENhbGxEYXRhKEpTSFRN
TEVsZW1lbnQqIGVsZW1lbnQsIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCShy
ZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVs
ZW1lbnRGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDctMjAwOCwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0z
Nyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBKU0M6OkJpbmRpbmdzOjpJbnN0
YW5jZSogcGx1Z2luSW5zdGFuY2UoSFRNTEVsZW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBK
U0M6OkpTT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBKU0hUTUxF
bGVtZW50Kik7CiAKLSAgICBKU0M6OkVuY29kZWRKU1ZhbHVlIHBsdWdpbkVsZW1lbnRQcm9wZXJ0
eUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKKyAgICBKU0M6OkpTVmFsdWUgcGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAgICAgYm9v
bCBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90JiwgSlNIVE1MRWxlbWVudCopOwog
ICAgIGJvb2wgcGx1Z2luRWxlbWVudEN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTSFRNTEVsZW1lbnQqLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCk7CiAgICAgSlNDOjpDYWxsVHlwZSBwbHVnaW5FbGVtZW50
R2V0Q2FsbERhdGEoSlNIVE1MRWxlbWVudCosIEpTQzo6Q2FsbERhdGEmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3Jz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gUHVibGljIEpTIFJlYWRhYmxlU3RyZWFtUmVhZGVyIGFuZCBSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyKEV4ZWNTdGF0ZSYgZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoRXhlY1N0YXRlJiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC00Niw3ICs0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKIAogI2lmIEVOQUJMRShSRUFEQUJMRV9CWVRFX1NUUkVBTV9BUEkpCiAvLyBQdWJs
aWMgSlMgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBjb25zdHJ1Y3RvciBjYWxsYmFjay4K
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyKEV4ZWNTdGF0ZSYgZXhlYykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoRXhlY1N0YXRlJiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC01NCw3ICs1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlMKIH0KICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKEV4ZWNTdGF0ZSYgZXhlYykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRl
cihFeGVjU3RhdGUmIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY4LDcgKzY4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5vQXJndW1lbnRzOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbCgmZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBzdHJlYW0sIG5vQXJndW1lbnRzKSk7CisgICAgcmV0dXJuIGNhbGwoJmV4ZWMsIGpzRnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgc3RyZWFtLCBub0FyZ3VtZW50cyk7CiB9CiAKIC8vIFBy
aXZhdGUgSlMgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGFuZCBSZWFkYWJsZVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyIGNvbnN0cnVjdG9ycy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXb3JrZXIo
RXhlY1N0YXRlJiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dvcmtl
cihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTEsMTMgKzUxLDEzIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKIAogICAgIFN0cmluZyBzY3JpcHRVUkwgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICAvLyBTZWUgc2VjdGlvbiA0LjguMiBzdGVwIDE0IG9mIFdlYldvcmtlcnMgZm9yIHdo
eSB0aGlzIGlzIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgogICAgIGF1dG8mIHdpbmRvdyA9IGFz
SlNET01XaW5kb3coc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwogCiAg
ICAgQVNTRVJUKHdpbmRvdy5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc2NvcGUsIFdvcmtlcjo6Y3Jl
YXRlKCp3aW5kb3cuZG9jdW1lbnQoKSwgc2NyaXB0VVJMLCBnbG9iYWxPYmplY3QucnVudGltZUZs
YWdzKCkpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc2NvcGUsIFdvcmtlcjo6Y3JlYXRlKCp3aW5kb3cuZG9jdW1lbnQoKSwgc2NyaXB0VVJMLCBn
bG9iYWxPYmplY3QucnVudGltZUZsYWdzKCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0dXBNb2R1bGVTY3JpcHQKICAgICBhdXRvJiBmdWxmaWxs
SGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUoc3RhdGUudm0oKSwgc2hlbGwu
d2luZG93KCksIDEsIFN0cmluZygpLCBbbW9kdWxlU2NyaXB0XShFeGVjU3RhdGUqIGV4ZWMpIHsK
ICAgICAgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBqc1ZhbHVlVG9Nb2R1bGVLZXkoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOwogICAgICAgICBtb2R1bGVTY3JpcHQtPm5vdGlmeUxvYWRDb21w
bGV0ZWQoKm1vZHVsZUtleS5pbXBsKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9KTsK
IAogICAgIGF1dG8mIHJlamVjdEhhbmRsZXIgPSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRl
KHN0YXRlLnZtKCksIHNoZWxsLndpbmRvdygpLCAxLCBTdHJpbmcoKSwgW21vZHVsZVNjcmlwdCwg
bW9kdWxlTG9hZGVyQWxyZWFkeVJlcG9ydGVkRXJyb3JTeW1ib2wsIG1vZHVsZUxvYWRlckZldGNo
aW5nSXNDYW5jZWxlZFN5bWJvbF0oRXhlY1N0YXRlKiBleGVjKSB7CkBAIC0zODYsMTIgKzM4Niwx
MiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0CiAgICAgICAgICAg
ICAgICAgICAgIExvYWRhYmxlU2NyaXB0OjpFcnJvclR5cGU6OkNhY2hlZFNjcmlwdCwKICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpudWxsb3B0CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKHN5bWJvbC0+cHJpdmF0ZU5hbWUoKSA9PSBtb2R1bGVMb2FkZXJGZXRjaGluZ0lzQ2Fu
Y2VsZWRTeW1ib2wpIHsKICAgICAgICAgICAgICAgICBtb2R1bGVTY3JpcHQtPm5vdGlmeUxvYWRX
YXNDYW5jZWxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6c2V0dXBNb2R1bGVTY3JpcHQKICAgICAgICAgICAgICAgICByZXRyaWV2ZUVycm9y
TWVzc2FnZSgqZXhlYywgdm0sIGVycm9yLCBzY29wZSksCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0pOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9KTsKIAogICAgIHByb21pc2UudGhlbigm
c3RhdGUsICZmdWxmaWxsSGFuZGxlciwgJnJlamVjdEhhbmRsZXIpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1cmVkQ2xvbmUuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1cmVkQ2xvbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRD
bG9uZUFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RydWN0dXJlZENsb25lQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NF
UlQoc3RhdGUpOwogICAgIEFTU0VSVChzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKQEAgLTQ3LDEw
ICs0NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDCiAgICAg
ICAgIHRocm93RGF0YUNsb25lRXJyb3IoKnN0YXRlLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHN0YXRlLT52bSgpLCBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZl
clN0cnVjdHVyZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlOjpEZWZhdWx0KSwgQXJyYXlCdWZmZXI6
OnRyeUNyZWF0ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpKSk7CisgICAg
cmV0dXJuIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoQXJyYXlCdWZmZXJTaGFyaW5nTW9k
ZTo6RGVmYXVsdCksIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
dWN0dXJlZENsb25lQXJyYXlCdWZmZXJWaWV3KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RydWN0dXJlZENsb25lQXJyYXlCdWZmZXJWaWV3KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKICAgICBBU1NFUlQoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSk7CkBAIC02OSwyOCArNjksMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJ1Y3R1cmVkQwogICAgIGF1dG8gYnVmZmVyQ2xvbmUgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAKICAgICBpZiAoanNEeW5h
bWljRG93bmNhc3Q8SlNJbnQ4QXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNJbnQ4QXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJl
KCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZl
clZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU0ludDhBcnJheTo6Y3JlYXRlKHN0
YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZl
clZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwogICAgIGlmIChqc0R5
bmFtaWNEb3duY2FzdDxKU0ludDE2QXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNJbnQxNkFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVj
dHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBi
dWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNJbnQxNkFycmF5OjpjcmVh
dGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwg
YnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYg
KGpzRHluYW1pY0Rvd25jYXN0PEpTSW50MzJBcnJheSo+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU0ludDMyQXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+
c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0
KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU0ludDMyQXJyYXk6
OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xv
bmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAg
ICBpZiAoanNEeW5hbWljRG93bmNhc3Q8SlNVaW50OEFycmF5Kj4odmFsdWUpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVWludDhBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJW
aWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVP
ZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVWludDhB
cnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZm
ZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkp
OwogICAgIGlmIChqc0R5bmFtaWNEb3duY2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4odmFsdWUp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVWludDhDbGFtcGVkQXJyYXk6OmNy
ZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUp
LCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAg
ICAgIHJldHVybiBKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXct
PnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNl
dCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAgICAgaWYgKGpzRHluYW1pY0Rvd25jYXN0PEpT
VWludDE2QXJyYXkqPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNV
aW50MTZBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92
ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVu
Z3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVWludDE2QXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVm
ZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5i
eXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93
bmNhc3Q8SlNVaW50MzJBcnJheSo+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1VpbnQzMkFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgp
LCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJW
aWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNVaW50MzJBcnJheTo6Y3JlYXRlKHN0
YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZl
clZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpOwogICAgIGlmIChqc0R5
bmFtaWNEb3duY2FzdDxKU0Zsb2F0MzJBcnJheSo+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5z
dHJ1Y3R1cmUoKSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQo
KSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5
OjpjcmVhdGUoc3RhdGUsIGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNs
b25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSk7CiAg
ICAgaWYgKGpzRHluYW1pY0Rvd25jYXN0PEpTRmxvYXQ2NEFycmF5Kj4odmFsdWUpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRmxvYXQ2NEFycmF5OjpjcmVhdGUoc3RhdGUsIGJ1
ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+
Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNG
bG9hdDY0QXJyYXk6OmNyZWF0ZShzdGF0ZSwgYnVmZmVyVmlldy0+c3RydWN0dXJlKCksIFdURk1v
dmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxl
bmd0aCgpKTsKICAgICBpZiAoanNEeW5hbWljRG93bmNhc3Q8SlNEYXRhVmlldyo+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0RhdGFWaWV3OjpjcmVhdGUoc3RhdGUs
IGJ1ZmZlclZpZXctPnN0cnVjdHVyZSgpLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmll
dy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4g
SlNEYXRhVmlldzo6Y3JlYXRlKHN0YXRlLCBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUoKSwgV1RGTW92
ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVu
Z3RoKCkpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U3RydWN0dXJlZENsb25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU3RydWN0dXJlZENsb25lLmgJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE0ICsyNCwx
NSBAQAogICoKICAqLwogCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisKIG5hbWVz
cGFjZSBKU0MgewotdXNpbmcgRW5jb2RlZEpTVmFsdWUgPSBpbnQ2NF90OwogY2xhc3MgRXhlY1N0
YXRlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJ1Y3R1cmVkQ2xvbmVBcnJheUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVm
ZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
dWN0dXJlZENsb25lQXJyYXlCdWZmZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0
ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjEwMjQ3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiBBbmRl
cnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAoQykgMjAwNi0y
MDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxMCwgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1
PgogIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTE4NzIsNyArMTg3Miw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvbmRpdGlv
bmFsQXR0cmlidXRlID8gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdG
cm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsQXR0cmlidXRlKSA6IHVuZGVmOwogICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdl
dEZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVuY3Rpb24pOwotICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rp
b25OYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KIApA
QCAtMTg4OCwxMCArMTg4OCwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAg
ICAgICAgbXkgJGdldHRlciA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
SlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgICAgIGlmICghSXNS
ZWFkb25seSgkYXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgIG15ICRzZXR0ZXIgPSBHZXRB
dHRyaWJ1dGVTZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJib29sICR7c2V0dGVyfShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpO1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KQEAgLTE5MjMsNyArMTkyMyw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgaWYgKEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZh
Y2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIvLyBDdXN0b20gY29uc3RydWN0
b3JcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSYpO1xu
XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSYpO1xuXG4iKTsKICAg
ICB9CiAKICAgICBpZiAoTmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2UpKSB7CkBA
IC0yMzQ5LDkgKzIzNDksOSBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0
cnVjCiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvbmRpdGlvbmFsQXR0cmlidXRlID8g
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFs
dWUoJGNvbmRpdGlvbmFsQXR0cmlidXRlKSA6IHVuZGVmOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAg
ICAgaWYgKCRpc0NvbnN0cnVjdG9yKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVt
cGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInRlbXBsYXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0
YXRlKiBzdGF0ZSlcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOyAg
ICAKIHsKQEAgLTI3NTksNyArMjc1OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29uZGl0aW9uYWxBdHRyaWJ1dGUg
PyAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVW
YWx1ZSgkY29uZGl0aW9uYWxBdHRyaWJ1dGUpIDogdW5kZWY7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgk
aW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5h
bWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0
YXRlKik7XG4iKTsKICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0RPTUpJVH0pIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJET01KSVRJRExU
eXBlLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgbXkgJHVuc2FmZUZ1bmN0aW9uTmFtZSA9ICJ1
bnNhZmUiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uTmFtZSk7CkBAIC0y
Nzg4LDIxICsyNzg4LDIxIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRp
b25hbFN0cmluZygkYXR0cmlidXRlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAg
ICAgICAgICBteSAkZ2V0dGVyID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAk
Y2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgICAgICBpZiAoIUlzUmVh
ZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gR2V0QXR0
cmlidXRlU2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoTmVlZHNDb25z
dHJ1Y3RvclByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0g
ImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAg
IH0KIAogICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGlu
dGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
ImJvb2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgImJvb2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKIAogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIik7CiAgICAgfQpAQCAtMzI4MSwxNyArMzI4MSwxNiBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkY2FzdGluZ0Z1bmN0aW9uID0gJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVByb3h5VG9KU09iamVjdCJ9ID8gInRv
JHtjbGFzc05hbWV9IiA6IEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2Up
OwogICAgICAgICAjIEZJWE1FOiBSZW1vdmUgSW1wbGljaXRUaGlzIGtleXdvcmQgYXMgaXQgaXMg
bm8gbG9uZ2VyIGRlZmluZWQgYnkgV2ViSURMIHNwZWMgYW5kIGlzIG9ubHkgdXNlZCBpbiBET01X
aW5kb3cuCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1w
bGljaXRUaGlzIn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8
PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBCaW5kaW5nQ2FsbGVyPCR7Y2xhc3NOYW1lfT46OmNhc3RG
b3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5lICR7
Y2xhc3NOYW1lfSogQmluZGluZ0NhbGxlcjwke2NsYXNzTmFtZX0+OjpjYXN0Rm9yQXR0cmlidXRl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChkZWNvZGVkVGhp
c1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBkZWNvZGVkVGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCkudG9U
aGlzKCZzdGF0ZSwgTm90U3RyaWN0TW9kZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKGRlY29kZWRUaGlzVmFsdWUpOyIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCkudG9UaGlzKCZzdGF0ZSwgTm90U3Ry
aWN0TW9kZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biAkY2FzdGluZ0Z1bmN0aW9uKHRoaXNWYWx1ZSk7Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogQmluZGluZ0NhbGxl
cjwke2NsYXNzTmFtZX0+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1w
bGF0ZTw+IGlubGluZSAke2NsYXNzTmFtZX0qIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6
Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICRjYXN0aW5nRnVuY3Rpb24odGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzMyOSw3ICszMzI4
LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdl
dHRlcihFeGVjU3RhdGUmLCAke2NsYXNzTmFtZX0mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTtc
blxuIik7CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1Zh
bHVlICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6YXR0cmlidXRlPCR7dGVt
cGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTMzNDAsMTAgKzMz
MzksMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFs
dWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYpO1xuXG4iKTsKIAotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKHN0YXRlKTtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtn
ZXRGdW5jdGlvbk5hbWV9R2V0dGVyKCpzdGF0ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcigqc3Rh
dGUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwog
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFs
dWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpXG4iKTsKQEAgLTM0
NTksMzMgKzM0NTgsMzIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgaWYg
KE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewogICAgICAgICAgICAgbXkg
JGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0
cnVjdG9yIjsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1
ZSAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJKU1ZhbHVlICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8JHtjbGFzc05hbWV9UHJvdG90
eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Rvd25jYXN0PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghZG9tT2Jq
ZWN0KSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTtcbiIpOwogCiAgICAgICAgICAg
ICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vSW50ZXJmYWNlT2JqZWN0
fSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgY29u
c3RydWN0b3IgPSAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCAk
e2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHN0YXRlLT52bSgpLCAqZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgLy8gU2hhZG93aW5nIGNvbnN0cnVjdG9yIHByb3BlcnR5IHRvIGVuc3VyZSByZXVzaW5nIHRo
ZSBzYW1lIGNvbnN0cnVjdG9yIG9iamVjdFxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRP
bmx5KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0b3IpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgIH0K
IAogICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVy
ZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
Ym9vbCAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
O1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3Rv
dHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
VU5MSUtFTFkoIWRvbU9iamVjdCkpIHtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwpAQCAtMzU2
NSw5ICszNTYzLDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBib29sICR7c2V0dGVyRnVuY3Rp
b259KEV4ZWNTdGF0ZSYsICR7Y2xhc3NOYW1lfSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTtcblxu
Iik7CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJib29sICR7cHV0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmlidXRlPCR7
dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCBcIiRu
YW1lXCIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmlidXRlPCR7dGVtcGxhdGVQ
YXJhbWV0ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsIFwiJG5hbWVcIik7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRlckZ1bmN0
aW9ufShFeGVjU3RhdGUmIHN0YXRlLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKQEAgLTM1NzUsMTIgKzM1NzMsMTEg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
Ym9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZVBvaW50ZXIsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
c3RhdGVQb2ludGVyLCBKU1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKVxuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlQoc3RhdGVQb2ludGVyKTtcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHN0YXRlID0gKnN0YXRlUG9pbnRlcjtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NF
UmVhY3Rpb25zfSkgewpAQCAtMzc2NywxMiArMzc2NCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0
aW9uYWxTdHJpbmd9XG4iKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbXkgJGZ1bmN0
aW9uUmV0dXJuID0gIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwiOworICAgICAgICAgICAg
bXkgJGZ1bmN0aW9uUmV0dXJuID0gIkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCI7CiAgICAgICAgICAg
ICBpZiAoISRpc0N1c3RvbSAmJiAkaXNPdmVybG9hZGVkKSB7CiAgICAgICAgICAgICAgICAgIyBB
cHBlbmQgYSBudW1iZXIgdG8gYW4gb3ZlcmxvYWRlZCBtZXRob2QncyBuYW1lIHRvIG1ha2UgaXQg
dW5pcXVlOgogICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1lIC4g
JGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH07CiAgICAgICAgICAgICAgICAgIyBNYWtlIHRoaXMg
ZnVuY3Rpb24gc3RhdGljIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCBzaW5jZSB3ZSBkb24n
dCBnZW5lcmF0ZSBhIHByb3RvdHlwZSBmb3IgaXQgaW4gdGhlIGhlYWRlci4KLSAgICAgICAgICAg
ICAgICAkZnVuY3Rpb25SZXR1cm4gPSAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSI7Cisg
ICAgICAgICAgICAgICAgJGZ1bmN0aW9uUmV0dXJuID0gInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSI7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9u
TmFtZSA9ICRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwg
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0aW9uLT5uYW1lKTsKQEAgLTM3ODIsMjIg
KzM3NzksMjIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICgh
JGZ1bmN0aW9uLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgIG15ICRjbGFzc1BhcmFtZXRl
clR5cGUgPSAkY2xhc3NOYW1lIGVxICJKU0V2ZW50VGFyZ2V0IiA/ICJKU0V2ZW50VGFyZ2V0V3Jh
cHBlcioiIDogIiR7Y2xhc3NOYW1lfSoiOwogICAgICAgICAgICAgICAgIG15ICRvcHRpb25hbFBy
b21pc2VQYXJhbWV0ZXIgPSAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikgJiYgISRpc0N1
c3RvbSkgPyAiIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIiA6ICIiOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7
ZnVuY3Rpb25OYW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosICR7Y2xhc3NQYXJhbWV0ZXJUeXBl
fSwke29wdGlvbmFsUHJvbWlzZVBhcmFtZXRlcn0gSlNDOjpUaHJvd1Njb3BlJik7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosICR7Y2xhc3NQYXJhbWV0
ZXJUeXBlfSwke29wdGlvbmFsUHJvbWlzZVBhcmFtZXRlcn0gSlNDOjpUaHJvd1Njb3BlJik7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSAmJiAh
JGlzQ3VzdG9tKSB7CiAgICAgICAgICAgICAgICAgbXkgJHNjb3BlID0gJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57RXhwb3NlZH0gPyAiV2luZG93T3JXb3JrZXIiIDogIldpbmRvd09u
bHkiOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKTsKK3N0YXRpYyBKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2Uo
RXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKICR7ZnVuY3Rpb25SZXR1cm59
ICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rp
b25OYW1lfVByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6JHtzY29wZX0+KCpzdGF0ZSkp
OworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rpb25OYW1lfVByb21pc2Us
IFByb21pc2VFeGVjdXRpb25TY29wZTo6JHtzY29wZX0+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqIHN0
YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmIHByb21pc2UpCiBFTkQKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2Z1bmN0aW9uUmV0dXJufSAke2Z1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwpAQCAtMzgxNSw3ICszODEyLDcgQEAgRU5ECiAgICAg
ICAgICAgICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgIGlmICgk
aXNDdXN0b20pIHsKICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVBcmd1bWVudHNDb3VudENo
ZWNrKFxAaW1wbENvbnRlbnQsICRmdW5jdGlvbiwgJGludGVyZmFjZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtj
bGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihzdGF0ZSkpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAk
e2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKHN0YXRlKTtc
biIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pO1xuIik7CkBAIC0zODM0LDcgKzM4MzEsNyBAQCBFTkQKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8JGNsYXNzTmFtZT46OmNhbGxQcm9taXNlT3BlcmF0aW9uPCR7dGVtcGxhdGVQYXJhbWV0ZXJz
fT4oc3RhdGUsIFdURk1vdmUocHJvbWlzZSksIFwiJHttZXRob2ROYW1lfVwiKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVu
Y3Rpb25OYW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2Fz
dGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbXkgJGNsYXNzUGFyYW1l
dGVyVHlwZSA9ICRjbGFzc05hbWUgZXEgIkpTRXZlbnRUYXJnZXQiID8gIkpTRXZlbnRUYXJnZXRX
cmFwcGVyKiIgOiAiJHtjbGFzc05hbWV9KiI7CiAgICAgICAgICAgICAgICAgICAgIG15ICR0ZW1w
bGF0ZVBhcmFtZXRlcnMgPSAiJHtmdW5jdGlvbk5hbWV9Q2FsbGVyIjsKQEAgLTM4NDksNyArMzg0
Niw3IEBAIEVORAogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjwkY2xhc3NOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3RlbXBsYXRl
UGFyYW1ldGVyc30+KHN0YXRlLCBcIiR7bWV0aG9kTmFtZX1cIik7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFt
ZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzUGFyYW1ldGVyVHlwZX0gY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgJHtm
dW5jdGlvbk5hbWV9Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc1BhcmFtZXRl
clR5cGV9IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CkBAIC0zODYyLDExICszODU5LDExIEBAIEVORAogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAo
JGlzQ3VzdG9tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVu
dGF0aW9uTmFtZSAuICIoKnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgLiAiKCpzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7CiAKQEAgLTQxODksNyArNDE4Niw3IEBAIHN1YiBH
ZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgogICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90
eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5j
dGlvbk5hbWUpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmg+Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1DYWxsZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlMkaW50ZXJmYWNlTmFtZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpT
VmFsdWUgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUNhbGxlcihFeGVjU3RhdGUqIHN0
YXRlLCBKUyRpbnRlcmZhY2VOYW1lKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0
ZSk7XG4iKTsKQEAgLTQyMTksMTAgKzQyMTYsMTAgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1
bmN0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9CiAKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5h
dGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlMkaW50ZXJmYWNlTmFtZT46OmNhbGxPcGVyYXRpb248JHtzZXJpYWxpemVyTmF0
aXZlRnVuY3Rpb25OYW1lfUNhbGxlcj4oc3RhdGUsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVc
Iik7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwpAQCAtNDM5NSw3ICs0Mzky
LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgaWYgKCEkZnVuY3Rpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0cnVjdG9yfSkgewogICAgICAgICBteSAkbmFtZSA9ICRm
dW5jdGlvbi0+bmFtZTsKICAgICAgICAgJHF1b3RlZEZ1bmN0aW9uTmFtZSA9ICJcIiRuYW1lXCIi
OwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJz
KCRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJh
eSwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIsICRmdW5jdGlvbikpOworICAgICAg
ICBwdXNoKEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzKCRmdW5jdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRvdXRwdXRBcnJheSwgImpzVW5k
ZWZpbmVkKCkiLCAkZnVuY3Rpb24pKTsKICAgICB9IGVsc2UgewogICAgICAgICAkcXVvdGVkRnVu
Y3Rpb25OYW1lID0gIm51bGxwdHIiOwogICAgIH0KQEAgLTQ0NDAsNyArNDQzNyw3IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgbXkgJElETFR5cGUgPSBHZXRJRExU
eXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKIAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGF1dG8gJHtuYW1lfSA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50czwke0lETFR5cGV9
Pigqc3RhdGUsICR7YXJndW1lbnRJbmRleH0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTtcbiIpOwogCiAgICAgICAgICAgICAkdmFs
dWUgPSAiV1RGTW92ZSgke25hbWV9LmFyZ3VtZW50cy52YWx1ZSgpKSI7CiAKQEAgLTQ0NzgsNyAr
NDQ3NSw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogCiAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJKUyRjbGFzc05hbWUuaCJ9ID0gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNFeHRl
cm5hbEVudW1UeXBlKCR0eXBlKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRp
bmRlbnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPCRjbGFzc05h
bWU+KCpzdGF0ZSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiJGluZGVudCAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5k
ZW50ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoISRvcHRp
b25hbFZhbHVlKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVu
dCAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAkYXJndW1lbnRJbmRleCwgXCIkbmFtZVwiLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFt
ZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPCRjbGFz
c05hbWU+KCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50
ICAgICRuYW1lID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpO1xuIikgaWYgJG9wdGlvbmFsVmFsdWUg
bmUgJG5hbWU7CkBAIC00NTE0LDcgKzQ1MTEsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hl
Y2sKICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlUaHJvd0V4Y2VwdGlvbikgPSBK
U1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkaW5uZXIsICRjb25kaXRpb25h
bCwgInN0YXRlIiwgIipzdGF0ZSIsICIqY2FzdGVkVGhpcyIsICRnbG9iYWxPYmplY3RSZWZlcmVu
Y2UsICRhcmd1bWVudEV4Y2VwdGlvblRocm93ZXIpOwogCiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byAkbmFtZSA9ICR7b3V0ZXJ9JHtuYXRpdmVWYWx1ZX07XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xuIikgaWYgJG1heVRocm93RXhjZXB0aW9u
OworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTtcbiIpIGlmICRtYXlUaHJvd0V4Y2VwdGlvbjsKIAogICAgICAg
ICAgICAgJHZhbHVlID0gUGFzc0FyZ3VtZW50RXhwcmVzc2lvbigkbmFtZSwgJGFyZ3VtZW50KTsK
ICAgICAgICAgfQpAQCAtNDg4NywxMCArNDg4NCwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uQ2FsbCgpCiAKICAgICBpZiAoJGZ1bmN0aW9uLT50eXBlLT5uYW1lIGVxICJ2
b2lkIiB8fCBJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSkgewogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXR1
cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR0aGlzT2Jq
ZWN0ID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/IDAgOiAiY2FzdGVkVGhpcyI7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUoIiAuIE5h
dGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJGZ1bmN0aW9uLCAxLCAkaW50ZXJmYWNlLCAkZnVu
Y3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICIpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAkaW5kZW50IC4gInJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVy
cygkZnVuY3Rpb24sIDEsICRpbnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3Qp
IC4gIjtcbiIpOwogICAgIH0KIH0KIApAQCAtNDk1Niw5ICs0OTUzLDkgQEAgRU5ECiAKICAgICAg
ICAgaWYgKCRwcm9wZXJ0eU5hbWUgZXEgImZvckVhY2giKSB7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIDw8RU5EKTsKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5j
dGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGludGVyZmFjZU5hbWUqIHRoaXNP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlMkaW50ZXJmYWNlTmFt
ZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JGb3JFYWNoPCR7aXRlcmF0b3JOYW1lfT4oKnN0YXRl
LCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOworICAgIHJldHVybiBpdGVyYXRvckZvckVhY2g8
JHtpdGVyYXRvck5hbWV9Pigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAog
RU5ECkBAIC00OTY5LDE2ICs0OTY2LDE2IEBAIEVORAogICAgICAgICAgICAgJGl0ZXJhdGlvbktp
bmQgPSAiVmFsdWUiIGlmICRwcm9wZXJ0eU5hbWUgZXEgIltTeW1ib2wuSXRlcmF0b3JdIiBhbmQg
bm90ICRpbnRlcmZhY2UtPml0ZXJhYmxlLT5pc0tleVZhbHVlOwogCiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIDw8RU5EKTsKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtm
dW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSosIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtmdW5jdGlvbk5h
bWV9Q2FsbGVyKEV4ZWNTdGF0ZSosIEpTJGludGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0
ZTwke2l0ZXJhdG9yTmFtZX0+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjoke2l0ZXJhdGlv
bktpbmR9KSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPCR7aXRlcmF0b3JOYW1lfT4oKnRo
aXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OiR7aXRlcmF0aW9uS2luZH0pOwogfQogCiBFTkQKICAg
ICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAgPDxFTkQpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPCRjbGFzc05hbWU+
OjpjYWxsT3BlcmF0aW9uPCR7ZnVuY3Rpb25OYW1lfUNhbGxlcj4oc3RhdGUsICIke3Byb3BlcnR5
TmFtZX0iKTsKIH0KQEAgLTU4MDcsNyArNTgwNCw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9y
RGVmaW5pdGlvbgogCiAgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkaW50ZXJmYWNlKSkgewogICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ29uc3RydWN0
b3J9KSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29u
c3RydWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChleGVjKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oKmV4ZWMpO1xu
Iik7CkBAIC01ODE1LDkgKzU4MTIsOSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRp
b24KICAgICAgICAgIH0gZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSAm
JiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05hbWVkQ29uc3RydWN0b3J9IHx8
ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikpIHsKICAgICAgICAgICAgIG15ICRpc092ZXJs
b2FkZWQgPSAkZnVuY3Rpb24tPntvdmVybG9hZHN9ICYmIEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRz
fX0gPiAxOwogICAgICAgICAgICAgaWYgKCRpc092ZXJsb2FkZWQpIHsKLSAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0
cnVjdCR7Y2xhc3NOYW1lfSRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9KEV4ZWNTdGF0ZSogc3Rh
dGUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgY29uc3RydWN0JHtjbGFzc05hbWV9JGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRl
eH0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUq
IHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxh
dGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0
cnVjdChFeGVjU3RhdGUqIHN0YXRlKVxuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwpAQCAtNTg3NCw3ICs1ODcxLDcgQEAgc3ViIEdl
bmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGF1dG8gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCR7Y29u
c3RydWN0b3JBcmd9KTtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTtcbiIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0cnVjdG9yQ2FsbFdpdGh9
LCAiU2NyaXB0U3RhdGUiKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7XG4iKSBpZiAkY29kZUdlbmVyYXRv
ci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDb25zdHJ1Y3RvckNhbGxXaXRofSwgIlNjcmlwdFN0YXRlIik7CiAKICAgICAgICAgICAg
IG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlLT50eXBlKTsK
IApAQCAtNTg4NCw3ICs1ODgxLDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
CiAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3Rpb25Db252ZXJzaW9uQXJndW1lbnRzLCAidGhy
b3dTY29wZSIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbnN0cnVjdG9y
TWF5VGhyb3dFeGNlcHRpb259OwogICAgICAgICAgICAgcHVzaChAY29uc3RydWN0aW9uQ29udmVy
c2lvbkFyZ3VtZW50cywgIldURk1vdmUob2JqZWN0KSIpOwogCi0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
PCR7SURMVHlwZX0+KCIgLiBqb2luKCIsICIsIEBjb25zdHJ1Y3Rpb25Db252ZXJzaW9uQXJndW1l
bnRzKSAuICIpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkPCR7SURMVHlwZX0+KCIgLiBqb2luKCIsICIsIEBjb25zdHJ1
Y3Rpb25Db252ZXJzaW9uQXJndW1lbnRzKSAuICIpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJm
YWNlTmFtZS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU0lu
dGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU0ludGVyZmFjZU5hbWVQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEyMiwy
MiArMTIyLDIxIEBAIHZvaWQgSlNJbnRlcmZhY2VOYW1lOjpkZXN0cm95KEpTQzo6SlNDZWwKICAg
ICB0aGlzT2JqZWN0LT5KU0ludGVyZmFjZU5hbWU6On5KU0ludGVyZmFjZU5hbWUoKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzSW50
ZXJmYWNlTmFtZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNJbnRlcmZhY2VOYW1l
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0ludGVyZmFjZU5hbWVQ
cm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNJbnRlcmZhY2VO
YW1lUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0ludGVyZmFjZU5h
bWVQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNJbnRlcmZhY2VOYW1lOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU0lu
dGVyZmFjZU5hbWU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTSW50ZXJmYWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIEpTSW50ZXJmYWNlTmFtZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVu
Y3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlv
bkV4Y2l0aW5nRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2Uo
SlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEFjdGl2ZURP
TU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
RXhjaXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQ3LDkg
KzE0Nyw5IEBAIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzoKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RBY3RpdmVET01PYmplY3Q6On5KU1Rlc3RBY3RpdmVET01PYmplY3Qo
KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRl
JiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3RG
b3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZl
RE9NT2JqZWN0Kj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0KiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3RG
b3JPcGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTE1OSw3ICsxNTksNyBAQCB0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RBY3RpdmVET01PYmplY3QqCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
QWN0aXZlRE9NT2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5n
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImV4Y2l0aW5nQXR0ciIpOwogfQpAQCAtMTc1
LDIyICsxNzUsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iagog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9i
amVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVj
dCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBy
ZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
ZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEFjdGl2ZURP
TU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDQsMzYgKzIwMywzNiBAQCBKU1Zh
bHVlIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29uc3RyCiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxj
b25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVu
Y3Rpb25FeGNpdGluZ0Z1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25D
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5j
dGlvbkV4Y2l0aW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkNhbGxlcj4oc3Rh
dGUsICJleGNpdGluZ0Z1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVu
Y3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01PYmplY3Qq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRp
bmdGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9i
amVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUsIGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBuZXh0Q2hpbGQgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxOb2RlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm5leHRDaGlsZCIsICJUZXN0QWN0aXZlRE9NT2JqZWN0
IiwgImV4Y2l0aW5nRnVuY3Rpb24iLCAiTm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24oKm5leHRDaGls
ZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2VDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdl
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhbGxPcGVy
YXRpb248anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZUNh
bGxlcj4oc3RhdGUsICJwb3N0TWVzc2FnZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVz
c2FnZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVz
c2FnZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMjQxLDkgKzI0
MCw5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5wb3N0TWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCiBib29sIEpTVGVzdEFjdGl2ZURPTU9iamVjdE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAy
MTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VS
ZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnMoSlND
OjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RD
RVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0NvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdENFUmVhY3Rpb25zUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDEs
OSArMTQxLDkgQEAgdm9pZCBKU1Rlc3RDRVJlYWN0aW9uczo6ZGVzdHJveShKU0M6OkpTQwogICAg
IHRoaXNPYmplY3QtPkpTVGVzdENFUmVhY3Rpb25zOjp+SlNUZXN0Q0VSZWFjdGlvbnMoKTsKIH0K
IAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0Q0VSZWFjdGlvbnM+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zKiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUm
LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0Q0VSZWFjdGlvbnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJu
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zKj4odGhpc1ZhbHVlKTsKIH0KIAog
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbmRpbmdDYWxsZXI8SlNUZXN0
Q0VSZWFjdGlvbnM+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNTMs
NyArMTUzLDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnMqIEJpbgogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjphdHRy
aWJ1dGU8anNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKIH0KQEAgLTE2OSw3
ICsxNjksNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlvbnMmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZs
ZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Jl
ZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RDRVJlYWN0aW9ucz46OmF0dHJpYnV0ZTxqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zIik7CiB9CkBAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RDRVJlYWN0aW9ucyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0Q0VSZWFjdGlvbnM+OjphdHRyaWJ1dGU8anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7
CiB9CkBAIC0xOTksMjIgKzE5OSwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VS
ZWFjdGlvbnNTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5
cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0Q0VSZWFjdGlvbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdENFUmVh
Y3Rpb25zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgSlNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjUsOSArMjI0
LDkgQEAgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEV4ZQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RDRVJlYWN0aW9ucyYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJhdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnMiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VS
ZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC0yNDUsOSArMjQ0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVh
Y3Rpb25zQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0
QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFj
dGlvbnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnMiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9ucz46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0QXR0cmlidXRl
V2l0aENFUmVhY3Rpb25zIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJl
YWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTI2NSw5ICsyNjQsOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
Q0VSZWFjdGlvbnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RDRVJlYWN0aW9ucz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ2lm
aWVyQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC0yODksMjEgKzI4OCwyMSBAQCBKU1ZhbHVlIEpTVGVzdENFUmVhY3Rpb25zOjpn
ZXRDb25zdHJ1Y3RvCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENFUmVhY3Rp
b25zQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0Q0VSZWFjdGlvbnMqLCBKU0M6OlRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RD
RVJlYWN0aW9ucyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFj
dGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDRVJl
YWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQ0VSZWFjdGlvbnNDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENFUmVhY3Rpb25zIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnNDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaW1wbC5tZXRob2RXaXRoQ0VSZWFjdGlvbnMoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBi
b29sIEpTVGVzdENFUmVhY3Rpb25zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDE0ICszNSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVG
dW5jdGlvblRvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7
CitKU0M6OkpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtMTMzLDkgKzEzMyw5IEBAIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cjo6ZGVzdHIKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp+
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXI+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIqIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmNhc3RG
b3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXI+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUp
CkBAIC0xNDUsNyArMTQ1LDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
clZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
Pjo6YXR0cmlidXRlPGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7CiB9CkBAIC0xNTksMjIgKzE1OSwyMSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJv
dG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwogfQogCi1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGUqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1
LDkgKzE4NCw5IEBAIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnMKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
cj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidmFsdWUiKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMjA4LDE5ICsyMDcsMTkgQEAgSlNWYWx1ZSBK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpnZQogICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0
PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJv
dG90eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXIqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRv
U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ciosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZ0NhbGxlcj4oc3RhdGUsICJ0b1N0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1
bmN0aW9uVG9TdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
UHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1w
bC52YWx1ZSgpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwu
dmFsdWUoKSk7CiB9CiAKIGJvb2wgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllck93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAy
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICsz
Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMjgsMjIgKzEyOCwyMSBAQCB2b2lkIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCiAgICAgdGhpc09iamVjdC0+SlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvcigpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmpl
Y3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgogCiB1c2luZyBKU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD47CiAKLXRlbXBs
YXRlPD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3RlbXBsYXRlPD4gSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChleGVjKTsKICAgICBy
ZXR1cm4gY29uc3RydWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3QoKmV4ZWMpOwpAQCAtMTI4LDI1ICsxMjgsMjQgQEAgdm9pZCBKU1Rlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZgogICAgIHRoaXNPYmplY3QtPkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0Ojp+SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoc3Rh
dGUtPnZtKCksIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgKmRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
ICAgICAvLyBTaGFkb3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcg
dGhlIHNhbWUgY29uc3RydWN0b3Igb2JqZWN0CiAgICAgZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3Rh
dGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9y
LCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0
cnVjdG9yKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlw
ZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjUwogaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQogCiAvLyBDdXN0b20gY29uc3RydWN0b3IKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdChKU0M6OkV4ZWNTdGF0ZSYpOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoSlNDOjpFeGVj
U3RhdGUmKTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4gewogICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rp
b25Bbm90aGVyRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVu
Y3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNzAsMjIgKzE3MCwyMSBAQCB0ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5OSwxNCArMTk4LDE0IEBAIEpTVmFs
dWUgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldENvbnMKICAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
RnVuY3Rpb25Bbm90aGVyRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlciosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5j
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj46OmNhbGxPcGVyYXRp
b248anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlv
bkNhbGxlcj4oc3RhdGUsICJhbm90aGVyRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rp
b25Bbm90aGVyRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5
cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC0yMTQsOSArMjEzLDkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuYW5vdGhlckZ1bmN0aW9uKFdURk1vdmUoc3Ry
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAogYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJ
KHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw1NiArNDIsNTYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uR2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklU
OjpJRExKU0FyZ3VtZW50VHlwZTxJRExET01TdHJpbmc+KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW0oSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlw
ZUZ1bmN0aW9uSXRlbShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMVW5z
aWduZWRTaG9ydD4sIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMVW5zaWduZWRTaG9ydD4p
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlw
ZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUpz
VGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0RE9NSklUKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25H
ZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5
SWQoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1lbnRU
eXBlPElETERPTVN0cmluZz4pOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdl
dEVsZW1lbnRzQnlOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklUOjpJ
RExKU0FyZ3VtZW50VHlwZTxJRExET01TdHJpbmc+KTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEFueUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRCeXRlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
VW5zaWduZWRMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xv
bmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVEJ5dGVTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZT
dHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdERPTUpJVENvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUQW55QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJ
VEJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RE
T01KSVRPY3RldEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVExv
bmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklURmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVk
RmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERP
TUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01K
SVRVc3ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxh
YmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0RE9NSklUU2hvcnROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNo
b3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERP
TUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25n
TG9uZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3Ry
aWN0ZWREb3VibGVOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdOdWxs
YWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0RE9NSklU
Tm9kZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOwogCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBjb25zdCBKU0M6OkRPTUpJVDo6U2ln
bmF0dXJlIERPTUpJVFNpZ25hdHVyZUZvclRlc3RET01KSVRHZXRBdHRyaWJ1dGUoKHVpbnRwdHJf
dCl1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZSwgRE9NSklU
OjpjaGVja0RPTTxUZXN0RE9NSklUPiwgSlNUZXN0RE9NSklUOjppbmZvKCksIEpTQzo6RE9NSklU
OjpFZmZlY3Q6OmZvclJlYWQoRE9NSklUOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpET00pLCBE
T01KSVQ6OklETFJlc3VsdFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj46OnZh
bHVlLCBET01KSVQ6OklETEFyZ3VtZW50VHlwZUZpbHRlcjxJRExET01TdHJpbmc+Ojp2YWx1ZSk7
CkBAIC0yNDMsOSArMjQzLDkgQEAgSlNPYmplY3QqIEpTVGVzdERPTUpJVDo6cHJvdG90eXBlKFZN
JiB2bQogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RE9NSklUPih2bSwgZ2xvYmFs
T2JqZWN0KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdERPTUpJVD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RE9NSklUKiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdERPTUpJVD46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1
ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdERPTUpJ
VCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0RE9NSklUKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0RE9NSklUKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmNhc3RGb3JPcGVyYXRp
b24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTI1NSw3ICsyNTUsNyBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RET01KSVQqIEJpbmRpbmdDCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
T01KSVRBbnlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEFueUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJhbnlBdHRyIik7CiB9CkBAIC0yODIsNyArMjgyLDcgQEAgSlNDOjpET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRCb29sZWFuQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImJvb2xlYW5BdHRyIik7CiB9CkBAIC0zMDksNyArMzA5LDcgQEAg
SlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9N
SklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVEJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRCeXRlQXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7CiB9CkBAIC0zMzYsNyArMzM2LDcg
QEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRPY3Rl
dEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJvY3RldEF0dHIiKTsKIH0KQEAgLTM2Myw3
ICszNjMsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUU2hvcnRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERP
TUpJVFNob3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQpA
QCAtMzkwLDcgKzM5MCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRl
clMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQpAQCAtNDE3LDcg
KzQxNyw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklU
TG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOwogfQpAQCAtNDQ0
LDcgKzQ0NCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01K
SVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0ckdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0F0dHIiKTsKIH0KQEAgLTQ3MSw3ICs0NzEsNyBAQCBK
U0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJ
VExvbmdMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwog
fQpAQCAtNDk4LDcgKzQ5OCw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdl
dHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xv
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRM
b25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0
ciIpOwogfQpAQCAtNTI1LDcgKzUyNSw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRv
bUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RET01KSVRGbG9hdEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojph
dHRyaWJ1dGU8anNUZXN0RE9NSklURmxvYXRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
ZmxvYXRBdHRyIik7CiB9CkBAIC01NTIsNyArNTUyLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNl
dHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
VW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJl
c3RyaWN0ZWRGbG9hdEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rl
c3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1
bnJlc3RyaWN0ZWRGbG9hdEF0dHIiKTsKIH0KQEAgLTU3OSw3ICs1NzksNyBAQCBKU0M6OkRPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVREb3VibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb3Vi
bGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVERvdWJsZUF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJkb3VibGVBdHRyIik7CiB9CkBAIC02MDYsNyArNjA2LDcg
QEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0ckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5yZXN0cmljdGVkRG91YmxlQXR0ciIpOwogfQpA
QCAtNjMzLDcgKzYzMyw3IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRl
clMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dERPTUpJVERvbVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+
OjphdHRyaWJ1dGU8anNUZXN0RE9NSklURG9tU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImRvbVN0cmluZ0F0dHIiKTsKIH0KQEAgLTY2MCw3ICs2NjAsNyBAQCBKU0M6OkRPTUpJ
VDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQm
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
Qnl0ZVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEJ5
dGVTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHIiKTsK
IH0KQEAgLTY4Nyw3ICs2ODcsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRH
ZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9N
SklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJ1c3ZTdHJpbmdBdHRyIik7CiB9CkBAIC03MTQsNyArNzE0LDcgQEAgSlNDOjpE
T01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUTm9kZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5v
ZGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVROb2RlQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgIm5vZGVBdHRyIik7CiB9CkBAIC03NDEsNyArNzQxLDcgQEAgSlND
OjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUQm9v
bGVhbk51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0
dHJpYnV0ZTxqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAiYm9vbGVhbk51bGxhYmxlQXR0ciIpOwogfQpAQCAtNzY4LDcgKzc2OCw3IEBAIEpT
Qzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxs
YWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+OjphdHRyaWJ1dGU8
anNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImJ5
dGVOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTc5NSw3ICs3OTUsNyBAQCBKU0M6OkRPTUpJVDo6R2V0
dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
T01KSVRPY3RldE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0
ZXROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJ
VE9jdGV0TnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXROdWxsYWJs
ZUF0dHIiKTsKIH0KQEAgLTgyMiw3ICs4MjIsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVy
KiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9y
dE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUU2hvcnROdWxsYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFNob3J0TnVs
bGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic2hvcnROdWxsYWJsZUF0dHIiKTsK
IH0KQEAgLTg0OSw3ICs4NDksNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRH
ZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0
TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0
TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVz
dERPTUpJVFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJ1bnNpZ25lZFNob3J0TnVsbGFibGVBdHRyIik7CiB9CkBAIC04NzYsNyArODc2LDcgQEAgSlND
OjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxh
YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxq
c1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibG9u
Z051bGxhYmxlQXR0ciIpOwogfQpAQCAtOTAzLDcgKzkwMyw3IEBAIEpTQzo6RE9NSklUOjpHZXR0
ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERP
TUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01K
SVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZExvbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojph
dHRyaWJ1dGU8anNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTnVsbGFibGVBdHRyIik7CiB9CkBAIC05MzAsNyAr
OTMwLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0ckdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nTnVsbGFibGVBdHRyIik7CiB9CkBAIC05
NTcsNyArOTU3LDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwog
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxh
YmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051
bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxl
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rl
c3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAidW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogfQpAQCAtOTg0LDcgKzk4NCw3
IEBAIEpTQzo6RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklU
RmxvYXROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojph
dHRyaWJ1dGU8anNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJmbG9hdE51bGxhYmxlQXR0ciIpOwogfQpAQCAtMTAxMSw3ICsxMDExLDcgQEAgSlND
OjpET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3Ry
aWN0ZWRGbG9hdE51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJp
Y3RlZEZsb2F0TnVsbGFibGVBdHRyIik7CiB9CkBAIC0xMDM4LDcgKzEwMzgsNyBAQCBKU0M6OkRP
TUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
RE9NSklUJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVERvdWJsZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVs
bGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRl
PGpzVGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImRvdWJsZU51bGxhYmxlQXR0ciIpOwogfQpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgSlNDOjpET01K
SVQ6OkdldHRlclNldHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVRVbnJlc3RyaWN0
ZWREb3VibGVOdWxsYWJsZUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0
ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKIH0KQEAgLTEwOTIsNyArMTA5Miw3IEBAIEpTQzo6RE9N
SklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVEdldHRlclMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RET01KSVQmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RET01KSVREb21T
dHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RET01KSVQ+Ojph
dHRyaWJ1dGU8anNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPihzdGF0ZSwg
dGhpc1ZhbHVlLCAiZG9tU3RyaW5nTnVsbGFibGVBdHRyIik7CiB9CkBAIC0xMTE5LDcgKzExMTks
NyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRHZXR0ZXJTCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdERPTUpJVCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJieXRlU3RyaW5nTnVsbGFibGVBdHRyIik7CiB9
CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVRH
ZXR0ZXJTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxs
YWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0RE9NSklUJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxl
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6YXR0cmlidXRlPGpzVGVzdERPTUpJVFVzdlN0
cmluZ051bGxhYmxlQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ051bGxh
YmxlQXR0ciIpOwogfQpAQCAtMTE3Myw3ICsxMTczLDcgQEAgSlNDOjpET01KSVQ6OkdldHRlclNl
dHRlciogZG9tSklUR2V0dGVyUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Tm9kZU51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RET01KSVQmLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxh
YmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmF0dHJpYnV0ZTxqc1Rlc3RET01KSVROb2RlTnVs
bGFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibm9kZU51bGxhYmxlQXR0ciIpOwog
fQpAQCAtMTE5OCwyMiArMTE5OCwyMSBAQCBKU0M6OkRPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21K
SVRHZXR0ZXJTCiAgICAgcmV0dXJuICZjb21waWxlci5nZXQoKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RE9NSklUUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RET01KSVRQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RE9NSklUUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RET01KSVRQcm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
RE9NSklUOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RET01KSVQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RET01K
SVRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0RE9NSklUQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdERPTUpJVFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0RE9NSklUUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMjcsMTQgKzEyMjYs
MTQgQEAgSlNWYWx1ZSBKU1Rlc3RET01KSVQ6OmdldENvbnN0cnVjdG9yKFZNJgogICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RET01KSVRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0
QXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkdldEF0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJ
VCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RET01KSVQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9u
R2V0QXR0cmlidXRlQ2FsbGVyPihzdGF0ZSwgImdldEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25H
ZXRBdHRyaWJ1dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC0xMjQyLDggKzEyNDEsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpz
dGF0ZSwgaW1wbC5nZXRBdHRyaWJ1dGUoV1RGTW92ZShuYW1lKSkpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8
SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLmdldEF0dHJpYnV0ZShXVEZNb3ZlKG5hbWUpKSk7
CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdERPTUpJVCogY2FzdGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExET01T
dHJpbmc+IGVuY29kZWROYW1lKQpAQCAtMTI1OSwxNCArMTI1OCwxNCBAQCBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgaW1wbC5nZXRBdHRyaWJ1dGUo
V1RGTW92ZShuYW1lKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0RE9NSklUKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25JdGVtKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0RE9NSklUPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkl0ZW1DYWxsZXI+KHN0YXRlLCAiaXRlbSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkl0ZW1DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RE
T01KSVQqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTEy
NzQsMTAgKzEyNzMsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB4ID0gY29udmVydDxJRExVbnNpZ25lZFNo
b3J0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGF1dG8geSA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpzdGF0ZSwgaW1wbC5pdGVtKFdURk1vdmUoeCksIFdURk1vdmUoeSkpKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCBpbXBsLml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkpOwogfQog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gdW5zYWZlSnNUZXN0RE9NSklUUHJv
dG90eXBlRnVuY3Rpb25JdGVtKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBj
YXN0ZWRUaGlzLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVu
Y29kZWRYLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29k
ZWRZKQpAQCAtMTI5NSwxOSArMTI5NCwxOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gdW5zYWZlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmlu
Zz4oKnN0YXRlLCBpbXBsLml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uSGFzQXR0cmlidXRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25IYXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RET01KSVQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uSGFzQXR0cmlidXRlQ2FsbGVyPihzdGF0ZSwgImhhc0F0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25IYXNBdHRyaWJ1dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01K
SVQqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVh
bj4oaW1wbC5oYXNBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiB0b0pTPElETEJvb2xlYW4+KGlt
cGwuaGFzQXR0cmlidXRlKCkpOwogfQogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gdW5zYWZlSnNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMpCkBAIC0xMzIxLDE0ICsx
MzIwLDE0IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5oYXNBdHRyaWJ1dGUo
KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
UHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdERPTUpJVCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudEJ5SWQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RE9NSklUPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyPihzdGF0ZSwg
ImdldEVsZW1lbnRCeUlkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RET01KSVRQ
cm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC0xMzM2LDggKzEzMzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21p
Y1N0cmluZyhzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4
aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETElu
dGVyZmFjZTxFbGVtZW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiB9CiAKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiB1bnNhZmVKc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0
ZWRUaGlzLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETERPTVN0cmluZz4gZW5jb2RlZEVs
ZW1lbnRJZCkKQEAgLTEzNTMsMTQgKzEzNTIsMTQgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIHVuc2FmZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRl
cmZhY2U8RWxlbWVudD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVudElkKSkpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudHNCeU5hbWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RET01KSVQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdERPTUpJVD46OmNhbGxPcGVyYXRpb248anNUZXN0RE9NSklU
UHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUNhbGxlcj4oc3RhdGUsICJnZXRFbGVt
ZW50c0J5TmFtZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0RE9NSklUUHJv
dG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwpAQCAtMTM2OCw4ICsxMzY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBlbGVtZW50TmFtZSA9IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5n
KHN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8Tm9k
ZUxpc3Q+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRFbGVt
ZW50c0J5TmFtZShXVEZNb3ZlKGVsZW1lbnROYW1lKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPE5vZGVM
aXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVu
dHNCeU5hbWUoV1RGTW92ZShlbGVtZW50TmFtZSkpKTsKIH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIHVuc2FmZUpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudHNCeU5hbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3RlZFRo
aXMsIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPiBlbmNvZGVkRWxlbWVu
dE5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxMyBA
QCB0ZW1wbGF0ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNvCiAKIC8vIEF0dHJpYnV0
ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKICNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTE1LDcgKzEx
NSw3IEBAIHByaXZhdGU6CiAKIHVzaW5nIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj47CiAKLXRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTEyNSwxMSArMTI1
LDExIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgYXV0byBldmVudEluaXREaWN0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RFdmVudENv
bnN0cnVjdG9yOjpJbml0Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGV2ZW50SW5pdERp
Y3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50
ZXJmYWNlPFRlc3RFdmVudENvbnN0cnVjdG9yPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBA
IC0xOTIsMTQgKzE5MiwxNCBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6cHJv
dG90CiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2
bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvciogQmluZGluZ0NhbGxlcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdEZvckF0
dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+
IGlubGluZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1Zh
bHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKTsKIH0KIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJhdHRyMSIpOwogfQpAQCAtMjE1LDcgKzIxNSw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0RXZlbnRD
b25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj46OmF0dHJpYnV0ZTxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJhdHRyMiIpOwogfQpAQCAtMjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKICNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I+OjphdHRyaWJ1dGU8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjMiKTsKIH0KQEAgLTI0OCwyMiArMjQ4
LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnUKIAogI2VuZGlm
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3Rv
dHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRv
bU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAko
cmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRl
bShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0
cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CkBAIC0xNjgsMjIgKzE2OCwyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RFdmVudFRhcmdldCogQmluCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dEV2ZW50VGFyZ2V0Kj4oc3RhdGUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFdmVudFRhcmdldDo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0
RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4odGhpc1ZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMCwx
NCArMjA5LDE0IEBAIEpTVmFsdWUgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG8KICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcj4o
dm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RXZlbnRUYXJn
ZXQqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0RXZlbnRUYXJnZXQqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0RXZlbnRUYXJnZXQ+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2FsbGVyPihzdGF0ZSwgIml0ZW0iKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25JdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRUYXJn
ZXQqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRUYXJnZXQqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTIyNSw4ICsyMjQsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+
Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pdGVtKFdURk1vdmUo
aW5kZXgpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAg
ICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKTsKIH0KIAogdm9pZCBKU1Rl
c3RFdmVudFRhcmdldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5h
bWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEV4
Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzgsMTQgKzEzOCwxNCBAQCB2b2lkIEpT
VGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsCiAgICAgdGhpc09iamVjdC0+SlNUZXN0
RXhjZXB0aW9uOjp+SlNUZXN0RXhjZXB0aW9uKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdEV4Y2VwdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0Rm9yQXR0
cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdEV4Y2VwdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RFeGNlcHRpb24+Ojpj
YXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJl
dHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFeGNlcHRpb24qPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEV4Y2VwdGlv
bio+KHRoaXNWYWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRp
b25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEV4Y2VwdGlvbiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0RXhjZXB0
aW9uPjo6YXR0cmlidXRlPGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJuYW1lIik7CiB9CkBAIC0xNTksMjIgKzE1OSwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RXhjZXB0aW9uTmFtCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlv
bkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5
cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RFeGNlcHRp
b246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgp
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0RXhjZXB0aW9uUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFko
IWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0
dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
QEAgLTEyMiwyMiArMTIyLDIxIEBAIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6ZGVz
dHJveSgKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp+SlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZSgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDMxICs0MCwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFu
Y2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFy
T3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5h
YmxlZEluU3BlY2lmaWNXb3JsZChKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShURVNUX0ZF
QVRVUkUpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKIAogLy8g
QXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3Vs
YXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRl
Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OwogCkBAIC0xNzgsOSArMTc4LDkgQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6
OmRlc3Ryb3koSlNDOjpKUwogICAgIHRoaXNPYmplY3QtPkpTVGVzdEdsb2JhbE9iamVjdDo6fkpT
VGVzdEdsb2JhbE9iamVjdCgpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxP
YmplY3QqIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvckF0dHJpYnV0
ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RHbG9iYWxPYmplY3QqIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9i
YWxPYmplY3QqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RHbG9i
YWxPYmplY3QqIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdEZvck9wZXJh
dGlvbihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMTkwLDcgKzE5MCw3IEBAIHRlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdEdsb2JhbE9iamVjdCogQmkKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0R2xv
YmFsT2JqZWN0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjphdHRyaWJ1dGU8anNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKIH0KQEAgLTIwNiw3ICsy
MDYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2
YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiB9CkBA
IC0yMjMsNyArMjIzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0
aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmF0dHJpYnV0ZTxqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29u
ZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2
YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKIH0KQEAgLTI0Miw3ICsyNDIsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6YXR0cmlidXRlPGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
Iik7CiB9CkBAIC0yNTgsMjIgKzI1OCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0CiAKICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEdsb2JhbE9iamVjdFByb3RvdHlwZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEdsb2JhbE9i
amVjdDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg0LDkg
KzI4Myw5IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXgKIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUs
ICJyZWd1bGFyQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtMzAzLDkgKzMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3QKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9i
YWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CisgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgdmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzIzLDkg
KzMyMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3QKICNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdEdsb2JhbE9iamVjdCYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJp
dmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9u
YWxBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM0NCw5ICszNDMsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVu
YWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM2NywxNCArMzY2LDE0IEBAIEpTVmFsdWUg
SlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3QKICAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxh
ck9wZXJhdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpT
Qzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb25DYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVn
dWxhck9wZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxh
ck9wZXJhdGlvbkNhbGxlcj4oc3RhdGUsICJyZWd1bGFyT3BlcmF0aW9uIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uUmVndWxhck9wZXJhdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblJlZ3VsYXJPcGVyYXRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RH
bG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
QEAgLTM4MiwyMCArMzgxLDIwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnJlZ3VsYXJPcGVyYXRpb24oV1RGTW92ZSh0ZXN0
UGFyYW0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRS
dW50aW1lT3BlcmF0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVj
dCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
MShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMShFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46
OmNhbGxPcGVyYXRpb248anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24xQ2FsbGVyPihzdGF0ZSwgImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24x
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC00MDMsMjIgKzQwMiwyMiBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24y
KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbjJDYWxsZXI+KHN0YXRlLCAiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
biIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTQyNiwxNSArNDI1LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNDU0
LDE0ICs0NTMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYQog
fQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29ybGRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RHbG9i
YWxPYmplY3QqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNX
b3JsZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZElu
U3BlY2lmaWNXb3JsZENhbGxlcj4oc3RhdGUsICJlbmFibGVkSW5TcGVjaWZpY1dvcmxkIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZENhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTQ2OSwyNiArNDY4LDI2IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
dGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZW5hYmxlZEluU3Bl
Y2lmaWNXb3JsZChXVEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEds
b2JhbE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1
bmN0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PihzdGF0ZSwgInRl
c3RQcml2YXRlRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlv
bkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC50ZXN0UHJpdmF0ZUZ1bmN0aW9uKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDc4ICs0OCw3OCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMKIAogI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsKICNl
bmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01l
dGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRp
ZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVu
Y3Rpb25JbXBsZW1lbnRzTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvbkltcGxlbWVudHNN
ZXRob2Q0KEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDEoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSopOwog
I2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1l
bnRhbE1ldGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
MyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6RXhlY1N0YXRl
Kik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlv
blN1cHBsZW1lbnRhbE1ldGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAvLyBBdHRy
aWJ1dGVzCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljUmVhZE9ubHlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c05vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0
aWNBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFs
U3RhdGljQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0yMTcsNyArMjE3LDcgQEAgc3RhdGljX2Fz
c2VydChUZXN0U3VwcGxlbWVudGFsOjpTVVBQTEVNRQogc3RhdGljX2Fzc2VydChUZXN0U3VwcGxl
bWVudGFsOjpDT05TVF9JTVBMID09IDIsICJDT05TVF9JTVBMIGluIFRlc3RTdXBwbGVtZW50YWwg
ZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+IEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNv
bnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjI3LDE0ICsyMjcsMTQgQEAgdGVtcGxhdGU8PiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHIxID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0cjIgPSBzdGF0
ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmlu
ZyIpIDogY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdEludGVyZmFjZSIpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdEludGVyZmFjZTo6Y3Jl
YXRlKCpjb250ZXh0LCBXVEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0cjIpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZh
Y2U+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RG
TW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNl
PFRlc3RJbnRlcmZhY2U+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBAIC0zOTgsOSArMzk4LDkg
QEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbAogICAgIHRoaXNPYmpl
Y3QtPkpTVGVzdEludGVyZmFjZTo6fkpTVGVzdEludGVyZmFjZSgpOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBKU1Rlc3RJbnRlcmZhY2UqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6
Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJbnRlcmZhY2UqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50
ZXJmYWNlPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkK
IHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJ
bnRlcmZhY2UqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdEZvck9wZXJhdGlv
bihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtNDExLDEwICs0MTEsMTAgQEAgdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0SW50ZXJmYWNlKiBCaW5kaQogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRp
Y1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3Rh
dGUpKTsKKyAgICByZXR1cm4ganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTQyOSwxMCArNDI5LDEwIEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcklt
cGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVybiBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVu
dHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC00NDcsNyArNDQ3LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbgogI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVy
ZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJp
bXBsZW1lbnRzU3RyMSIpOwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsK
IH0KQEAgLTQ4NSw3ICs0ODUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdHIzIik7CiB9CkBAIC01MDIsNyArNTAy
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRy
aWJ1dGU8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJpbXBsZW1lbnRzTm9kZSIpOwogfQpAQCAtNTIxLDEwICs1MjEsMTAgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlB
dHRyR2V0dGVyKCpzdGF0ZSkpOworICAgIHJldHVybiBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
clN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcigqc3RhdGUpOwogfQogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxT
dGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTUzOSwxMCArNTM5
LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb24KICNpZiBFTkFC
TEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJik7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoKnN0YXRl
KSk7CisgICAgcmV0dXJuIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljQXR0ckdldHRlcigqc3RhdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUpCkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjEiKTsK
IH0KQEAgLTU3Niw3ICs1NzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsU3RyMiIpOwogfQpAQCAt
NTk1LDcgKzU5NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNT
dGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
SW50ZXJmYWNlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CiB9CkBAIC02MTIsNyAr
NjEyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cAogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0SW50ZXJmYWNlJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjphdHRyaWJ1dGU8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbE5vZGUiKTsKIH0KQEAgLTYyOCwyMiArNjI4LDIx
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAKIAogI2VuZGlmCiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEludGVyZmFj
ZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNU
ZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NzUsMTIgKzY3NCwxMSBA
QCBib29sIEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqCiB9CiAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLWJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9p
bnRlciwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3Rh
dGUqIHN0YXRlUG9pbnRlciwgSlNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQo
c3RhdGVQb2ludGVyKTsKICAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihz
dGF0ZSwgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFRlc3RJbnRlcmZh
Y2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTY5
Miw5ICs2OTAsOSBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3Ry
MiIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgImltcGxlbWVudHNTdHIyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTcxMyw5ICs3MTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImltcGxlbWVudHNTdHIzIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTczMSw5ICs3MjksOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRl
cmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
ImltcGxlbWVudHNOb2RlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTc1MCwxMiArNzQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VJbXAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JT
dXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBKU1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOwogICAgIGF1dG8mIHN0
YXRlID0gKnN0YXRlUG9pbnRlcjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8g
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVu
dGFsU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC03NjcsOSArNzY0LDkgQEAg
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZQogI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJ
bnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdHIyIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJzdXBwbGVtZW50YWxTdHIyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQpAQCAtNzg4LDkgKzc4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VTdXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVudGFsU3RyMyIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3VwcGxl
bWVudGFsU3RyMyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFj
ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTgwNiw5ICs4MDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxOb2RlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1
cHBsZW1lbnRhbE5vZGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN1cHBsZW1lbnRhbE5vZGUiKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC04MzAsMzMgKzgyNywzMyBAQCBK
U1ZhbHVlIEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoCiB9CiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNN
ZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0SW50ZXJmYWNlKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9k
MShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFDYWxsZXI+
KHN0YXRlLCAiaW1wbGVtZW50c01ldGhvZDEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01l
dGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwuaW1wbGVtZW50c01ldGhvZDEoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01l
dGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdEludGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMkNhbGxlcj4oc3RhdGUsICJpbXBsZW1lbnRzTWV0aG9k
MiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwpAQCAtODY1LDczICs4NjIsNzMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTWV0
aG9kMiIsICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c01ldGhvZDIoKmNvbnRleHQsIFdURk1vdmUoc3Ry
QXJnKSwgKm9iakFyZykpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRzTWV0aG9k
MigqY29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSos
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVt
ZW50c01ldGhvZDMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
b2QzQ2FsbGVyPihzdGF0ZSwgImltcGxlbWVudHNNZXRob2QzIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbklt
cGxlbWVudHNNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVu
dHNNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqc3RhdGUpKTsKKyAg
ICByZXR1cm4gY2FzdGVkVGhpcy0+aW1wbGVtZW50c01ldGhvZDMoKnN0YXRlKTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5j
dGlvbkltcGxlbWVudHNNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvbkltcGxlbWVudHNNZXRob2Q0
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNNZXRob2Q0KCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3Vw
cGxlbWVudGFsTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSos
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMShFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2FsbGVyPihzdGF0ZSwg
InN1cHBsZW1lbnRhbE1ldGhvZDEiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50
YWxNZXRob2QxKGltcGwpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50
YWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRh
bE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0
aG9kMkNhbGxlcj4oc3RhdGUsICJzdXBwbGVtZW50YWxNZXRob2QyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlv
blN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3Vw
cGxlbWVudGFsTWV0aG9kMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtOTQw
LDQxICs5MzcsNDEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEs
ICJvYmpBcmciLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxNZXRob2QyIiwgIlRlc3RP
YmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihpbXBsLCAqY29u
dGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXZWJD
b3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGltcGwsICpjb250ZXh0
LCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRh
bE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdEludGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFs
TWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdElu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OmNhbGxP
cGVyYXRpb248anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRo
b2QzQ2FsbGVyPihzdGF0ZSwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdElu
dGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBw
bGVtZW50YWxNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKCpzdGF0
ZSkpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKCpzdGF0ZSk7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBs
ZW1lbnRhbE1ldGhvZDQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRh
bDo6c3VwcGxlbWVudGFsTWV0aG9kNCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQXR0cmlidXRlcwog
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVh
ZG9ubHkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZVJlYWRvbmx5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFzcyBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTI1LDE0ICsxMjUsMTQgQEAgdm9pZCBKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6ZAogICAgIHRoaXNPYmplY3QtPkpTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp+SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUo
KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpjYXN0
Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPjo6Y2FzdEZvckF0dHJpYnV0ZShF
eGVjU3RhdGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlKj4odGhpc1ZhbHVlKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmVSZWFkb25seShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFk
b25seShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlPjo6YXR0cmlidXRlPGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkb25seSIpOwogfQpAQCAtMTQ2LDIyICsxNDYs
MjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVj
dCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSkpOworICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1i
b29sIHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5
cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEl0ZXJhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAv
LyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0
ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBl
RnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJs
ZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2goSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0
ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFs
dWVzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
dGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBB
dHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0
SXRlcmFibGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKQEAgLTE0MSwyMiArMTQxLDIxIEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEl0ZXJhYmxl
KiBCaW5kaW4KICAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRlcmFibGUqPihz
dGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0SXRlcmFibGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgSlNUZXN0SXRlcmFibGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEl0ZXJhYmxl
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkp
OworICAgIHJldHVybiBKU1Rlc3RJdGVyYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdEl0ZXJhYmxl
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdEl0ZXJhYmxlUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SXRlcmFibGVQcm90b3R5cGUqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg1LDUy
ICsxODQsNTIgQEAgY29uc3QgSlNDOjpDbGFzc0luZm8gVGVzdEl0ZXJhYmxlSXRlcmF0bwogdGVt
cGxhdGU8PgogY29uc3QgSlNDOjpDbGFzc0luZm8gVGVzdEl0ZXJhYmxlSXRlcmF0b3JQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RJdGVyYWJsZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoVGVzdEl0ZXJhYmxlSXRlcmF0b3JQcm90b3R5cGUpIH07CiAK
LXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5j
dGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlz
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0
ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcihFeGVjU3RhdGUqLCBK
U1Rlc3RJdGVyYWJsZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKIHsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yQ3JlYXRlPFRlc3RJdGVyYWJsZUl0ZXJhdG9yPigq
dGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6VmFsdWUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JD
cmVhdGU8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpW
YWx1ZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVy
YWJsZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
KQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5j
dGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVyYWJsZT46OmNhbGxPcGVyYXRpb248anNUZXN0SXRlcmFi
bGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyPihzdGF0ZSwgIltTeW1ib2wu
SXRlcmF0b3JdIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRl
cmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRl
KiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRv
cj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleVZhbHVlKSk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yQ3JlYXRlPFRlc3RJdGVyYWJsZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9u
S2luZDo6S2V5VmFsdWUpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlKQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVG
dW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdEl0ZXJhYmxlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RJdGVyYWJsZVBy
b3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxlcj4oc3RhdGUsICJlbnRyaWVzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlv
bktleXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvbktleXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVy
YXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktp
bmQ6OktleSkpOworICAgIHJldHVybiBpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRv
cj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
dGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SXRlcmFibGU+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyPihzdGF0ZSwgImtleXMiKTsK
IH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZVByb3RvdHlw
ZUZ1bmN0aW9uVmFsdWVzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJh
YmxlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRlcmFi
bGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3Qs
IEl0ZXJhdGlvbktpbmQ6OlZhbHVlKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRlc3RJ
dGVyYWJsZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6VmFsdWUpOwogfQog
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvblZhbHVlcyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVyYWJs
ZT46OmNhbGxPcGVyYXRpb248anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0Nh
bGxlcj4oc3RhdGUsICJ2YWx1ZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RJdGVyYWJsZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEl0ZXJhYmxlKiB0aGlz
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShpdGVyYXRvckZvckVhY2g8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCpzdGF0ZSwg
KnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JGb3JFYWNoPFRl
c3RJdGVyYWJsZUl0ZXJhdG9yPigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0K
IAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJdGVy
YWJsZT46OmNhbGxPcGVyYXRpb248anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2hDYWxsZXI+KHN0YXRlLCAiZm9yRWFjaCIpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNSArMzQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb24oSlND
OjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9t
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0
b20oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzksOSArMTM5LDkg
QEAgdm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveQogICAgIHRoaXNPYmpl
Y3QtPkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp+SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iq
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYXN0Rm9yQXR0cmli
dXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Rvd25jYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4odGhpc1ZhbHVlKTsK
IH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYXN0Rm9yT3BlcmF0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xNTEsNyArMTUxLDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0SlNCdWlsdGluQ29uc3RydQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjphdHRyaWJ1
dGU8anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZUN1c3RvbSIpOwogfQpAQCAtMTY1LDcgKzE2
NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db24KIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6YXR0cmlidXRlPGpzVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGVz
dEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiB9CkBAIC0xNzcsMjIgKzE3NywyMSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uCiAgICAgcmV0dXJuIHRoaXNPYmplY3QudGVz
dEF0dHJpYnV0ZVJXQ3VzdG9tKHN0YXRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
MDMsOSArMjAyLDkgQEAgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cgog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0
cmlidXRlUldDdXN0b21GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvciYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9t
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRl
UldDdXN0b21GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ0ZXN0QXR0cmlidXRl
UldDdXN0b20iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yMjIsMTggKzIyMSwxOCBAQCBKU1ZhbHVlIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1
bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0
Q3VzdG9tRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9t
RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3I+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAidGVzdEN1
c3RvbUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0
aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlRnVuY3Rp
b25UZXN0Q3VzdG9tRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3Rv
bUZ1bmN0aW9uKCpzdGF0ZSkpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tRnVu
Y3Rpb24oKnN0YXRlKTsKIH0KIAogdm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjEw
MjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzNSwyMiArMTM1LDIx
IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGkKICAgICByZXR1cm4g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KHN0YXRlLnRo
aXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1ib29sIHNldEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkgewogICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTY0LDE0ICsxNjMsMTQgQEAgSlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpnZQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46OmNhbGxPcGVyYXRpb248anNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtMTc5LDkgKzE3OCw5IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgImxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyIiwgIm1ldGhvZCIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm1ldGhvZChsaXN0ZW5lci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCiBib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0
ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTgwLDcgKzgwLDcgQEAgdGVt
cGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDbwogCiB0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlRlc3ROYW1lZENvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CiAKLXRlbXBsYXRlPD4g
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC05MCwx
MyArOTAsMTMgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIxID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFT
Q0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBhdXRvIHN0cjMgPSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmlu
ZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RO
YW1lZENvbnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKCpjYXN0ZWRUaGlzLT5kb2N1
bWVudCgpLCBXVEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0cjIpLCBXVEZNb3ZlKHN0cjMpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3ROYW1lZENvbnN0cnVjdG9yPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkPElETEludGVyZmFjZTxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCiB0
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6
OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKQEAgLTE1OSwyMiArMTU5LDIxIEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0MKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZENvbnN0
cnVjdG9yOjp+SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcigpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogZG9t
T2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlw
ZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDIwICszNywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwog
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVGVzdFdvcmtlclByb21pc2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVy
YXRvcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25LZXlzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uRm9yRWFjaChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VGVzdFdvcmtlclByb21pc2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25FbnRyaWVzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1
ZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4
ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkpTVmFsdWUganNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtNzksNyArNzks
NyBAQCBwcml2YXRlOgogCiB1c2luZyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0
cnVjdG9yPEpTVGVzdE5vZGU+OwogCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkK
K3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04Nyw3
ICs4Nyw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KHN0YXRlLT5q
c0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBvYmplY3QgPSBU
ZXN0Tm9kZTo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5v
ZGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMTcyLDkgKzE3Miw5IEBAIEpTT2Jq
ZWN0KiBKU1Rlc3ROb2RlOjpwcm90b3R5cGUoVk0mIHZtLCAKICAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCi10ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3ROb2RlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYXN0Rm9yQXR0cmli
dXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdE5vZGUqIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9kZT46OmNhc3RGb3JBdHRyaWJ1
dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
cmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5vZGUqPih0aGlzVmFsdWUpOwogfQogCiB0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROb2RlKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+Ojpj
YXN0Rm9yT3BlcmF0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCkBAIC0xODQsNyArMTg0LDcgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0Tm9kZSogQmluZGluZ0NhbAogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0Tm9kZSYsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pT
VmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6
YXR0cmlidXRlPGpzVGVzdE5vZGVOYW1lR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibmFtZSIp
OwogfQpAQCAtMTk4LDIyICsxOTgsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5v
ZGVOYW1lR2V0dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0Tm9kZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3ROb2RlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0
Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0Tm9kZVBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3ROb2RlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROb2RlUHJvdG90eXBl
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTIyNCw5ICsyMjMsOSBAQCBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE5vZGUmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0
SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
Tm9kZU5hbWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibmFtZSIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0Tm9kZU5hbWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJuYW1lIik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yNDYsMjggKzI0NSwyOCBAQCBKU1ZhbHVlIEpTVGVzdE5v
ZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RO
b2RlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJv
bWlzZVByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CitzdGF0aWMg
SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZVByb21p
c2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21p
c2UoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1
bmN0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlz
ZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRlKSk7CisgICAg
cmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVz
dFdvcmtlclByb21pc2VQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29y
a2VyPigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZShFeGVjU3RhdGUqIHN0
YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VQcm9taXNlKEV4
ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbFByb21pc2VPcGVyYXRpb248anNU
ZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VDYWxsZXI+KHN0YXRlLCBX
VEZNb3ZlKHByb21pc2UpLCAidGVzdFdvcmtlclByb21pc2UiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3Jr
ZXJQcm9taXNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogY2FzdGVk
VGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE5vZGUqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaW1wbC50ZXN0V29ya2VyUHJvbWlzZShXVEZNb3ZlKHByb21pc2Up
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCiBzdHJ1Y3QgVGVzdE5vZGVJdGVyYXRvclRyYWl0cyB7CkBA
IC0yODUsNTcgKzI4NCw1NyBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0Tm9kZUl0ZXJhdG9y
OjpzCiB0ZW1wbGF0ZTw+CiBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0Tm9kZUl0ZXJhdG9yUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoVGVzdE5vZGVJdGVyYXRvclByb3RvdHlwZSkgfTsKIAotc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1i
b2xJdGVyYXRvckNhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblN5bWJvbEl0ZXJhdG9yQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqIHRoaXNP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShp
dGVyYXRvckNyZWF0ZTxUZXN0Tm9kZUl0ZXJhdG9yPigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2lu
ZDo6VmFsdWUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4o
KnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZhbHVlKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb2RlPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvckNhbGxlcj4oc3Rh
dGUsICJbU3ltYm9sLkl0ZXJhdG9yXSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwg
SlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCiB7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNyZWF0ZTxUZXN0Tm9kZUl0ZXJhdG9yPigqdGhp
c09iamVjdCwgSXRlcmF0aW9uS2luZDo6S2V5VmFsdWUpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JD
cmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleVZh
bHVlKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9k
ZT46OmNhbGxPcGVyYXRpb248anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxl
cj4oc3RhdGUsICJlbnRyaWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0NhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3RO
b2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0
Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGl0ZXJhdG9yQ3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJ
dGVyYXRpb25LaW5kOjpLZXkpKTsKKyAgICByZXR1cm4gaXRlcmF0b3JDcmVhdGU8VGVzdE5vZGVJ
dGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OktleSk7CiB9CiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlz
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXI+KHN0YXRlLCAia2V5cyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVl
c0NhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZh
bHVlc0NhbGxlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVz
dE5vZGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZhbHVlKSk7CisgICAg
cmV0dXJuIGl0ZXJhdG9yQ3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVy
YXRpb25LaW5kOjpWYWx1ZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
KQorSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VmFsdWVzKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3ROb2RlPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25W
YWx1ZXNDYWxsZXI+KHN0YXRlLCAidmFsdWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaENhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShpdGVyYXRvckZvckVhY2g8VGVzdE5vZGVJdGVyYXRvcj4oKnN0YXRlLCAqdGhpc09iamVjdCwg
dGhyb3dTY29wZSkpOworICAgIHJldHVybiBpdGVyYXRvckZvckVhY2g8VGVzdE5vZGVJdGVyYXRv
cj4oKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSkKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KHN0YXRlLCAiZm9yRWFjaCIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBh
dXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KHN0YXRlKTsKQEAgLTM0NCwxMCArMzQzLDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9kZVAKICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
Im5hbWUiKSwgbmFtZVZhbHVlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3Rh
dGUsICJ0b0pTT04iKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA1NSwzNTUgKzEwNTUsMzU1IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6
Q29uZGl0aW9uYWxEaWN0aW9uYXIKIC8vIEZ1bmN0aW9ucwogCiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNw
ZWNpZmljTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVN
ZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9k
V2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2QoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9k
KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakluc3RhbmNlRnVu
Y3Rpb25VbmZvcmdlYWJsZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFy
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U3RyaW5nTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdGlj
TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2Qo
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhVU1ZTdHJpbmdBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJs
ZVVTVlN0cmluZ0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0Fy
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhCeXRlU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVC
eXRlU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0Fy
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZChKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1Ymxp
Y0FuZFByaXZhdGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIo
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZU9iaihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZShKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1
bWVudEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1
bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbChKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhK
U0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0
eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNO
YU4oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEFueShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
T2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdy
YXBwZXIoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlcklzTnVsbChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhO
U1Jlc29sdmVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmQo
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFy
ZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRp
b25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tB
cmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lk
TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25C
eXRlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PY3RldE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkxvbmdNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9iak1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqSW5zdGFu
Y2VGdW5jdGlvblVuZm9yZ2VhYmxlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXIoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRob2QoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZChKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1B
cmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdB
cmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVy
bmluZ0xvbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVj
dChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9k
V2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJs
aWNBbmRQcml2YXRlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3Rh
dGVWb2lkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2lu
ZG93QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFVTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmco
SlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbERvdWJsZUlzTmFOKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZs
b2F0SXNOYU4oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFNlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVl
bmNlSXNFbXB0eShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEFueShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxP
YmplY3QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxs
YmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVO
QUJMRShDb25kaXRpb24xKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlm
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxNZXRob2QzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhKU0M6OkV4ZWNT
dGF0ZSopOwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKEpTQzo6
RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5p
b24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oSlNDOjpF
eGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24oSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIoSlND
OjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
Q2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRo
b2QyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0
aE51bGxhYmxlVW5pb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1l
dGVyKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhPcHRpb25hbChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihKU0M6OkV4ZWNT
dGF0ZSopOwogI2lmIEVOQUJMRShDb25kaXRpb24xKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5k
aWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNp
Z25lZExvbmdTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdE
b2N1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbnZlcnQyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MyhKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29udmVydDQoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0
aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PcmFuZ2UoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5n
TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY1VuaW9uTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
VGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3Rh
dGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbVByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFt
cChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0Fy
cmF5RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25HZXRFbGVtZW50QnlJZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0MShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MihKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252
ZXJ0MyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRG
dW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk9yYW5nZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRo
b2QoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Bbnko
SlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldp
dGhPcHRpb25hbEludEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
ZEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKICNp
ZiBFTkFCTEUoQ09ORElUSU9OMSkgfHwgRU5BQkxFKENPTkRJVElPTjIpCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE92ZXJsb2FkKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpFeGVjU3Rh
dGUqKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9u
V2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVm
ZmVyU291cmNlUGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zl
cmxvYWQoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVy
YXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZl
clNvdXJjZVBhcmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yU3RhdGljU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmooSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqRW51bUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9iak9jdGV0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDbGFtcGVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpVbnNp
Z25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxl
T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5n
TG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3Jk
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJl
Y29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9u
YXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVu
dW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialhN
TE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlU
ZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JU
ZXN0U3ViT2JqKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakJ5
dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpPY3RldEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialNob3J0QXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakVuZm9yY2VS
YW5nZVNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
VGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxh
YmxlT2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakxl
bmllbnRUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqVW5mb3JnZWFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
akJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
bmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpV
c3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVP
YmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFy
eUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpJbXBs
ZW1lbnRhdGlvbkVudW1BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqWE1M
T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0
cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRCb29sZWFuQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZV
UkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpUeXBl
ZEFycmF5QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
R2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0
ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
bndlYmtpdGZvbyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0
YWNrQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRl
ckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakN1c3Rv
bUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqT25mb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqT25mb28oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqT253
ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNW
YWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2lmIEVOQUJMRShDb25kaXRpb24xKQotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjZDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQW55QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpPYmplY3RBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
dGVudERvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpJbW11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9i
aklkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpS
ZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZURvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJv
b2xlYW5BdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3Ry
aW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJs
ZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRy
aWJ1dGUxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
akFueUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqT2JqZWN0
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50
RG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTXV0YWJs
ZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBv
aW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpEZXNjcmlwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iaklkKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iaklkKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpz
VGVzdE9iakhhc2goSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
SlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3Ry
aW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZVN0cmluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJk
c051bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE1MzMsNyArMTUzMyw3IEBAIHN0YXRpY19hc3NlcnQo
VGVzdE9iajo6Q09OU1RfVkFMVUVfMTQgPT0KIHN0YXRpY19hc3NlcnQoVGVzdE9iajo6Q09OU1Rf
SU1QTCA9PSAxNSwgIkNPTlNUX0lNUEwgaW4gVGVzdE9iaiBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBm
cm9tIElETCIpOwogc3RhdGljX2Fzc2VydChUZXN0T2JqOjpyZWFkb25seSA9PSAwLCAicmVhZG9u
bHkgaW4gVGVzdE9iaiBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOwogCi10ZW1wbGF0
ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNv
bnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwpAQCAtMTU0MywxNiArMTU0MywxNiBAQCB0ZW1wbGF0ZTw+IEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRl
c3RDYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNj
b3BlLCAwLCAidGVzdENhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCBudWxscHRyKTsgfSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0ZXN0Q2FsbGJh
Y2tGdW5jdGlvbiA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1
bmN0aW9uPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29w
ZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmplY3QiLCBudWxscHRyKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gdGhyb3dD
b25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T2JqOjpjcmVhdGUoZG9jdW1lbnQsIHRlc3RDYWxsYmFj
ay5yZWxlYXNlTm9uTnVsbCgpLCB0ZXN0Q2FsbGJhY2tGdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJm
YWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmpl
Y3QpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCkBAIC0xOTYzLDkgKzE5NjMsOSBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRlCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0T2JqKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JBdHRyaWJ1
dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0T2JqKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JBdHRyaWJ1dGUo
RXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1
cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0T2JqKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhc3RGb3JP
cGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTE5NzUsNyArMTk3NSw3IEBAIHRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdE9iaiogQmluZGluZ0NhbGwKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRP
bmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVhZE9ubHlMb25n
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKIH0KQEAg
LTE5OTEsNyArMTk5MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eUwKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiB9CkBAIC0yMDA3LDcgKzIwMDcsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkT25s
eVRlc3RPYmpBdHRyIik7CiB9CkBAIC0yMDIzLDEwICsyMDIzLDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKHN0YXRlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9u
bHlMb25nQXR0ckdldHRlcigqc3RhdGUpKTsKKyAgICByZXR1cm4ganNUZXN0T2JqQ29uc3RydWN0
b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKCpzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTIwMzgsMTAgKzIwMzgsMTAgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKCpzdGF0
ZSkpOworICAgIHJldHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0
ZXIoKnN0YXRlKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMjA1Myw3ICsy
MDUzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdAogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CkBAIC0yMDY3LDcgKzIwNjcsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUs
ICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpOwogfQpAQCAtMjA4Niw3ICsyMDg2LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYgogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNW
YWx1ZSwgImVudW1BdHRyIik7CiB9CkBAIC0yMTAyLDcgKzIxMDIsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZUF0
dHIiKTsKIH0KQEAgLTIxMTgsNyArMjExOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpCeXRlQXR0ckcKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0
ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpP
Y3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNU
ZXN0T2JqT2N0ZXRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CiB9
CkBAIC0yMTM0LDcgKzIxMzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0
ZXRBdHRyCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialNo
b3J0QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0QXR0ciIpOwogfQpAQCAtMjE1
MCw3ICsyMTUwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cgog
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ2xh
bXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2xh
bXBlZFNob3J0QXR0ciIpOwogfQpAQCAtMjE2Niw3ICsyMTY2LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNl
UmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJlbmZvcmNlUmFuZ2VT
aG9ydEF0dHIiKTsKIH0KQEAgLTIxODIsNyArMjE4Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpFbmZvcmNlUmEKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQpAQCAtMjE5OCw3
ICsyMTk4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkUwogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpMb25nQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdBdHRyIik7CiB9CkBAIC0yMjE0LDcgKzIyMTQsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxv
bmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQpAQCAtMjIzMCw3ICsyMjMw
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQQogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNp
Z25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CkBAIC0yMjQ2LDcgKzIyNDYsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMCiAKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0
aGlzVmFsdWUsICJzdHJpbmdBdHRyIik7CiB9CkBAIC0yMjYyLDcgKzIyNjIsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZzdHJpbmdBdHRyIik7CiB9CkBAIC0yMjc4LDcgKzIyNzgs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0
dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdE9iakF0dHIiKTsKIH0KQEAgLTIyOTQsNyArMjI5
NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXQKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RO
dWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1
dGU8anNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
InRlc3ROdWxsYWJsZU9iakF0dHIiKTsKIH0KQEAgLTIzMTAsNyArMjMxMCw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGEKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVu
aWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTGVuaWVu
dFRlc3RPYmpBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+
KHN0YXRlLCB0aGlzVmFsdWUsICJsZW5pZW50VGVzdE9iakF0dHIiKTsKIH0KQEAgLTIzMjYsNyAr
MjMyNiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGUKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqVW5mb3JnZWFibGVBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVB
dHRyIik7CiB9CkBAIC0yMzQyLDcgKzIzNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVW5mb3JnZWFiCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmciKTsKIH0KQEAgLTIzNTgsNyArMjM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVXN2c3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ1c3Zz
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQpAQCAtMjM3NCw3ICsyMzc0
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZwogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJp
YnV0ZTxqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0
ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmciKTsKIH0KQEAgLTIzOTAsNyArMjM5MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpCeXRlU3RyaW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0xvbmdSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3Jk
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29y
ZEF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwog
fQpAQCAtMjQwNiw3ICsyNDA2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0xvbgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1Jl
Y29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
Iik7CiB9CkBAIC0yNDIyLDcgKzI0MjIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVXN2c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdM
b25nUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29y
ZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialVzdnN0cmluZ0xv
bmdSZWNvcmRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidXN2c3RyaW5nTG9uZ1JlY29y
ZEF0dHIiKTsKIH0KQEAgLTI0MzgsNyArMjQzOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmcKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z09ialJlY29yZEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0
ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ09ialJlY29yZEF0dHIiKTsKIH0KQEAg
LTI0NTQsNyArMjQ1NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdP
YmoKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVj
b3JkQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTnVsbGFi
bGVPYmpSZWNvcmRBdHRyIik7CiB9CkBAIC0yNDcwLDcgKzI0NzAsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpEaWN0aW9uYXJ5QXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdE9iakRpY3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakRpY3Rpb25hcnlBdHRyR2V0dGVyPihz
dGF0ZSwgdGhpc1ZhbHVlLCAiZGljdGlvbmFyeUF0dHIiKTsKIH0KQEAgLTI0ODYsNyArMjQ4Niw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpEaWN0aW9uYXIKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgIm51bGxhYmxlRGljdGlvbmFyeUF0dHIiKTsKIH0KQEAgLTI1MDIsNyArMjUwMiw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUQKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iaklt
cGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKIH0KQEAgLTI1MTgsNyArMjUxOCw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnQKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqWE1MT2JqQXR0ckdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KQEAgLTI1MzQsNyArMjUzNCw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHQKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ3JlYXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAi
Y3JlYXRlIik7CiB9CkBAIC0yNTUwLDcgKzI1NTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ3JlYXRlR2V0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiB9CkBA
IC0yNTY2LDcgKzI1NjYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiB9CkBA
IC0yNTgyLDcgKzI1ODIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQpAQCAtMjU5
OCw3ICsyNTk4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAog
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpSZWZsZWN0
ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CiB9CkBAIC0yNjE0LDcgKzI2MTQsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9i
alJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVk
Qm9vbGVhbkF0dHIiKTsKIH0KQEAgLTI2MzAsNyArMjYzMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRl
cj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKIH0KQEAgLTI2NDYsNyAr
MjY0Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInJlZmxlY3RlZFVTVlVSTEF0dHIiKTsKIH0KQEAgLTI2NjIsNyArMjY2Miw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0
cmluZ0F0dHIiKTsKIH0KQEAgLTI2NzgsNyArMjY3OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CiB9CkBAIC0yNjk0LDcgKzI2OTQs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRy
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsK
IH0KQEAgLTI3MTAsNyArMjcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJM
QXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsK
IH0KQEAgLTI3MjcsNyArMjcyNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWQKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KQEAgLTI3NDUsNyArMjc0
NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXQKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwog
fQpAQCAtMjc2MSw3ICsyNzYxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5
cGVkQXJyYQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0
cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQpAQCAtMjc3Nyw3ICsyNzc3LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9u
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbiIp
OwogfQpAQCAtMjc5Myw3ICsyNzkzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akF0dHJpYnV0ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rl
c3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0yODA5LDcgKzI4MDks
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKIH0KQEAgLTI4MjUsNyArMjgyNSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImN1
c3RvbUF0dHIiKTsKIH0KQEAgLTI4MzksNyArMjgzOSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDdXN0b21BdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9u
Zm9vR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqT25m
b28oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
T25mb29HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJvbmZvbyIpOwogfQpAQCAtMjg1Myw3ICsy
ODUzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dAogCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXIoRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpPbndlYmtpdGZv
b0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm9ud2Via2l0Zm9vIik7CiB9CkBAIC0yODY3LDcg
KzI4NjcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogfQpA
QCAtMjg4Myw3ICsyODgzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0
dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0
aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlIik7CiB9CkBAIC0yODk5LDcgKzI4OTksNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0KQEAgLTI5MTgsNyArMjkxOCw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzIik7CiB9CkBAIC0yOTM0LDcgKzI5MzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVl
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KQEAgLTI5
NTMsNyArMjk1Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGUiKTsKIH0KQEAgLTI5NzIsNyArMjk3Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMiKTsKIH0KQEAgLTI5OTEsNyArMjk5MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXAKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZSIpOwogfQpAQCAtMzAxMCw3ICszMDEwLDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpX
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogfQpA
QCAtMzAyNyw3ICszMDI3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdl
dHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKIH0KQEAgLTMwNDYs
NyArMzA0Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb24KICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIyR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMiIp
OwogfQpAQCAtMzA2NSw3ICszMDY1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25k
aXRpb25hbEF0dHIzIik7CiB9CkBAIC0zMDg0LDcgKzMwODQsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3Ry
dWN0b3JHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI0Iik7CiB9CkBA
IC0zMTAxLDcgKzMxMDEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogfQpA
QCAtMzExOCw3ICszMTE4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25z
dHJ1Y3RvckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjYiKTsKIH0K
QEAgLTMxMzQsNyArMzEzNCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb24KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojph
dHRyaWJ1dGU8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKIH0KQEAgLTMxNTMsNyArMzE1Myw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hl
ZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqQ2FjaGVkQXR0cmli
dXRlMkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKIH0KQEAg
LTMxNzIsNyArMzE3Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRB
dHQKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0
T2JqQW55QXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiYW55QXR0cmlidXRlIik7
CiB9CkBAIC0zMTg4LDcgKzMxODgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QW55QXR0cmliCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqT2JqZWN0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgIm9iamVjdEF0dHJpYnV0ZSIpOwogfQpAQCAtMzIwNCw3ICszMjA0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dAogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50
RG9jdW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudChFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRH
ZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJjb250ZW50RG9jdW1lbnQiKTsKIH0KQEAgLTMyMjAs
NyArMzIyMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG8KIAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTXV0
YWJsZVBvaW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibXV0YWJsZVBvaW50Iik7CiB9CkBA
IC0zMjM2LDcgKzMyMzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJs
ZVBvCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iaklt
bXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW1tdXRh
YmxlUG9pbnQiKTsKIH0KQEAgLTMyNTIsNyArMzI1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpJbW11dGFibGUKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0
cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmF3
YmVycnkiKTsKIH0KQEAgLTMyNjgsNyArMzI2OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJhd2JlcnIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2Ny
aXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRy
aWJ1dGU8anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJkZXNj
cmlwdGlvbiIpOwogfQpAQCAtMzI4NCw3ICszMjg0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakRlc2NyaXB0aQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRH
ZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpJZEdldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImlkIik7CiB9CkBAIC0zMzAwLDcgKzMzMDAsNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpIYXNoR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBq
c1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRl
PGpzVGVzdE9iakhhc2hHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJoYXNoIik7CiB9CkBAIC0z
MzE2LDcgKzMzMTYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRl
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTMzMzIsNyArMzMz
Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWIKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0
YXRlLCB0aGlzVmFsdWUsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzM0OCw3
ICszMzQ4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRAogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTMzNjQsNyArMzM2
NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUwKIAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVy
PihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVCb29sZWFuQXR0cmlidXRlIik7CiB9CkBAIC0z
MzgwLDcgKzMzODAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVC
CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKIH0K
QEAgLTMzOTYsNyArMzM5Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVMKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJu
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzQxMiw3ICszNDEyLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTAogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzQyOCw3ICszNDI4LDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlUwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVVU1ZTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQpAQCAtMzQ0NCw3ICszNDQ0LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0ZTxqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxhYmxl
Qnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CkBAIC0zNDYwLDcgKzM0NjAsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCCiAKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0cmlidXRlPGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJudWxsYWJs
ZVN0cmluZ1ZhbHVlIik7CiB9CkBAIC0zNDc2LDcgKzM0NzYsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVTCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6YXR0
cmlidXRlPGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJp
YnV0ZSIpOwogfQpAQCAtMzQ5Miw3ICszNDkyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakF0dHJpYnV0ZQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVz
ZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmF0dHJpYnV0
ZTxqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcj4oc3RhdGUsIHRo
aXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CkBAIC0zNTA4LDcg
KzM1MDgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9i
alB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
YXR0cmlidXRlPGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhp
c1ZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKIH0KQEAgLTM1MjQsNyArMzUyNCw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXIKIAogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpz
VGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGUiKTsKIH0KQEAgLTM1NDAsNyArMzU0MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpQdXRGb3J3YXIKIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjphdHRyaWJ1dGU8anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1
dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwogfQpA
QCAtMzU1NCwyMiArMzU1NCwyMSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3Ry
aW5naWZpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgSlNUZXN0T2JqUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNU
ZXN0T2JqUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPYmpQ
cm90b3R5cGUqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPYmo6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE9ialByb3RvdHlwZSog
ZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdE9ialByb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1NzgsMTIgKzM1
NzcsMTEgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIAogICAgIHJl
dHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uc3Ry
dWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGVQb2ludGVyLCBKU1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOwogICAgIGF1dG8mIHN0
YXRlID0gKnN0YXRlUG9pbnRlcjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8g
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgVGVzdE9iajo6c2V0U3RhdGljU3RyaW5nQXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CkBAIC0zNTkzLDkgKzM1OTEsOSBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0
cnVjdG9yU3RhdGljU3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialRlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialRlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVz
dFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCB2YWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVj
dG9yRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzYwOSw5ICszNjA3LDkgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYgogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbnVtQXR0ciIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpF
bnVtQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImVudW1BdHRyIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTM2MzAsOSArMzYyOCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckYKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiYnl0ZUF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJieXRlQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC0zNjQ5LDkgKzM2NDcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0
ZUF0dHJGCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpP
Y3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJvY3RldEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjY4
LDkgKzM2NjYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0
T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialNob3J0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJz
aG9ydEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAic2hvcnRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpT
aG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zNjg3LDkgKzM2ODUs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9i
akNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNsYW1w
ZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM3MDYsOSArMzcwNCw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2gKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVuZm9y
Y2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUs
ICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTM3MjUsOSArMzcyMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpF
bmZvcmNlUmEKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRTaG9ydEF0
dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC0zNzQ0LDkgKzM3NDIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5z
aWduZWRTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBz
ZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTG9u
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgImxvbmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IHZhbHVlLCAibG9uZ0F0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akxvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzc2Myw5ICszNzYx
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyRgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakxv
bmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAibG9uZ0xvbmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpA
QCAtMzc4Miw5ICszNzgwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdM
b25nQQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0
dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdM
b25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25l
ZExvbmdMb25nQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM4MDEsOSArMzc5OSw5IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZEwKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyIik7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmlu
Z0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzgyMCw5ICszODE4LDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHIi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwg
InVzdnN0cmluZ0F0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVz
dnN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0zODM5LDkgKzM4
MzcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpU
ZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialRlc3RPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InRlc3RPYmpBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAidGVzdE9iakF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzg1
OCw5ICszODU2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdAog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9v
bCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3ROdWxsYWJsZU9iakF0
dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCB2YWx1ZSwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCkBAIC0zODc3LDkgKzM4NzUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVGVzdE51bGxhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVz
dE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0ckZ1bmN0aW9uLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxlbmllbnRUZXN0T2JqQXR0ciIpOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpMZW5pZW50VGVzdE9iakF0dHJGdW5jdGlvbiwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJl
dHVybkVhcmx5PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImxlbmllbnRUZXN0T2JqQXR0ciIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzg5Niw5ICszODk0LDkgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKQEAgLTM5MTUsOSArMzkxMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdBdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgdmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC0zOTM0LDkgKzM5MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3Ry
aW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpC
eXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC0zOTUzLDkgKzM5NTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0
ZVN0cmluCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3Jk
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0xvbmdS
ZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmlu
Z0xvbmdSZWNvcmRBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzk3Miw5ICszOTcwLDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0xvbgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5n
TG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTM5OTEsOSArMzk4OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpVc3ZzdHJpbmcKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0
cmluZ0xvbmdSZWNvcmRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3Jk
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3Ry
aW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ1c3Zz
dHJpbmdMb25nUmVjb3JkQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC00MDEwLDkgKzQwMDgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ09ialJlY29y
ZEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nT2Jq
UmVjb3JkQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIHZhbHVlLCAic3RyaW5nT2JqUmVjb3JkQXR0ciIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTQwMjksOSArNDAyNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdPYmoKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJs
ZU9ialJlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ051bGxhYmxlT2JqUmVj
b3JkQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3Jk
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQwNDgsOSArNDA0Niw5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWwKIAogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakRpY3Rp
b25hcnlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqRGljdGlvbmFyeUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZGljdGlvbmFyeUF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCkBAIC00MDY3LDkgKzQwNjUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRGljdGlvbmFyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJs
ZURpY3Rpb25hcnlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAibnVsbGFibGVEaWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rp
b25hcnlBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibnVsbGFibGVEaWN0
aW9uYXJ5QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVEaWN0aW9uYXJ5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQwODYs
OSArNDA4NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUQKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJv
b2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25F
bnVtQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1l
bnRhdGlvbkVudW1BdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJpbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDEwNyw5ICs0MTA1LDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudAogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlhNTE9iakF0dHIiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqWE1MT2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIlhNTE9iakF0
dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MTI2LDkgKzQxMjQsOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjcmVhdGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY3JlYXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00
MTQ1LDkgKzQxNDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVu
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1i
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5n
QXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKQEAgLTQxNjQsOSArNDE2Miw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0
cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDE4Myw5
ICs0MTgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0
dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkSW50
ZWdyYWxBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDIwMiw5ICs0MjAwLDkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0
ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTQyMjEsOSArNDIxOSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5B
dHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9v
bGVhbkF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00MjQwLDkgKzQyMzgsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
cmVmbGVjdGVkVVJMQXR0ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTQyNTksOSArNDI1Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVTVlVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVm
bGVjdGVkVVNWVVJMQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDI3OCw5ICs0Mjc2LDkgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxlY3RlZFN0cmlu
Z0F0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Mjk3LDkgKzQyOTUs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SW50ZWdyYWxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAicmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC00MzE2LDkgKzQzMTQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZh
bHVlLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQpAQCAtNDMzNSw5ICs0MzMzLDkgQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21V
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21V
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInJlZmxl
Y3RlZEN1c3RvbVVSTEF0dHIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC00MzU1LDkgKzQzNTMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIHZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQzNzUsOSArNDM3Myw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXQKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidHlw
ZWRBcnJheUF0dHIiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC00Mzk0LDkgKzQzOTIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlw
ZWRBcnJhCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0
dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ0MTMsOSArNDQxMSw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNl
dHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJh
dHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJhdHRyaWJ1dGVXaXRo
U2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNDQzMiw5ICs0NDMwLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0
dHJpYnV0ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ0NTEsOSArNDQ0OSw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHQKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUs
ICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NDcwLDkgKzQ0NjgsOSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDdXN0b21BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY3VzdG9tQXR0ciIpOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDdXN0b21B
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY3VzdG9tQXR0ciIpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKQEAgLTQ0ODYsOSArNDQ4NCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDdXN0b21BdHQKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak9uZm9vRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAib25mb28iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
dmFsdWUsICJvbmZvbyIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25m
b29GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTAyLDkgKzQ1MDAsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29GdW5jCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZv
byhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9ud2Vi
a2l0Zm9vRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9ud2Via2l0
Zm9vIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVl
LCAib253ZWJraXRmb28iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9u
d2Via2l0Zm9vRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDUxOCw5ICs0NTE2
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0ZgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDUzNyw5ICs0NTM1LDkg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ1NTYsOSArNDU1NCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFcKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCkBAIC00NTc4LDkgKzQ1NzYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NTk3
LDkgKzQ1OTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtNDYxOSw5ICs0NjE3LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUi
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NjQxLDkgKzQ2MzksOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAg
LTQ2NjMsOSArNDY2MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXAKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00Njg1LDkg
KzQ2ODMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0
YWNrQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIHZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0
ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3Vt
ZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
QEAgLTQ3MDUsOSArNDcwMyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjFGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
Y29uZGl0aW9uYWxBdHRyMSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKQEAgLTQ3MjYsOSArNDcyNCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRp
dGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAot
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKKyAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNv
bmRpdGlvbmFsQXR0cjIiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NzQ3LDkg
KzQ3NDUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDc2OCw5ICs0NzY2LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbgogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAot
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjQiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0
cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY29uZGl0aW9uYWxBdHRy
NCIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NENvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDc4Niw5ICs0
Nzg0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbgogI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVD
b25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25k
aXRpb25hbEF0dHI1Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgImNvbmRpdGlvbmFsQXR0cjUiKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ4MDQsOSArNDgwMiw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb24KICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNiIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgdmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCkBAIC00ODIxLDkgKzQ4MTksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpB
bnlBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbnlBdHRyaWJ1dGUiKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
QW55QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYW55QXR0cmli
dXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00ODQwLDkgKzQ4MzgsOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmliCiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iak9iamVjdEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJvYmplY3RBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCkBAIC00ODU5LDkgKzQ4NTcsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqT2JqZWN0QXR0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRh
YmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTXV0
YWJsZVBvaW50RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibXV0YWJsZVBvaW50
Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00ODc4LDkgKzQ4NzYsOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2lu
dChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iaklt
bXV0YWJsZVBvaW50RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImlt
bXV0YWJsZVBvaW50Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIHZhbHVlLCAiaW1tdXRhYmxlUG9pbnQiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQpAQCAtNDg5Nyw5ICs0ODk1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklt
bXV0YWJsZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9v
bCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInN0cmF3YmVycnkiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CkBAIC00OTE2LDkgKzQ5MTQsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
YXdiZXJyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rl
c3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iaklkRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImlkIik7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iaklkRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiaWQiKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtNDkz
NSw5ICs0OTMzLDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpbwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJv
b2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0
ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZXBsYWNlYWJsZUF0
dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKQEAgLTQ5NTEsOSArNDk0OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZXBsYWNlYWIKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVM
b25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00
OTcwLDkgKzQ5NjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVM
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ5ODks
OSArNDk4Nyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVMKIAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVVTVlN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJudWxsYWJsZVVTVlN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQpAQCAtNTAwOCw5ICs1MDA2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iak51bGxhYmxlVQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVC
eXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJudWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxs
YWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCB2YWx1ZSwgIm51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTUwMjcsOSArNTAyNSw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUIKIAogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
ak51bGxhYmxlU3RyaW5nVmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJu
dWxsYWJsZVN0cmluZ1ZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NTA0Niw5ICs1MDQ0LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
UwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCB2YWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTUwNjcsOSArNTA2NSw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGUKIAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialB1
dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpQdXRG
b3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
UHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJw
dXRGb3J3YXJkc0F0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBA
IC01MDg3LDkgKzUwODUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9y
d2FyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxl
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIHZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTUxMDksOSArNTEwNyw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXIKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmll
ckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5n
aWZpZXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdp
ZmllckF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC01MTQx
LDE0ICs1MTM5LDE0IEBAIEpTVmFsdWUgSlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0K
IH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjEoRXhlY1N0
YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQ2FsbGVyPihzdGF0ZSwg
ImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTUxNTYsMjIgKzUxNTQsMjIgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwu
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJD
YWxsZXI+KHN0YXRlLCAiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50
aW1lT3BlcmF0aW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTE3OSwxNSArNTE3
NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTIwNywxNCArNTIw
NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiB9CiAjZW5k
aWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RDYWxsZXI+KHN0YXRlLCAid29y
bGRTcGVjaWZpY01ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTUyMjIsMzUgKzUyMjAsMzUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252
ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC53b3JsZFNwZWNpZmljTWV0aG9kKFdURk1vdmUo
dGVzdFBhcmFtKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZENhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblZvaWRNZXRob2RDYWxsZXI+KHN0YXRlLCAidm9pZE1ldGhvZCIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Wb2lkTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGltcGwudm9pZE1ldGhvZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RX
aXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Wb2lkTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRN
ZXRob2RXaXRoQXJnc0NhbGxlcj4oc3RhdGUsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVm9pZE1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRo
QXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTI1OCwzOCArNTI1NiwzOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBz
dHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnZvaWRNZXRob2RXaXRo
QXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1l
dGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9k
Q2FsbGVyPihzdGF0ZSwgImJ5dGVNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kKCkpKTsKKyAgICByZXR1cm4gdG9K
UzxJRExCeXRlPihpbXBsLmJ5dGVNZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJn
c0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRl
TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhB
cmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RX
aXRoQXJnc0NhbGxlcj4oc3RhdGUsICJieXRlTWV0aG9kV2l0aEFyZ3MiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0
ZU1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTI5NywzNyArNTI5NSwzNyBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PElETEJ5dGU+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
LCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVj
dCIsICJieXRlTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExCeXRlPihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhXVEZNb3Zl
KGJ5dGVBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEJ5dGU+KGltcGwu
Ynl0ZU1ldGhvZFdpdGhBcmdzKFdURk1vdmUoYnl0ZUFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9i
akFyZykpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2QoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9j
dGV0TWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0
TWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm9jdGV0TWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9k
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMT2N0ZXQ+KGltcGwub2N0ZXRNZXRob2QoKSkpOworICAg
IHJldHVybiB0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3Rl
dE1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0NhbGxlcj4oc3RhdGUsICJvY3RldE1ldGhvZFdpdGhB
cmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2N0ZXRNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTMzNSwz
NyArNTMzMywzNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9jdGV0QXJnID0gY29udmVydDxJRExPY3RldD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
YXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
MiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9jdGV0TWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9i
aiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExPY3RldD4oaW1wbC5v
Y3RldE1ldGhvZFdpdGhBcmdzKFdURk1vdmUob2N0ZXRBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpv
YmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAg
IHJldHVybiB0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShv
Y3RldEFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9k
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdN
ZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkxvbmdNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZENhbGxlcj4oc3RhdGUsICJsb25nTWV0aG9k
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwu
bG9uZ01ldGhvZCgpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9k
KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0
aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxsZXI+KHN0YXRlLCAibG9u
Z01ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
QEAgLTUzNzMsMzcgKzUzNzEsMzcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJ
RExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAibG9uZ01ldGhvZFdpdGhBcmdzIiwg
IlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4o
aW1wbC5sb25nTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcp
LCAqb2JqQXJnKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
KyAgICByZXR1cm4gdG9KUzxJRExMb25nPihpbXBsLmxvbmdNZXRob2RXaXRoQXJncyhXVEZNb3Zl
KGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9k
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQ2FsbGVyPihzdGF0ZSwgIm9iak1ldGhvZCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+
Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5vYmpNZXRob2QoKSkp
OworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kKCkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRo
b2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PYmpNZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhv
ZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZFdpdGhBcmdzQ2FsbGVyPihzdGF0ZSwgIm9iak1ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdz
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NDExLDM3ICs1NDA5LDM3IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0
PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MiksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2Jq
ZWN0IiwgIm9iak1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5vYmpNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdB
cmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kV2l0
aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0
aW9uVW5mb3JnZWFibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9iaklu
c3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZChFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25V
bmZvcmdlYWJsZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqSW5zdGFuY2VGdW5jdGlv
blVuZm9yZ2VhYmxlTWV0aG9kQ2FsbGVyPihzdGF0ZSwgInVuZm9yZ2VhYmxlTWV0aG9kIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1
bmN0aW9uVW5mb3JnZWFibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1l
dGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+
KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpOworICAgIHJldHVybiB0b0pTPElETExvbmc+KGlt
cGwudW5mb3JnZWFibGVNZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXI+KHN0YXRl
LCAibWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTU0NDksMTkgKzU0NDcsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdp
dGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoYXJnKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhO
U1Jlc29sdmVyUGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0
ZXJDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTU0NjksNDIgKzU0NjcsNDIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byByZXNvbHZl
ciA9IGNvbnZlcnQ8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2
ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZl
clBhcmFtZXRlcigqcmVzb2x2ZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3Ry
aW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZChFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTdHJpbmdNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTdHJpbmdNZXRob2RDYWxsZXI+KHN0YXRlLCAibnVsbGFibGVTdHJpbmdNZXRo
b2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TnVsbGFibGVTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIGltcGwubnVsbGFibGVT
dHJpbmdNZXRob2QoKSkpOworICAgIHJldHVybiB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmlu
Zz4+KCpzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ01ldGhvZCgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVT
dHJpbmdTdGF0aWNNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2Qo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxl
PElETERPTVN0cmluZz4+KCpzdGF0ZSwgVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRo
b2QoKSkpOworICAgIHJldHVybiB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0
ZSwgVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxh
YmxlU3RyaW5nU3BlY2lhbE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5n
U3BlY2lhbE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lh
bE1ldGhvZENhbGxlcj4oc3RhdGUsICJudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51
bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAt
NTUxMiwxOCArNTUxMCwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNp
Z25lZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLm51bGxhYmxlU3Ry
aW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8SURMRE9N
U3RyaW5nPj4oKnN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3Zl
KGluZGV4KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEVudW1BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQ2FsbGVyPihzdGF0ZSwgIm1l
dGhvZFdpdGhFbnVtQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC01NTMzLDIyICs1NTMxLDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9uYWxWYWx1
ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1Zh
bHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpZiAo
VU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RP
Ymo6OkVudW1UeXBlPigpKTsKICAgICBlbnVtQXJnID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpOwog
ICAgIGltcGwubWV0aG9kV2l0aEVudW1BcmcoZW51bUFyZyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFN0YW5kYWxvbmVFbnVtQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1B
cmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0
YW5kYWxvbmVFbnVtQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFy
ZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC01NTU4LDIyICs1NTU2LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKICAgICBUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uIGVudW1Bcmc7CiAgICAgYXV0
byBvcHRpb25hbFZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0
aW9uPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpb25hbFZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAw
LCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyIs
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbj4oKSk7
CiAgICAgZW51bUFyZyA9IG9wdGlvbmFsVmFsdWUudmFsdWUoKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhTdGFuZGFsb25lRW51bUFyZyhlbnVtQXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxFbnVtQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEVudW1BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0Nh
bGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRW51bUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTU4MiwyMiArNTU4MCwy
MiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgc3RkOjpv
cHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gZW51bUFyZzsKICAgICBpZiAoIWVudW1BcmdWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGVudW1BcmcgPSBwYXJzZUVudW1lcmF0aW9uPFRl
c3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFl
bnVtQXJnKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RX
aXRoT3B0aW9uYWxFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpF
bnVtVHlwZT4oKSk7CiAgICAgfQogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhl
bnVtQXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJn
QW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxl
cj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTYwOCwyMyArNTYwNiwyMyBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgIGVudW1BcmcgPSBUZXN0T2Jq
OjpFbnVtVHlwZTo6RW51bVZhbHVlMTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBvcHRpb25h
bFZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVt
QXJnVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAs
ICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERl
ZmF1bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+
KCkpOwogICAgICAgICBlbnVtQXJnID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpOwogICAgIH0KICAg
ICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoZW51bUFyZyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
c0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3NDYWxsZXI+KHN0YXRlLCAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0Fu
ZFRocm93cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU2MzIsMjAgKzU2MzAsMjAgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJn
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJvYmpBcmci
LCAiVGVzdE9iamVjdCIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgIlRl
c3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKFdURk1vdmUoc3RyQXJn
KSwgKm9iakFyZykpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzKFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoVVNWU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmco
RXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcj4oc3RhdGUsICJt
ZXRob2RXaXRoVVNWU3RyaW5nQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtNTY1MywxOSArNTY1MSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9
IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5n
QXJnKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxh
YmxlVVNWU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxl
VVNWU3RyaW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmcoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxl
VVNWU3RyaW5nQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0Fy
ZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CkBAIC01NjczLDE5ICs1NjcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExVU1ZTdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
TnVsbGFibGVVU1ZTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNW
U3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1Ry
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01Njkz
LDE5ICs1NjkxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExVU1ZTdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0
ZVN0cmluZ0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmciKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEJ5dGVTdHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdB
cmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU3MTMsMTkgKzU3MTEsMTkgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETEJ5dGVTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1l
dGhvZFdpdGhCeXRlU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5n
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVs
bGFibGVCeXRlU3RyaW5nQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9k
V2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVC
eXRlU3RyaW5nQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVT
dHJpbmdBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU3MzMsMTkgKzU3MzEsMTkg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKFdURk1vdmUo
c3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdp
dGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NzUzLDE5ICs1NzUxLDE5IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gc3RyID0gY29udmVydDxJRExCeXRlU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwubWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlh
bGl6ZWRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQ2FsbGVy
PihzdGF0ZSwgInNlcmlhbGl6ZWRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC01NzczLDE5ICs1NzcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VyaWFsaXplZEFyZyA9
IGNvbnZlcnQ8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShXVEZNb3Zl
KHNlcmlhbGl6ZWRBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3Jk
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhSZWNvcmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZENh
bGxlcj4oc3RhdGUsICJtZXRob2RXaXRoUmVjb3JkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNv
cmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNTc5Myw5MyArNTc5MSw5MyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlY29yZFBh
cmFtZXRlciA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhSZWNvcmQoV1RGTW92ZShyZWNv
cmRQYXJhbWV0ZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvblJldHVybmluZ0xvbmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9k
V2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
blJldHVybmluZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJl
dHVybmluZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExMb25nPigqc3RhdGUsIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvblJldHVy
bmluZ0xvbmcoKSkpOworICAgIHJldHVybiB0b0pTPElETExvbmc+KCpzdGF0ZSwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZygpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2Jq
ZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
RXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RDYWxsZXI+KHN0YXRl
LCAibWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1
cm5pbmdPYmplY3QoKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4o
KnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubWV0
aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9k
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ3VzdG9tTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQ2FsbGVyPihzdGF0ZSwgImN1
c3RvbU1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q3VzdG9tTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2QoKnN0YXRlKSk7CisgICAgcmV0dXJu
IGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZCgqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RX
aXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2RXaXRoQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyPihzdGF0ZSwgImN1c3RvbU1ldGhvZFdpdGhBcmdz
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1
c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2RXaXRoQXJncygqc3RhdGUp
KTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3MoKnN0YXRlKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2
YXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZh
dGVNZXRob2RDYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KHN0YXRlLCAi
cHJpdmF0ZU1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblByaXZhdGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU4ODcsMTgg
KzU4ODUsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
RE9NU3RyaW5nPigqc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJu
IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFy
Z3VtZW50KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRo
b2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blB1YmxpY0FuZFByaXZhdGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2Qo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0
ZU1ldGhvZENhbGxlcj4oc3RhdGUsICJwdWJsaWNBbmRQcml2YXRlTWV0aG9kIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blB1YmxpY0FuZFByaXZhdGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJp
dmF0ZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTkwNiwxOCArNTkwNCwx
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQp
KSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1
cm4gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlTWV0aG9k
KFdURk1vdmUoYXJndW1lbnQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5l
ckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
QWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQ2FsbGVyPihzdGF0
ZSwgImFkZEV2ZW50TGlzdGVuZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC01OTI1LDIzICs1OTIzLDIzIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRMaXN0
ZW5lcjxKU0V2ZW50TGlzdGVuZXI+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSwgKmNhc3RlZFRoaXMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGF1dG8gdXNlQ2FwdHVyZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwuYWRkRXZlbnRMaXN0ZW5lcihXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGxpc3Rl
bmVyKSwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3Zl
RXZlbnRMaXN0ZW5lckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25S
ZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsZXI+KHN0YXRlLCAicmVtb3ZlRXZlbnRMaXN0ZW5l
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJl
bW92ZUV2ZW50TGlzdGVuZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU5NDksMjY4
ICs1OTQ3LDI2OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2ZW50TGlzdGVuZXI8SlNFdmVu
dExpc3RlbmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRU
aGlzKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRv
IHVzZUNhcHR1cmUgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
LnJlbW92ZUV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShsaXN0ZW5lciksIFdU
Rk1vdmUodXNlQ2FwdHVyZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0
ZVZvaWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdFN0YXRlVm9pZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlVm9pZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0U3RhdGVWb2lkQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZVZvaWQiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
U3RhdGVWb2lkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLndpdGhTY3JpcHRTdGF0ZVZvaWQoKnN0YXRl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0U3RhdGVPYmooRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXI+
KHN0YXRlLCAid2l0aFNjcmlwdFN0YXRlT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9i
akNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0
ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZU9iaigq
c3RhdGUpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0
YXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9p
ZEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlVm9pZEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3Jp
cHRTdGF0ZVZvaWRFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2Vw
dGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBs
LndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRTdGF0ZU9iakV4Y2Vw
dGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0U3Rh
dGVPYmpFeGNlcHRpb24oKnN0YXRlKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxU
ZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwud2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dENhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0Q2FsbGVyPihzdGF0ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKmNvbnRleHQpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyPihzdGF0ZSwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZSgqc3RhdGUsICpjb250ZXh0KTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVP
YmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgKmNvbnRleHQp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyhFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCpzdGF0ZSwgKmNv
bnRleHQpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiB0b0pT
PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFj
ZXMoKnN0YXRlLCAqY29udGV4dCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2soRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0NhbGxlcj4oc3RhdGUsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVudHMoSW5zcGVjdG9y
OjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoc3RhdGUsIDApKTsKICAgICBpbXBsLndpdGhTY3JpcHRB
cmd1bWVudHNBbmRDYWxsU3RhY2soV1RGTW92ZShzY3JpcHRBcmd1bWVudHMpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3Vt
ZW50QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Q2FsbGVyPihz
dGF0ZSwgIndpdGhEb2N1bWVudEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3Vt
ZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpOwogICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKICAgICBpbXBsLndpdGhEb2N1bWVudEFyZ3VtZW50KGRvY3VtZW50KTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1
bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVu
dEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhD
YWxsZXJEb2N1bWVudEFyZ3VtZW50Q2FsbGVyPihzdGF0ZSwgIndpdGhDYWxsZXJEb2N1bWVudEFy
Z3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
KiBkb2N1bWVudCA9IGNhbGxlckRPTVdpbmRvdyhzdGF0ZSkuZG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLndpdGhDYWxsZXJEb2N1
bWVudEFyZ3VtZW50KCpkb2N1bWVudCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxl
cldpbmRvd0FyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhDYWxsZXJXaW5kb3dBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50Q2FsbGVyPihzdGF0
ZSwgIndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93
QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpbXBsLndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudChjYWxsZXJET01XaW5k
b3coc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0
PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmcoV1RGTW92ZShv
cHQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZh
dWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
cmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1
bHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWVDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFy
Z0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
cmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
aW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShvcHQpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9w
dGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBA
IC02MjE4LDIxICs2MjE2LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxJRExM
b25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKG5v
bk9wdCksIFdURk1vdmUob3B0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJnc0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3NDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02
MjQwLDUwOSArNjIzOCw1MDkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PElETExv
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgYXV0byBvcHQyID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9w
dGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBX
VEZNb3ZlKG9wdDEpLCBXVEZNb3ZlKG9wdDIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsZXI+
KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0
cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsVVNWU3Ry
aW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZl
cnQ8SURMVVNWU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJp
bmcoV1RGTW92ZShzdHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9taWNTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyhFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5n
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSA6IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5n
KHN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyhXVEZNb3ZlKHN0cikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Fu
ZERlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVs
dFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBz
dGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikgOiBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5n
QW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdB
bmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlQ2FsbGVyPihzdGF0
ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWVDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZh
bHVlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gQXRvbWljU3RyaW5nKCJmb28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRv
QXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRW
YWx1ZShXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzTnVsbChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzTnVsbENhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051
bGwiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDog
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVk
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsZXI+KHN0YXRl
LCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5k
ZWZpbmVkKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc051bGwoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyPihzdGF0
ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbCIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0
ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0
ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1w
dHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdJc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
RW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5n
SXNFbXB0eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZN
b3ZlKHN0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0
cmluZ0lzRW1wdHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQ2Fs
bGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmciKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gZW1wdHlTdHJpbmcoKSA6IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0
eVN0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJpbmdD
YWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmlu
ZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5n
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1w
dHlTdHJpbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNT
dHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5DYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3Vi
bGVJc05hTihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxE
b3VibGVJc05hTiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTkNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShu
dW1iZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElz
TmFOQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTkNhbGxlcj4o
c3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsb2F0SXNOYU5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRmxvYXRJc05hTkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVu
cmVzdHJpY3RlZEZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxGbG9hdElzTmFOKFdURk1vdmUobnVtYmVyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbExvbmdMb25nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxMb25nTG9uZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4oKSA6IGNv
bnZlcnQ8SURMTG9uZ0xvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZyhXVEZNb3ZlKG51bWJlcikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbExvbmdMb25nSXNaZXJvQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxMb25nTG9uZ0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xv
bmdJc1plcm8oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm9DYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdJc1plcm8iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJ
c1plcm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1pl
cm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExMb25nTG9uZz4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVyKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdM
b25nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9w
ZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2ln
bmVkTG9uZ0xvbmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDxJRExVbnNpZ25lZExvbmdMb25n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhXVEZN
b3ZlKG51bWJlcikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVu
c2lnbmVkTG9uZ0xvbmdJc1plcm9DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJv
Q2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8i
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0NhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJv
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9u
Zz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8oV1RGTW92
ZShudW1iZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1
ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlQ2FsbGVyPihzdGF0ZSwg
Im1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFNlcXVlbmNlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7
IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKFdURk1vdmUoYXJyYXkp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1w
dHlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlz
RW1wdHkoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1
ZW5jZUlzRW1wdHlDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0Vt
cHR5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eUNhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gYXJyYXkgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZl
cnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5KFdURk1vdmUoYXJyYXkpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEJvb2xlYW5DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4oRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW4oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9u
YWxCb29sZWFuIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5DYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBiID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGJv
b2w+KCkgOiBjb252ZXJ0PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4oV1RGTW92ZShiKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9v
bGVhbklzRmFsc2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZUNhbGxlcj4oc3Rh
dGUsICJtZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBiID0gY29udmVydDxJ
RExCb29sZWFuPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29s
ZWFuSXNGYWxzZShXVEZNb3ZlKGIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEFueShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsQW55Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYSA9IGNv
bnZlcnQ8SURMQW55Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
bnkoV1RGTW92ZShhKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
T2JqZWN0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Q2FsbGVyPihzdGF0ZSwgIm1ldGhv
ZFdpdGhPcHRpb25hbE9iamVjdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3RD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Q2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0
aW9uYWw8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+KCkgOiBjb252ZXJ0PElETE9iamVjdD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0
KFdURk1vdmUoYSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51
bGxhYmxlV3JhcHBlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bE51bGxhYmxlV3JhcHBlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFw
cGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE51bGxhYmxlV3JhcHBlckNhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxO
dWxsYWJsZVdyYXBwZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFw
cGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBl
ckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0
aW9uYWxOdWxsYWJsZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51bGxh
YmxlV3JhcHBlcihXVEZNb3ZlKG9iaikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBw
ZXJJc051bGxDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBl
cklzTnVsbENhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJ
c051bGwiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxs
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklz
TnVsbENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRo
T3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChXVEZNb3ZlKG9iaikpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0
aE5TUmVzb2x2ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlcihFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcj4o
c3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byByZXNvbHZl
ciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZl
cj4+Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxY
UGF0aE5TUmVzb2x2ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsWFBh
dGhOU1Jlc29sdmVyKFdURk1vdmUocmVzb2x2ZXIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxSZWNvcmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZChFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFJlY29yZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxS
ZWNvcmRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gcmVjb3JkID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBzdGQ6Om51bGxvcHQgOiBjb252ZXJ0PElETE51bGxhYmxlPElETFJlY29y
ZDxJRExET01TdHJpbmcsIElETExvbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkKFdURk1vdmUocmVjb3JkKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aENhbGxiYWNrQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVy
PihzdGF0ZSwgIm1ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02NzUwLDE5ICs2NzQ4LDE5IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNr
SW50ZXJmYWNlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBz
Y29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJn
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwubWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdB
bmRDYWxsYmFja0FyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aE5v
bkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY3
NzAsMzkgKzY3NjgsMzkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVy
ZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7IH0pOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmcoV1RGTW92ZShub25DYWxsYmFjayksIGNhbGxiYWNrLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tB
bmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxi
YWNrQW5kT3B0aW9uYWxBcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNr
SW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcoV1RGTW92ZShjYWxsYmFjaykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25Bcmco
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxi
YWNrRnVuY3Rpb25BcmdDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25B
cmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTY4MTAsMTkgKzY4MDgsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBjYWxsYmFjayA9
IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxi
YWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1
bmN0aW9uQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tGdW5jdGlvbkFyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRD
YWxsYmFja0Z1bmN0aW9uQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwpAQCAtNjgzMCw0MyArNjgyOCw0MyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29u
dmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxi
YWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUobm9uQ2Fs
bGJhY2spLCBjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1
bmN0aW9uQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxB
cmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmcoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNr
RnVuY3Rpb25BbmRPcHRpb25hbEFyZ0NhbGxlcj4oc3RhdGUsICJtZXRob2RXaXRoQ2FsbGJhY2tG
dW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0
aW9uQW5kT3B0aW9uYWxBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNr
RnVuY3Rpb25BbmRPcHRpb25hbEFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uPj4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjYWxs
YmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9u
YWxBcmciKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKFdURk1vdmUo
Y2FsbGJhY2spKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tB
bmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRp
b25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxs
YWJsZTxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRo
Q2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRP
cHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGlj
TWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFj
a0FyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjg3NCw3NSAr
Njg3Miw3NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0lu
dGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUs
IDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0Fy
ZyIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBU
ZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2sucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QxKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b25kaXRpb25hbE1ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxNZXRob2QxQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsTWV0aG9kMSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxNZXRob2QxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkpKTsKKyAgICBy
ZXR1cm4gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5jb25kaXRpb25hbE1ldGhvZDEo
KSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRo
b2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVyPihzdGF0ZSwgImNvbmRp
dGlvbmFsTWV0aG9kMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDJDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsTWV0aG9kMigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRo
b2QzQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsTWV0aG9kMyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE1ldGhvZDNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsTWV0aG9kMygpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
ICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2Fk
ZWRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY5NTAs
MjEgKzY5NDgsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9i
amVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKG9iakFy
ZyksIFdURk1vdmUoc3RyQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMkNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC02OTcyLDIxICs2OTcwLDIxIEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIs
ICJUZXN0T2JqIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8g
c3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsZXI+KHN0YXRlLCAi
b3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0NhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtNjk5NCwxOSArNjk5MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJn
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNENhbGxlcj4oc3Rh
dGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CkBAIC03MDE0LDE5ICs3MDEyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZl
cnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShsb25n
QXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q1KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNUNhbGxlcj4o
c3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC03MDM0LDE5ICs3MDMyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gY2FsbGJhY2sgPSBj
b252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxi
YWNrIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOyB9KTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qo
Y2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDZDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KEV4ZWNTdGF0ZSogc3RhdGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kNihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kNkNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q2Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDU0LDE5ICs3MDUyLDE5IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gbGlzdEFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPERPTVN0
cmluZ0xpc3Q+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImxpc3RBcmciLCAiVGVzdE9iamVjdCIsICJvdmVy
bG9hZGVkTWV0aG9kIiwgIkRPTVN0cmluZ0xpc3QiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
bGlzdEFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q3Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kNyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDdDYWxs
ZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
N0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNzA3NCwxOSArNzA3MiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJn
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5
QXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhDYWxsZXIoSlND
OjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDhDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q4KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOChFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOENhbGxlcj4o
c3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4Q2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC03MDk0LDE5ICs3MDkyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9k
KCpvYmpBcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Q2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q5Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kOShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDlDYWxs
ZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
OUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNzExNCwxOSArNzExMiwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHdpbmRvdyA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPERPTVdpbmRvdz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJ3aW5kb3ci
LCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIkRPTVdpbmRvdyIpOyB9KTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2Fk
ZWRNZXRob2QoKndpbmRvdyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEwQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTAoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDEwQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2QiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEwQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzEzNCwxOSArNzEzMiwxOSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJy
YXlBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDExQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNh
bGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFD
YWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC03MTU0LDE5ICs3MTUyLDE5IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJy
YXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJh
dGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNhbGxlcj4o
c3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTcxNzQsMzAgKzcxNzIsMzAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZN
b3ZlKHN0ckFyZykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMTNDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMyhFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEz
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2QxM0NhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxM0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gYmxvYkFyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50
ZXJmYWNlPEJsb2I+Pigqc3RhdGUsIDApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGJsb2JBcmdzLmFy
Z3VtZW50cy52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTcyNDMsMTQgKzcyNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjFDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQ
YXJhbWV0ZXIxKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
MShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9k
V2l0aE9wdGlvbmFsUGFyYW1ldGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0
aW9uYWxQYXJhbWV0ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MjU4LDIx
ICs3MjU2LDIxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShzdHJBcmcpLCBXVEZNb3ZlKG9iakFyZykpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIy
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlv
bmFsUGFyYW1ldGVyMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFt
ZXRlcjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRlZE1l
dGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aE9wdGlvbmFsUGFyYW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzI4
MCwxNCArNzI3OCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0
T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9i
aiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBh
dXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0
aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3Zl
KGxvbmdBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25h
bFBhcmFtZXRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRl
cihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzMxMiwxNCArNzMx
MCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0
dXJuIGFyZ3NDb3VudCA8IDEgPyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGlu
Z1VuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERp
c3Rpbmd1aXNoaW5nVW5pb24xKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXI+KHN0YXRl
LCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtNzMyNywxOSArNzMyNSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVj
dE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRl
cmZhY2U8VGVzdE5vZGU+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGlu
Z1VuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERp
c3Rpbmd1aXNoaW5nVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXI+KHN0YXRl
LCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwpAQCAtNzM0NywxMiArNzM0NSwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVl
ID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhE
aXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUodmFsdWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTczNzEsMTQgKzczNjksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0
aW5ndWlzaGluZ1VuaW9uczFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25z
MShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUNhbGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9k
V2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aDJEaXN0aW5ndWlzaGluZ1VuaW9uczFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CkBAIC03Mzg2LDE5ICs3Mzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29u
dmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9k
ZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0
aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyhXVEZNb3ZlKG9iamVjdE9yTm9kZSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRp
c3Rpbmd1aXNoaW5nVW5pb25zMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGlu
Z3Vpc2hpbmdVbmlvbnMyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkNhbGxlcj4oc3RhdGUs
ICJvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC03NDA2LDEyICs3NDA0LDEyIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
dmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURM
RE9NU3RyaW5nLCBJRExMb25nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9u
cyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc0MzIsMTQgKzc0MzAsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBh
cmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24xQ2Fs
bGVyPihzdGF0ZSwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24xQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc0NDcsMjEgKzc0NDUsMjEgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFj
ZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBhdXRvIG9iamVjdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAxLCAib2JqZWN0IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhO
b25EaXN0aW5ndWlzaGluZ1VuaW9uIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE5v
bkRpc3Rpbmd1aXNoaW5nVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpLCAqb2JqZWN0KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjJDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RX
aXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNh
bGxlcj4oc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24i
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03NDY5LDE0ICs3NDY3LDE0IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgYXV0byBub2RlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9u
RGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0Tm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoTm9u
RGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSksICpub2RlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc0OTIsMTQgKzc0OTAsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBhcmdz
Q291bnQgPCAyID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxl
VW5pb24xQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGVVbmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoTnVsbGFibGVVbmlvbjFDYWxsZXI+KHN0YXRlLCAib3ZlcmxvYWRXaXRoTnVsbGFi
bGVVbmlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwpAQCAtNzUwNywxOSArNzUwNSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iamVjdE9yTm9k
ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJ
RExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
Lm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZVVuaW9uMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51
bGxhYmxlVW5pb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0aE51bGxh
YmxlVW5pb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTc1MjcsMTIgKzc1MjUsMTIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNv
bnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24o
V1RGTW92ZShpbmRleCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVu
aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NTUzLDMyICs3NTUxLDMyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRXaXRoT3B0aW9uYWxVbmlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24x
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9w
dGlvbmFsVW5pb24xQ2FsbGVyPihzdGF0ZSwgIm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24iKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb2JqZWN0T3JO
b2RlID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyB0cnVlIDogY29udmVydDxJ
RExVbmlvbjxJRExET01TdHJpbmcsIElETEJvb2xlYW4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5vdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uKFdURk1vdmUob2JqZWN0T3JOb2Rl
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoT3B0aW9uYWxVbmlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yKEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZFdpdGhPcHRpb25hbFVuaW9uMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMkNhbGxlcj4oc3RhdGUsICJvdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24y
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CkBAIC03NTg2LDEyICs3NTg0LDEyIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
aW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhPcHRp
b25hbFVuaW9uKFdURk1vdmUoaW5kZXgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
T3B0aW9uYWxVbmlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzYxMywxNCArNzYxMSwxNCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxs
YWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1
aXNoaW5nUGFyYW1ldGVyMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6
VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFt
ZXRlcjEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJh
bWV0ZXIxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQ2FsbGVyPihzdGF0ZSwgIm92
ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRl
cjFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc2MjgsMjEgKzc2MjYsMjEgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxs
YWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBub2RlID0gY29udmVy
dDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2Jq
ZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAi
VGVzdE5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVy
KFdURk1vdmUob2JqKSwgKm5vZGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0
aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlz
dGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5n
UGFyYW1ldGVyMihFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlcjIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjJDYWxsZXI+KHN0YXRl
LCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFy
YW1ldGVyMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNzY1MCwxNCArNzY0OCwxNCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIG5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxU
ZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2Fk
V2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBpbmRl
eCA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxl
Tm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIoV1RGTW92ZShub2RlKSwgV1RGTW92ZShpbmRleCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5n
UGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5n
UGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03Njc0
LDM0ICs3NjcyLDM0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICByZXR1cm4gYXJnc0NvdW50IDwgMiA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFz
c01ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gYXJnID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0
PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTG9uZz4oVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RGTW92ZShh
cmcpKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICBy
ZXR1cm4gdG9KUzxJRExMb25nPihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZN
b3ZlKGFyZykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihF
eGVjU3RhdGUqIHN0YXRlKQogewogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RPYmo6OmNsYXNzTWV0aG9kMihzdGF0ZSkpOworICAgIHJldHVybiBK
U1Rlc3RPYmo6OmNsYXNzTWV0aG9kMihzdGF0ZSk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTc3MDksMTUgKzc3MDcsMTUg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgVGVzdE9i
ajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZShhcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNT
dGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwpAQCAtNzcyNSwxNSArNzcyMywxNSBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdU
Rk1vdmUodHlwZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzc1MywxNCArNzc1
MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiB9CiAjZW5k
aWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aENsYW1wKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENhbGxlcj4oc3RhdGUs
ICJjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtNzc2OCwyMSArNzc2NiwyMSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZ3NT
aG9ydCA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqQXJnc0xv
bmcgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY2xhc3NNZXRob2RX
aXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aEVuZm9yY2VSYW5nZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVyPihzdGF0ZSwgImNsYXNzTWV0
aG9kV2l0aEVuZm9yY2VSYW5nZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFu
Z2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03NzkwLDIxICs3Nzg4LDIxIEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NT
aG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoVW5zaWduZWRMb25nU2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdT
ZXF1ZW5jZShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoVW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXI+KHN0YXRlLCAibWV0aG9kV2l0aFVuc2lnbmVk
TG9uZ1NlcXVlbmNlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZUNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc4MTIsMTkgKzc4MTAsMTkgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRM
b25nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubWV0aG9kV2l0aFVuc2lnbmVk
TG9uZ1NlcXVlbmNlKFdURk1vdmUodW5zaWduZWRMb25nU2VxdWVuY2UpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJz
dHJpbmdBcnJheUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb25DYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwpAQCAtNzgzMiwxOCArNzgzMCwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlcyA9IGNvbnZl
cnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElE
TERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpKSkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExT
ZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdM
aXN0RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRp
b248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsZXI+
KHN0YXRlLCAiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RG
dW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25DYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc4NTEsMTggKzc4NDksMTggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB2YWx1ZXMgPSBjb252ZXJ0PElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgMCwgInZhbHVlcyIsICJUZXN0T2JqZWN0IiwgImRvbVN0cmluZ0xpc3RGdW5jdGlvbiIsICJE
T01TdHJpbmdMaXN0Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETElu
dGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMpKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgIHJldHVybiB0b0pT
PElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRX
aXRob3V0TnVsbGFibGVTZXF1ZW5jZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNl
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxs
YWJsZVNlcXVlbmNlQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVT
ZXF1ZW5jZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2VD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNl
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03ODcwLDIxICs3ODY4LDIxIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVu
Y2UoV1RGTW92ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZChFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXI+KHN0YXRlLCAiZ2V0RWxlbWVudEJ5SWQiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc4OTIsMzMgKzc4OTAsMzMgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBlbGVtZW50SWQgPSBBdG9taWNTdHJpbmcoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhzdGF0ZSkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxFbGVt
ZW50Pj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1l
bnRCeUlkKFdURk1vdmUoZWxlbWVudElkKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PEVsZW1lbnQ+Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0
RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNW
R0RvY3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25HZXRTVkdEb2N1bWVudChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3Bl
cmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRDYWxsZXI+KHN0
YXRlLCAiZ2V0U1ZHRG9jdW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1Nl
Y3VyaXR5Rm9yTm9kZSgqc3RhdGUsIGltcGwuZ2V0U1ZHRG9jdW1lbnQoKSkpKTsKKyAgICByZXR1
cm4gdG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5
Rm9yTm9kZSgqc3RhdGUsIGltcGwuZ2V0U1ZHRG9jdW1lbnQoKSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0
MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252
ZXJ0MUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDEoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQ2FsbGVyPihzdGF0ZSwgImNvbnZlcnQxIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbnZlcnQxQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC03OTI2LDE5ICs3OTI0LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJ2YWx1ZSIs
ICJUZXN0T2JqZWN0IiwgImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0pOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuY29udmVydDEoKnZhbHVlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZl
cnQyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQ2Fs
bGVyPihzdGF0ZSwgImNvbnZlcnQyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03OTQ2LDE5ICs3
OTQ0LDE5IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAidmFsdWUiLCAiVGVzdE9iamVjdCIs
ICJjb252ZXJ0MiIsICJUZXN0Tm9kZSIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmNvbnZlcnQyKFdURk1vdmUodmFsdWUpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDMoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVyPihz
dGF0ZSwgImNvbnZlcnQzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQzQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03OTY2LDE5ICs3OTY0LDE5
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwuY29udmVydDMoV1RGTW92ZSh2YWx1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQ0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQ0Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0NChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRDYWxsZXI+KHN0YXRlLCAiY29udmVydDQiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29udmVydDRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRDYWxsZXIoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKQEAgLTc5ODYsNjUgKzc5ODQsNjUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2
YWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwu
Y29udmVydDQoV1RGTW92ZSh2YWx1ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQ
b2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAibXV0YWJsZVBvaW50RnVu
Y3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSk7CisgICAgcmV0dXJu
IHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwubXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJs
ZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyPihzdGF0ZSwgImltbXV0
YWJsZVBvaW50RnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlv
bigpKSk7CisgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKnN0YXRlLCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9yYW5nZUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2UoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyPihzdGF0ZSwgIm9yYW5nZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcmFuZ2VDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpbXBsLmJhbmFuYSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5n
TWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZhcmlhZGljU3RyaW5nTWV0aG9kQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChFeGVjU3RhdGUqIHN0YXRl
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNTdHJpbmdNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VmFyaWFkaWNTdHJpbmdNZXRob2RDYWxsZXI+KHN0YXRlLCAidmFyaWFkaWNTdHJpbmdNZXRob2Qi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFy
aWFkaWNTdHJpbmdNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgwNTIsMjEg
KzgwNTAsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIDEpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGltcGwudmFyaWFkaWNTdHJpbmdNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWls
LmFyZ3VtZW50cy52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3Vi
bGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNEb3VibGVNZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJp
YWRpY0RvdWJsZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25WYXJpYWRpY0RvdWJsZU1ldGhvZENhbGxlcj4oc3RhdGUsICJ2YXJpYWRpY0RvdWJsZU1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY0RvdWJsZU1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtODA3NCwy
MSArODA3MiwyMSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElETFVucmVzdHJpY3Rl
ZERvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRW
YXJpYWRpY0FyZ3VtZW50czxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpzdGF0ZSwgMSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC52YXJpYWRpY0Rv
dWJsZU1ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwuYXJndW1lbnRzLnZhbHVlKCkp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9k
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY05vZGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXI+
KHN0YXRlLCAidmFyaWFkaWNOb2RlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhv
ZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTgwOTYsMjEgKzgwOTQsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0g
Y29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJoZWFkIiwgIlRlc3RP
YmplY3QiLCAidmFyaWFkaWNOb2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlh
ZGljQXJndW1lbnRzPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAxKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnZhcmlhZGljTm9kZU1ldGhv
ZCgqaGVhZCwgV1RGTW92ZSh0YWlsLmFyZ3VtZW50cy52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2RDYWxsZXI+KHN0YXRlLCAidmFy
aWFkaWNVbmlvbk1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1VuaW9uTWV0aG9kQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTgxMTgsMjEgKzgxMTYsMjEgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVu
dHM8SURMVW5pb248SURMSW50ZXJmYWNlPE5vZGU+LCBJRExET01TdHJpbmc+Pigqc3RhdGUsIDEp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwudmFy
aWFkaWNVbmlvbk1ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwuYXJndW1lbnRzLnZh
bHVlKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxP
cGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXI+KHN0YXRlLCAiYW55
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkFueUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKQEAgLTgxNDAsNTMgKzgxMzgsNTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29u
dmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1
dG8gYiA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmFueShXVEZNb3ZlKGEpLCBX
VEZNb3ZlKGIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7
CitzdGF0aWMgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvblByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRl
KSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpX
aW5kb3dPbmx5Pigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0
YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblBy
b21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxQcm9taXNlT3BlcmF0
aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbkNhbGxlcj4o
c3RhdGUsIFdURk1vdmUocHJvbWlzZSksICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbihXVEZN
b3ZlKHByb21pc2UpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEZsb2F0QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBSZWY8
RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldp
dGhGbG9hdEFyZ3VtZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxv
YXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Citz
dGF0aWMgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoRXhlY1N0YXRlKiBz
dGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChFeGVjU3RhdGUqIHN0YXRlKQogewog
ICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlz
ZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldp
dGhGbG9hdEFyZ3VtZW50UHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPbmx5
Pigqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2Us
IFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbFByb21pc2VPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZs
b2F0QXJndW1lbnRDYWxsZXI+KHN0YXRlLCBXVEZNb3ZlKHByb21pc2UpLCAidGVzdFByb21pc2VG
dW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoRmxvYXRBcmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudENhbGxlcihK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04
MTk0LDc3ICs4MTkyLDc3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxv
YXRBcmd1bWVudChXVEZNb3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJik7CitzdGF0aWMgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJv
bWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhFeGNlcHRpb25Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+
KCpzdGF0ZSkpOworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlLCBQcm9t
aXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNT
dGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVy
PihzdGF0ZSwgV1RGTW92ZShwcm9taXNlKSwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0
aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQ2FsbGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhFeGNlcHRpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihXVEZNb3ZlKHByb21pc2UpKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3Vt
ZW50Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudENhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50
QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworc3Rh
dGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudFByb21pc2UsIFByb21pc2VFeGVj
dXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNl
RnVuY3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRv
d09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJn
dW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRl
KiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxQcm9taXNlT3BlcmF0aW9uPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50
Q2FsbGVyPihzdGF0ZSwgV1RGTW92ZShwcm9taXNlKSwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRo
T3B0aW9uYWxJbnRBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9w
dGlvbmFsSW50QXJndW1lbnRDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+
KCkgOiBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aE9wdGlvbmFsSW50QXJndW1lbnQoV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlND
OjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dT
Y29wZSYpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNTdGF0ZSosIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xKEV4
ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjEoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFBy
b21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3Zlcmxv
YWRlZEZ1bmN0aW9uMVByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4o
KnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9taXNlRnVuY3Rpb248anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlLCBQcm9taXNl
RXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJs
b2FkZWRGdW5jdGlvbjFQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMVByb21pc2UoRXhlY1N0YXRlKiBz
dGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxQcm9taXNlT3BlcmF0aW9uPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQ2FsbGVyPihzdGF0ZSwg
V1RGTW92ZShwcm9taXNlKSwgInRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9t
aXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0
aW9uMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
UmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC04MjcyLDI3ICs4MjcwLDI3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8
SURMRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3Zl
cmxvYWRlZEZ1bmN0aW9uKFdURk1vdmUoYSksIFdURk1vdmUocHJvbWlzZSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VPdmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmKTsKK3N0YXRpYyBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMihFeGVjU3RhdGUq
IHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
QVNTRVJUKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVu
Y3Rpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5j
dGlvbjJQcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSkp
OworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yUHJvbWlzZSwgUHJvbWlzZUV4ZWN1dGlv
blNjb3BlOjpXaW5kb3dPbmx5Pigqc3RhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24yUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJQcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpjYWxsUHJvbWlzZU9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMkNhbGxlcj4oc3RhdGUsIFdURk1vdmUo
cHJvbWlzZSksICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpA
QCAtODMwMCwxMiArODI5OCwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlcXVlc3QgPSBjb252ZXJ0PElE
TEludGVyZmFjZTxGZXRjaFJlcXVlc3Q+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAicmVxdWVzdCIsICJUZXN0
T2JqZWN0IiwgInRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIiwgIkZldGNoUmVxdWVzdCIp
OyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
LnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKCpyZXF1ZXN0LCBXVEZNb3ZlKHByb21pc2Up
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC04MzIyLDYzICs4MzIwLDYzIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQ
cm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
Oworc3RhdGljIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQ
cm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9t
aXNlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc3RhdGUpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbjxqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblByb21pc2UsIFByb21pc2VF
eGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKSk7CisgICAgcmV0dXJuIGNhbGxQcm9t
aXNlRnVuY3Rpb248anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNl
RnVuY3Rpb25Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0
ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3Rh
dGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvblBy
b21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBU
ZXN0T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4
ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworc3RhdGljIEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0
aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0
YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1By
b21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBBU1NF
UlQoc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlv
bjxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldp
dGhFeGNlcHRpb25Qcm9taXNlLCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpz
dGF0ZSkpOworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2Us
IFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T25seT4oKnN0YXRlKTsKIH0KIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0
YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhF
eGNlcHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgVGVzdE9iajo6
dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVBy
b21pc2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3Rv
bVByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6UmVqZWN0UHJvbWlzZT4oc3RhdGUsICJ0ZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbVByb21pc2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVByb21pc2VGdW5jdGlv
bigqc3RhdGUpKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVByb21pc2VGdW5j
dGlvbigqc3RhdGUpOwogfQogCiAjaWYgRU5BQkxFKENPTkRJVElPTjEpCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDEoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsT3ZlcmxvYWQxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsT3Zlcmxv
YWQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTgzODYs
MjIgKzgzODQsMjIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0cikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTkRJVElPTjIpCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbE92ZXJsb2FkMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIoRXhlY1N0YXRl
KiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyPihzdGF0ZSwgImNvbmRpdGlvbmFsT3Zl
cmxvYWQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTg0
MDksMTUgKzg0MDcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05ESVRJT04xKSB8fCBFTkFCTEUoQ09ORElU
SU9OMikKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04NDM3LDE0ICs4NDM1LDE0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIH0KICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMUNhbGxl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmVybG9hZDEoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQx
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlv
bmFsT3ZlcmxvYWQxQ2FsbGVyPihzdGF0ZSwgInNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDFDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTg0NTIsMjAgKzg0NTAsMjAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoQ09ORElUSU9OKQotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDJDYWxsZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQyKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVy
YXRpb248anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2Fk
MkNhbGxlcj4oc3RhdGUsICJzaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNp
bmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRp
dGlvbmFsT3ZlcmxvYWQyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04NDczLDE0ICs4
NDcxLDE0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBp
bXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVD
b25kaXRpb25hbE92ZXJsb2FkKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC04NDk3LDE0ICs4NDk1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFj
aFNoYWRvd1Jvb3RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93
U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdENh
bGxlcj4oc3RhdGUsICJhdHRhY2hTaGFkb3dSb290Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jv
b3RDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdENhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtODUxMiwxOSArODUxMCwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluaXQgPSBj
b252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICBpbXBsLmF0dGFjaFNoYWRvd1Jvb3QoV1RGTW92ZShpbml0KSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRl
ckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTQzo6VGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVy
YXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxE
aWN0aW9uYXJ5UGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9u
YXJ5UGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9w
ZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJDYWxsZXI+KHN0YXRlLCAib3Bl
cmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRp
b25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9w
ZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKQEAgLTg1MzIsMTkgKzg1MzAsMTkgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBkaWN0ID0gY29u
dmVydDxJRExEaWN0aW9uYXJ5PERpY3Rpb25hcnlJbXBsTmFtZT4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpbXBsLm9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIo
V1RGTW92ZShkaWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1l
dGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1
ZmZlclNvdXJjZVBhcmFtZXRlckNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
Qzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJT
b3VyY2VQYXJhbWV0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
QnVmZmVyU291cmNlUGFyYW1ldGVyQ2FsbGVyPihzdGF0ZSwgImJ1ZmZlclNvdXJjZVBhcmFtZXRl
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJDYWxsZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
QnVmZmVyU291cmNlUGFyYW1ldGVyQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC04NTUy
LDI3ICs4NTUwLDI3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gZGF0YSA9IGNvbnZlcnQ8SURMQnVmZmVyU291
cmNlPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5idWZmZXJTb3VyY2VQYXJhbWV0
ZXIoV1RGTW92ZShkYXRhKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxsZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdDYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3Ry
aW5nKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Ub1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OmNhbGxPcGVyYXRpb248anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Ub1N0cmluZ0NhbGxlcj4oc3RhdGUsICJ0b1N0cmluZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0
cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFVTVlN0cmluZz4oKnN0YXRlLCBpbXBsLnN0cmluZ2lm
aWVyQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwg
aW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNP
TkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKQEAgLTg1OTMsMTAg
Kzg1OTEsMTAgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1
ZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlz
aW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCAr
MzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTY1
LDcgKzY1LDcgQEAgcHJpdmF0ZToKIAogdXNpbmcgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3RvcjxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzPjsKIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzMShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03NSwxMiArNzUsMTIgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBhcnJheUJ1ZmZlciA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEFycmF5QnVmZmVyPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgMCwgImFycmF5QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVs
bHB0ciwgIkFycmF5QnVmZmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6
OmNyZWF0ZSgqYXJyYXlCdWZmZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05l
d2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3Rh
dGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2Jq
ZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtOTAsMTIgKzkwLDEyIEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gYXJyYXlCdWZmZXJWaWV3ID0gY29udmVydDxJRExJbnRlcmZhY2U8QXJyYXlCdWZmZXJW
aWV3Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsgfSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKGFycmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50
ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMzKEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTEwNSwxMiArMTA1LDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYmxvYiA9IGNv
bnZlcnQ8SURMSW50ZXJmYWNlPEJsb2I+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiYmxvYiIsICJUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJCbG9iIik7IH0pOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZSgqYmxvYik7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVj
dCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGTW92ZShvYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMjAsMTIgKzEyMCwx
MiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1v
dmUoc3RyaW5nKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
c3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKIH0K
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzNShFeGVjU3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xMzMsMTIgKzEzMywxMiBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUo
KSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8gbG9uZ0FyZ3MgPSBjb252ZXJ0
VmFyaWFkaWNBcmd1bWVudHM8SURMTG9uZz4oKnN0YXRlLCAwKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpjcmVhdGUoV1RGTW92ZShsb25nQXJncykpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKLXRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNv
bnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIyMiwyMiArMjIyLDIxIEBA
IHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZGVzdHIKICAgICB0aGlzT2JqZWN0
LT5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycygpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogZG9tT2JqZWN0
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBj
bGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC02NSw3ICs2NSw3IEBA
IHByaXZhdGU6CiAKIHVzaW5nIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZT47CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3Ry
dWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEoRXhlY1N0YXRlKiBz
dGF0ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlMShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtNzMsMTIgKzczLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29u
c3RydWN0SlMKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsK
ICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElE
TERPTVN0cmluZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc2VxdWVuY2VP
ZlN0cmluZ3MpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8
SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPj4oKnN0
YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKEV4ZWNTdGF0
ZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTg4LDEyICs4OCwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+
Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsK
IH0KIAotdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVj
U3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTczLDIyICsxNzMsMjEgQEAg
dm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcQogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6On5KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUg
anNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21P
YmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmpl
Y3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJvdG90eXBlKiBk
b21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRv
bU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWls
dGlucy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMTIgKzM2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5z
UHJvdG90eXBlRnVuY3Rpb25OYW1lZEl0ZW0oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5h
bWVkSXRlbShKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogCiBjbGFz
cyBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNjcsMjIgKzE2NywyMSBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zCiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnMqPihzdGF0ZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNUZXN0T3Zl
cnJpZGVCdWlsdGluc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odGhpc1ZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21P
YmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJyaWRlQnVpbHRp
bnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgp
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90
eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
UHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTIwNywxNCArMjA2LDE0IEBAIEpTVmFsdWUgSlNUZXN0T3ZlcnJpZGVC
dWlsdGluczo6Z2V0Q29uc3QKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3Zl
cnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T3ZlcnJpZGVCdWlsdGlucyosIEpTQzo6VGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGlu
c1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0
T3ZlcnJpZGVCdWlsdGlucyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJy
aWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRl
bUNhbGxlcj4oc3RhdGUsICJuYW1lZEl0ZW0iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVk
SXRlbUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMq
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTIyMiw4ICsy
MjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxOb2RlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJ
dGVtKFdURk1vdmUobmFtZSkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkpKTsK
IH0KIAogYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZp
c2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwyMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKIAog
Ly8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3Ry
aW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
ZWNvbmRMb25nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRo
aXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJz
dFN0cmluZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRo
TG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAK
IGNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0NSw5ICsxNDUsOSBAQCB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb246OmRlc3Ryb3koSlNDOjpKCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXph
dGlvbjo6fkpTVGVzdFNlcmlhbGl6YXRpb24oKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2Fz
dEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNl
cmlhbGl6YXRpb24+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgdGhpc1Zh
bHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9u
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKQpAQCAtMTU3LDcgKzE1Nyw3
IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIEIKIAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rl
c3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW8KIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInNlY29uZExv
bmdBdHRyaWJ1dGUiKTsKIH0KQEAgLTE4OSw3ICsxODksNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNU
ZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRl
LCB0aGlzVmFsdWUsICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIik7CiB9CkBAIC0yMDUs
NyArMjA1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpbwogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6
YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXI+KHN0YXRlLCB0aGlz
VmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKIH0KQEAgLTIyMSw3
ICsyMjEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRyaWJ1dGU8anNU
ZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1
ZSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwogfQpAQCAtMjM1LDIyICsyMzUsMjEgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpbwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNU
ZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0
U2VyaWFsaXphdGlvblByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI2MSw5ICsyNjAsOSBA
QCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFCiAKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTI4MCw5ICsy
NzksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0yOTksOSArMjk4
LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFs
aXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25U
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIHZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpA
QCAtMzE4LDkgKzMxNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW8KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCB2
YWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24m
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC0z
MzcsOSArMzM2LDkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpbwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9u
Z0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRl
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRlIik7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRl
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTM1OSw3ICszNTgs
NyBAQCBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjCiAgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiog
dGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CkBAIC0zODAsMTAg
KzM3OSwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhCiAgICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlm
dGhMb25nQXR0cmlidXRlVmFsdWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSog
c3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFsaXph
dGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQ2FsbGVyPihzdGF0ZSwgInRvSlNPTiIpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwyMCArNDAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24o
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9u
UmV0dXJuaW5nKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0
aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0
dXJuaW5nKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgpAQCAtMTQ5LDkgKzE0OSw5IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWMKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6On5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JBdHRy
aWJ1dGUoRXhlY1N0YXRlJiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JBdHRyaWJ1dGUo
RXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4odGhpc1ZhbHVlKTsKIH0KIAogdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3RGb3JPcGVyYXRp
b24oRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlPjo6YXR0cmlidXRlPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAidmFsdWUiKTsKIH0KQEAgLTE3Nyw3ICsxNzcsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjCiAKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6YXR0cmlidXRl
PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXI+
KHN0YXRlLCB0aGlzVmFsdWUsICJyZWFkb25seVZhbHVlIik7CiB9CkBAIC0xOTMsNyArMTkzLDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcj4oc3RhdGUs
IHRoaXNWYWx1ZSwgImNhY2hlZFZhbHVlIik7CiB9CkBAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0
YXRlJiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQb3J0c0dldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInBvcnRzIik7CiB9CkBAIC0yMjgs
NyArMjI4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
UmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZT46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiY2Fj
aGVkUmVhZG9ubHlWYWx1ZSIpOwogfQpAQCAtMjQ1LDIyICsyNDUsMjEgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWRv
bU9iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzEsOSArMjcw
LDkgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Um
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ2YWx1ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCB2YWx1ZSwgInZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTI5MCw5ICsyODks
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjCiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRW
YWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZh
bHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNhY2hlZFZhbHVl
Iik7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiY2Fj
aGVkVmFsdWUiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzEyLDE0ICszMTEsMTQgQEAgSlNW
YWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25DYWxsZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZT46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkNhbGxlcj4oc3RhdGUsICJmdW5jdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkNhbGxlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwpAQCAtMzI3LDI0ICszMjYsMjQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IGNv
bnZlcnQ8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLmZ1bmN0aW9uKFdURk1vdmUodmFsdWUpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlv
blJldHVybmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25GdW5jdGlvblJldHVybmluZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5pbmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Pjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nQ2FsbGVyPihzdGF0ZSwgImZ1bmN0aW9uUmV0
dXJuaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0
dXJuaW5nQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KCpzdGF0ZSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9uUmV0dXJuaW5nKCkpKTsK
KyAgICByZXR1cm4gdG9KUzxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZnVuY3Rp
b25SZXR1cm5pbmcoKSk7CiB9CiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDM4ICs0MiwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZ1
bmN0aW9ucwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmMoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hh
ZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYWJsZXNBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25VbmlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24oSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShKU0M6OkV4ZWNTdGF0ZSop
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhTZXF1ZW5jZUFyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25BcmcoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uSW1tdXRh
YmxlUG9pbnRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRy
aWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRl
c3RTdWJPYmooSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNV
bnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKIGNsYXNzIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdFR5cGVkZQogICAgIHsgIlRlc3RTdWJPYmoiLCBSZWFkT25seSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaiksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKLXRlbXBsYXRlPD4gRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25z
dHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTMzLDEzICsxMzMsMTMgQEAgdGVtcGxhdGU8PiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBo
ZWxsbyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgYXV0byB0ZXN0Q2FsbGJhY2tG
dW5jdGlvbiA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwg
MSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOyB9KTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIHRlc3RD
YWxsYmFja0ludGVyZmFjZSA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2Fs
bGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAyLCAidGVzdENhbGxiYWNrSW50ZXJmYWNlIiwgIlRlc3RUeXBlZGVmcyIsIG51
bGxwdHIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICBhdXRvIG9iamVjdCA9IFRlc3RUeXBlZGVmczo6Y3JlYXRlKFdURk1vdmUoaGVsbG8pLCB0ZXN0
Q2FsbGJhY2tGdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCB0ZXN0Q2FsbGJhY2tJbnRlcmZhY2Uu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0VHlwZWRlZnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RUeXBlZGVmcz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMjIzLDkgKzIy
Myw5IEBAIHZvaWQgSlNUZXN0VHlwZWRlZnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RUeXBlZGVmczo6fkpTVGVzdFR5cGVkZWZzKCk7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdFR5cGVkZWZzKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6
Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RUeXBlZGVmcyogQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmNhc3RGb3JBdHRyaWJ1dGUoRXhlY1N0YXRlJiwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RU
eXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFR5cGVk
ZWZzKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FzdEZvck9wZXJhdGlvbihFeGVj
U3RhdGUmIHN0YXRlKQpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dFR5cGVkZWZzKiBCaW5kaW4KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNV
bnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRl
PGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KHN0YXRlLCB0aGlzVmFs
dWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2kKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4
ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6YXR0cmlidXRlPGpzVGVzdFR5
cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiB9CkBAIC0yNjcsNyArMjY3
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdQogCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIo
RXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
clRlc3RTdWJPYmpHZXR0ZXI+KHN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqIik7CiB9CkBA
IC0yODEsNyArMjgxLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29u
cwogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0
VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0yOTcsNyArMjk3LDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cgogCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUm
LCBKU1Rlc3RUeXBlZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
Iik7CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzQXR0cgogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uIik7CiB9CkBAIC0zMjksNyArMzI5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzU3RyaQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBl
ZGVmcyYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0VHlwZWRlZnM+OjphdHRyaWJ1dGU8anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uIik7CiB9CkBAIC0zNDMsMjIgKzM0MywyMSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0VHlwZWRlZnNTdHJpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWUganNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUq
Pih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0VHlwZWRlZnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFR5cGVk
ZWZzUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3Qp
KSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNjksOSArMzY4LDkgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yKEV4ZWNTdAogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZz
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzVW5z
aWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0
ciIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgdmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAtMzg4LDkgKzM4Nyw5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2kKIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKLWJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSIpOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNj
cmlwdFZhbHVlIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0lt
bXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQpAQCAtNDA3LDkgKzQwNiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc0ltbXUKIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZz
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQyNiw5ICs0
MjUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyCiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCB2YWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCkBAIC00NDUsOSArNDQ0LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cgogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCi1ib29sIHNldEpT
VGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgdmFsdWUsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZz
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQpAQCAt
NDY0LDkgKzQ2Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmkK
IAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5
cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIHZhbHVlLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKQEAgLTQ4NiwzMiArNDg1LDMyIEBAIEpTVmFsdWUgSlNU
ZXN0VHlwZWRlZnM6OmdldENvbnN0cnVjdG9yKFYKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uRnVuYyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVyPihzdGF0ZSwgImZ1bmMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25GdW5jQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8geCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZl
cnQ8SURMU2VxdWVuY2U8SURMTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBs
LmZ1bmMoV1RGTW92ZSh4KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblNldFNoYWRvd0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlND
OjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3co
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNo
YWRvd0NhbGxlcj4oc3RhdGUsICJzZXRTaGFkb3ciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dD
YWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CkBAIC01MTksMjcgKzUxOCwyNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHdpZHRo
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIGF1dG8gYmx1ciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxv
YXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICBhdXRvIGNvbG9yID0gc3RhdGUtPmFyZ3Vt
ZW50KDMpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgzKSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8g
c3RkOjpvcHRpb25hbDxmbG9hdD4oKSA6IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICBpbXBsLnNldFNoYWRvdyhXVEZNb3ZlKHdpZHRoKSwg
V1RGTW92ZShoZWlnaHQpLCBXVEZNb3ZlKGJsdXIpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92ZShh
bHBoYSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RU
eXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmco
RXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9u
PGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxs
ZXI+KHN0YXRlLCAibWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFNlcXVlbmNlQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
U2VxdWVuY2VBcmdDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpAQCAtNTQ3LDE4ICs1
NDYsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4oaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RG
TW92ZShzZXF1ZW5jZUFyZykpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOworICAgIHJldHVybiB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwubWV0aG9k
V2l0aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwg
SlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZyhFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2Fs
bE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5j
ZUFyZ0NhbGxlcj4oc3RhdGUsICJudWxsYWJsZVNlcXVlbmNlQXJnIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
TnVsbGFibGVTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5
cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTZXF1ZW5jZUFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZz
KiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC01NjYsMTkg
KzU2NSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9m
TnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6
OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyPihzdGF0ZSwg
InNlcXVlbmNlT2ZOdWxsYWJsZXNBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFi
bGVzQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVz
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTU4NiwxOSArNTg1LDE5IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETE51bGxh
YmxlPElETERPTVN0cmluZz4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgaW1wbC5zZXF1
ZW5jZU9mTnVsbGFibGVzQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0NhbGxlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVT
ZXF1ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRl
ZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVz
QXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6
Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1
ZW5jZU9mTnVsbGFibGVzQXJnQ2FsbGVyPihzdGF0ZSwgIm51bGxhYmxlU2VxdWVuY2VPZk51bGxh
Ymxlc0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVz
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTYwNiwxOSArNjA1LDE5IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVl
bmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnKFdURk1vdmUoc2VxdWVuY2VB
cmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9u
c0FyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1
ZW5jZU9mVW5pb25zQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0Fy
ZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5
cGVkZWZzPjo6Y2FsbE9wZXJhdGlvbjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQ2FsbGVyPihzdGF0ZSwgIm51bGxhYmxlU2VxdWVuY2VP
ZlVuaW9uc0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0Nh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJn
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTYyNiwxOSArNjI1LDE5IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNl
PElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+Pj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJn
KFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9u
QXJnQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25VbmlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJn
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlw
ZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25Vbmlv
bkFyZ0NhbGxlcj4oc3RhdGUsICJ1bmlvbkFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnQ2Fs
bGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZ0NhbGxlcihKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CkBAIC02NDYsMTkgKzY0NSwxOSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHVuaW9uQXJn
ID0gY29udmVydDxJRExVbmlvbjxJRExET01TdHJpbmcsIElETExvbmc+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgaW1wbC51bmlvbkFyZyhXVEZNb3ZlKHVuaW9uQXJnKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uRnVuY1dpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxs
T3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2Fs
bGVyPihzdGF0ZSwgImZ1bmNXaXRoQ2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1w
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wQ2FsbGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAgLTY2NiwzNiArNjY1LDM2IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YXJnMSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGF1dG8gYXJnMiA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4oKSA6IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSksIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIGltcGwuZnVuY1dp
dGhDbGFtcChXVEZNb3ZlKGFyZzEpLCBXVEZNb3ZlKGFyZzIpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rp
b25DYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTQzo6VGhyb3dTY29w
ZSYpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJs
ZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNhbGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXI+KHN0YXRlLCAiaW1tdXRhYmxl
UG9pbnRGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxs
ZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsZXIo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxT
VkdQb2ludD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0
YWJsZVBvaW50RnVuY3Rpb24oKSkpOworICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxTVkdQ
b2ludD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltbXV0YWJs
ZVBvaW50RnVuY3Rpb24oKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5
cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbE9wZXJhdGlv
bjxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkNh
bGxlcj4oc3RhdGUsICJzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3Ry
aW5nU2VxdWVuY2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5
cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5n
U2VxdWVuY2VGdW5jdGlvbkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVk
ZWZzKiBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MDMs
MTggKzcwMiwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpz
dGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpKSkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4gdG9KUzxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9u
MkNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNDOjpUaHJvd1Njb3Bl
Jik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1Nl
cXVlbmNlRnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkNhbGxlcj4oc3RhdGUsICJzdHJpbmdT
ZXF1ZW5jZUZ1bmN0aW9uMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb24y
Q2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkNh
bGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CkBAIC03MjIsMTggKzcyMSwxOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24y
KFdURk1vdmUodmFsdWVzKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgcmV0dXJuIHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nU2Vx
dWVuY2VGdW5jdGlvbjIoV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhT
ZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RU
eXBlZGVmcyosIEpTQzo6VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWly
ZXNJbmNsdWRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OmNh
bGxPcGVyYXRpb248anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVu
Y2VUaGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVyPihzdGF0ZSwgImNhbGxXaXRoU2VxdWVuY2VUaGF0
UmVxdWlyZXNJbmNsdWRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1
aXJlc0luY2x1ZGVDYWxsZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyog
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVu
Y2VUaGF0UmVxdWlyZXNJbmNsdWRlQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKQEAg
LTc0MSwyNCArNzQwLDI0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3QKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RXZlbnRUYXJnZXQ+Pj4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEJvb2xlYW4+KGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92
ZShzZXF1ZW5jZUFyZykpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworICAgIHJldHVybiB0b0pTPElETEJvb2xlYW4+KGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRo
YXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMq
LCBKU0M6OlRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU0M6OlRocm93U2NvcGUmKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+Ojpj
YWxsT3BlcmF0aW9uPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhj
ZXB0aW9uQ2FsbGVyPihzdGF0ZSwgIm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoRXhjZXB0aW9uQ2FsbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMqIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigq
c3RhdGUsIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCiBib29sIEpTVGVzdFR5cGVkZWZzT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsMTUgKzYwLDE1
IEBAIHZvaWQgUnVudGltZUFycmF5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNf
Y2FzdDxSdW50aW1lQXJyYXkqPihjZWxsKS0+UnVudGltZUFycmF5Ojp+UnVudGltZUFycmF5KCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVl
IFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFJ1bnRpbWVBcnJheSog
dGhpc09iamVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PFJ1bnRpbWVBcnJheSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0R5bmFt
aWNEb3duY2FzdDxSdW50aW1lQXJyYXkqPih0aGlzVmFsdWUpOwogICAgIGlmICghdGhpc09iamVj
dCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpKTsK
KyAgICByZXR1cm4ganNOdW1iZXIodGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpOwogfQogCiB2b2lk
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2
aXNpb24gMjEwMjQ3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOCwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4Myw3IEBAIHByb3RlY3RlZDoKIAog
cHJpdmF0ZToKICAgICBSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci0gICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIEJpbmRpbmdzQXJyYXkqIG1f
YXJyYXk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3Bw
CShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRo
b2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDE1ICs1NCwx
NSBAQCB2b2lkIFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lTWV0aG9kOjps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0pTVmFsdWUgUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxSdW50
aW1lTWV0aG9kKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJ1bnRpbWVNZXRo
b2QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxSdW50aW1lTWV0aG9kKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPm1fbWV0aG9kLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIodGhpc09iamVjdC0+bV9tZXRob2QtPm51bVBhcmFtZXRlcnMoKSk7CiB9CiAKIGJvb2wgUnVu
dGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpA
QCAtNzYsNyArNzYsNyBAQCBib29sIFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChK
CiAgICAgcmV0dXJuIEludGVybmFsRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19j
YXN0PFJ1bnRpbWVNZXRob2QqPihleGVjLT5qc0NhbGxlZSgpKTsKIAogICAgIGlmICghbWV0aG9k
LT5tZXRob2QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8SW5zdGFuY2U+
IGluc3RhbmNlOwogCkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGwKICAgICAgICAgUnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICAgICAg
aW5zdGFuY2UgPSBydW50aW1lT2JqZWN0LT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CiAgICAgICAg
IGlmICghaW5zdGFuY2UpIAotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSdW50
aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAg
ICAgICAgcmV0dXJuIFJ1bnRpbWVPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDYWxsaW5nIGEgcnVudGltZSBvYmpl
Y3Qgb2YgYSBwbHVnaW4gZWxlbWVudD8KICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cyhK
U0hUTUxFbGVtZW50OjppbmZvKCkpKQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kKTsKICAg
ICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxUeXBlIFJ1bnRpbWVNZXRob2Q6OmdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9tZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyAr
NjYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0
aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgQmluZGlu
Z3M6Ok1ldGhvZCogbV9tZXRob2Q7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOC0yMDA5LCAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02MiwxNiArNjIsMTYgQEAgdm9pZCBSdW50aW1lT2JqZWN0OjppbnZhbGlk
YXRlKCkKICAgICBtX2luc3RhbmNlID0gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVu
dGltZU9iamVjdDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1
bnRpbWVPYmplY3Q6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpz
Q2FzdDxSdW50aW1lT2JqZWN0Kj4odGhpc1ZhbHVlKTsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGlu
c3RhbmNlID0gdGhpc09iai0+bV9pbnN0YW5jZTsKIAogICAgIGlmICghaW5zdGFuY2UpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywg
c2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNj
b3BlKTsKICAgICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIApAQCAtODAsMTkgKzgwLDE5IEBA
IEVuY29kZWRKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmZhbGxiYWNrT2IKIAogICAgIGluc3RhbmNl
LT5lbmQoKTsKICAgICAgICAgICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0
OjpmaWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0pTVmFsdWUgUnVudGltZU9iamVjdDo6ZmllbGRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKIHsgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBSdW50aW1lT2JqZWN0KiB0aGlz
T2JqID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4odGhp
c1ZhbHVlKTsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09iai0+bV9pbnN0
YW5jZTsKIAogICAgIGlmICghaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAKICAgICBpbnN0YW5j
ZS0+YmVnaW4oKTsKIApAQCAtMTAyLDE5ICsxMDIsMTkgQEAgRW5jb2RlZEpTVmFsdWUgUnVudGlt
ZU9iamVjdDo6ZmllbGRHZXR0ZQogICAgIAogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAg
ICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjptZXRob2RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCitKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgUnVudGltZU9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxSdW50aW1l
T2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJ1bnRpbWVPYmplY3Qq
IHRoaXNPYmogPSBqc0Nhc3Q8UnVudGltZU9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAgUmVmUHRy
PEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWlu
c3RhbmNlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vz
c0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NF
cnJvcihleGVjLCBzY29wZSk7CiAgICAgCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKQEAgLTEy
Miw3ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjptZXRob2RHZXR0CiAK
ICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG1ldGhvZCk7CisgICAgcmV0dXJuIG1ldGhvZDsKIH0KIAogYm9vbCBSdW50aW1lT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlICpleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0yMjIs
MTQgKzIyMiwxNCBAQCBKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNT
RVJUKGV4ZWMtPmpzQ2FsbGVlKCktPmluaGVyaXRzKFJ1bnRpbWVPYmplY3Q6OmluZm8oKSkpOwog
ICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdCo+
KGV4ZWMtPmpzQ2FsbGVlKCkpLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwogICAgIGluc3RhbmNl
LT5iZWdpbigpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRN
ZXRob2QoZXhlYyk7CiAgICAgaW5zdGFuY2UtPmVuZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsVHlwZSBSdW50aW1l
T2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKQEAg
LTI0Niw3ICsyNDYsNyBAQCBDYWxsVHlwZSBSdW50aW1lT2JqZWN0OjpnZXRDYWxsRGF0YShKU0Nl
CiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsUnVudGltZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+anNDYWxsZWUo
KTsKICAgICBBU1NFUlQoY29uc3RydWN0b3ItPmluaGVyaXRzKFJ1bnRpbWVPYmplY3Q6OmluZm8o
KSkpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGwKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgCiAgICAgQVNTRVJUKHJlc3VsdCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQuaXNPYmplY3QoKSA/IGpzQ2FzdDxK
U09iamVjdCo+KHJlc3VsdC5hc0NlbGwoKSkgOiBjb25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIHJl
c3VsdC5pc09iamVjdCgpID8ganNDYXN0PEpTT2JqZWN0Kj4ocmVzdWx0LmFzQ2VsbCgpKSA6IGNv
bnN0cnVjdG9yOwogfQogCiBDb25zdHJ1Y3RUeXBlIFJ1bnRpbWVPYmplY3Q6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDIxMDI0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgt
MjAwOSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDkgKzc4LDkgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSk7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZpZWxkR2V0dGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBtZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSk7CisgICAgc3RhdGljIEpTVmFsdWUgZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBmaWVsZEdldHRlcihF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU1ZhbHVlIG1l
dGhvZEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgUmVm
UHRyPEluc3RhbmNlPiBtX2luc3RhbmNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDIxMDI0NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAy
MDEzLCAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iakNGYWxsYmFja09iamVjdChFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFsbGJh
Y2tPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNTcsNyAr
MjU3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIE9i
amNJbnN0YW5jZSogb2JqY0luc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxPYmpD
SW5zdGFuY2UoKTsKIAogICAgIGlmICghb2JqY0luc3RhbmNlKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFJ1bnRpbWVPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMs
IHNjb3BlKSk7CisgICAgICAgIHJldHVybiBSdW50aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nl
c3NFcnJvcihleGVjLCBzY29wZSk7CiAgICAgCiAgICAgb2JqY0luc3RhbmNlLT5iZWdpbigpOwog
CkBAIC0yNzMsNyArMjczLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbAogICAgICAgICAgICAgCiAgICAgb2JqY0luc3RhbmNlLT5lbmQoKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxs
VHlwZSBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCwgQ2Fs
bERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjQ3KQorKysgU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTctMDEtMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVj
ZSB0aGUgdXNlIG9mIEVuY29kZWRKU1ZhbHVlLCBhbmQgdXNlIEpTVmFsdWUgaW5zdGVhZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjY1OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwOgorICAgICAgICAoV2ViS2l0OjpjYWxs
TWV0aG9kKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNhbGxOUEpTT2JqZWN0KToKKyAgICAgICAgKFdlYktp
dDo6Y29uc3RydWN0V2l0aENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVj
dDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjptZXRob2RH
ZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
Lmg6CisKIDIwMTctMDEtMDMgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFub3RoZXIgYXR0ZW1wdCB0byBmaXggdGhlIEFwcGxlIFNpZXJyYSBSZWxlYXNlIDMy
LWJpdCBCdWlsZCBmb2xsb3dpbmcgPGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8y
MTAwNzU+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE1ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwCShyZXZpc2lvbiAyMTAyNDcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEpTTlBNZXRob2Q6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgCiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKEpT
TlBPYmplY3Q6OmluZm8oKSkpIHsKICAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IGpz
Q2FzdDxKU05QT2JqZWN0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05QT2JqZWN0LT5jYWxsTWV0aG9kKGV4ZWMsIGpzTlBNZXRob2Qt
Pm5wSWRlbnRpZmllcigpKSk7CisgICAgICAgIHJldHVybiBqc05QT2JqZWN0LT5jYWxsTWV0aG9k
KGV4ZWMsIGpzTlBNZXRob2QtPm5wSWRlbnRpZmllcigpKTsKICAgICB9CiAKICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM2LDEyICsy
MzYsMTIgQEAgSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IoRXhlYwogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bE5QSlNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsTlBKU09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGV4ZWMtPmpzQ2FsbGVlKCk7CiAgICAgQVNTRVJUKG9iamVjdC0+aW5oZXJpdHMoSlNOUE9i
amVjdDo6aW5mbygpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQ2FzdDxKU05Q
T2JqZWN0Kj4ob2JqZWN0KS0+Y2FsbE9iamVjdChleGVjKSk7CisgICAgcmV0dXJuIGpzQ2FzdDxK
U05QT2JqZWN0Kj4ob2JqZWN0KS0+Y2FsbE9iamVjdChleGVjKTsKIH0KIAogSlNDOjpDYWxsVHlw
ZSBKU05QT2JqZWN0OjpnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpDYWxsRGF0
YSYgY2FsbERhdGEpCkBAIC0yNTUsMTIgKzI1NSwxMiBAQCBKU0M6OkNhbGxUeXBlIEpTTlBPYmpl
Y3Q6OmdldENhbGxEYXRhKEpTCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RX
aXRoQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciA9IGV4ZWMtPmpzQ2FsbGVlKCk7CiAgICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5pbmhlcml0
cyhKU05QT2JqZWN0OjppbmZvKCkpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanND
YXN0PEpTTlBPYmplY3QqPihjb25zdHJ1Y3RvciktPmNhbGxDb25zdHJ1Y3RvcihleGVjKSk7Cisg
ICAgcmV0dXJuIGpzQ2FzdDxKU05QT2JqZWN0Kj4oY29uc3RydWN0b3IpLT5jYWxsQ29uc3RydWN0
b3IoZXhlYyk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNOUE9iamVjdDo6Z2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkBAIC00NTgsMTkg
KzQ1OCwxOSBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAg
bnBuTWVtRnJlZShpZGVudGlmaWVycyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTTlBPYmplY3Q6
OnByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0
eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNOUE9iamVjdCogdGhpc09iaiA9
IGpzQ2FzdDxKU05QT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIEpT
TlBPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCBpbmZvKCkpOwogICAgIAogICAgIGlm
ICghdGhpc09iai0+bV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1cm4gdGhy
b3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgaWYgKCF0aGlzT2JqLT5t
X25wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIE5QVmFyaWFudCByZXN1bHQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKQEAg
LTQ4Niw3ICs0ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRl
CiAgICAgICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRl
bnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlz
IHN5bWJvbC4KICAgICAgICAgaWYgKCFucElkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzT2JqLT5tX25wT2JqZWN0LT5f
Y2xhc3MtPmdldFByb3BlcnR5KHRoaXNPYmotPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwgJnJl
c3VsdCk7CiAgICAgICAgIApAQCAtNDk0LDMwICs0OTQsMzAgQEAgRW5jb2RlZEpTVmFsdWUgSlNO
UE9iamVjdDo6cHJvcGVydHlHZXR0ZQogICAgIH0KIAogICAgIGlmICghcmV0dXJuVmFsdWUpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eVZhbHVlID0gdGhpc09i
ai0+bV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZXhlYywgdGhpc09iai0+
Z2xvYmFsT2JqZWN0KCksIHJlc3VsdCk7CiAgICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1
bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvcGVydHlWYWx1ZSk7CisgICAgcmV0
dXJuIHByb3BlcnR5VmFsdWU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTTlBPYmplY3Q6Om1ldGhv
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKK0pTVmFsdWUgSlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpT
TlBPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgSlNOUE9iamVjdCog
dGhpc09iaiA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4odGhpc1ZhbHVlKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmosIGluZm8oKSk7CiAgICAgCiAgICAgaWYgKCF0aGlzT2Jq
LT5tX25wT2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxp
ZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRB
Y2Nlc3NFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVy
ID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKICAgICAvLyBJZiB0
aGUgcHJvcGVydHlOYW1lIGlzIHN5bWJvbC4KICAgICBpZiAoIW5wSWRlbnRpZmllcikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBz
Y29wZSkpOworICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2Nv
cGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU05QTWV0aG9kOjpjcmVhdGUoZXhl
YywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5w
SWRlbnRpZmllcikpOworICAgIHJldHVybiBKU05QTWV0aG9kOjpjcmVhdGUoZXhlYywgdGhpc09i
ai0+Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5wSWRlbnRpZmll
cik7CiB9CiAKIEpTT2JqZWN0KiBKU05QT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShy
ZXZpc2lvbiAyMTAyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw4ICs5NCw4IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9u
TW9kZSk7CiAKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eUdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBtZXRob2RHZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBwcm9wZXJ0eUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbWV0aG9kR2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAKICAgICBOUFJ1bnRpbWVPYmplY3RNYXAqIG1f
b2JqZWN0TWFwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>298213</attachid>
            <date>2017-01-06 10:34:50 -0800</date>
            <delta_ts>2017-01-06 10:34:50 -0800</delta_ts>
            <desc>Backtrace from the crash on JSC on a x86 chroot with a WebKitGTK+ build</desc>
            <filename>jsc_crash_x86_backtrace.txt</filename>
            <type>text/plain</type>
            <size>5152</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">W05ldyBMV1AgMzI1NF0KW05ldyBMV1AgMzI1OF0KW1RocmVhZCBkZWJ1Z2dpbmcgdXNpbmcgbGli
dGhyZWFkX2RiIGVuYWJsZWRdClVzaW5nIGhvc3QgbGlidGhyZWFkX2RiIGxpYnJhcnkgIi9saWIv
aTM4Ni1saW51eC1nbnUvbGlidGhyZWFkX2RiLnNvLjEiLgpDb3JlIHdhcyBnZW5lcmF0ZWQgYnkg
YC4vV2ViS2l0QnVpbGQvUmVsZWFzZS9iaW4vanNjJy4KUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGgg
c2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KIzAgIDB4ZjczMDNhZTIgaW4gSlND
OjplcnJvclByb3RvRnVuY1RvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKikgKCkgZnJvbSAvaG9tZS9j
bG9wZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxkL1JlbGVhc2UvbGliL2xpYmphdmFzY3Jp
cHRjb3JlZ3RrLTQuMC5zby4xOApbQ3VycmVudCB0aHJlYWQgaXMgMSAoVGhyZWFkIDB4ZjQ3M2M3
MDAgKExXUCAzMjU0KSldCgpUaHJlYWQgMiAoVGhyZWFkIDB4ZjQ3MzliNDAgKExXUCAzMjU4KSk6
CiMwICAweGY0ZDNiY2RjIGluIG5hbm9zbGVlcCAoKSBhdCAuLi9zeXNkZXBzL3VuaXgvc3lzY2Fs
bC10ZW1wbGF0ZS5TOjgxCk5vIGxvY2Fscy4KIzEgIDB4Zjc1YWFkZDIgaW4gYm1hbGxvYzo6SGVh
cDo6c2NhdmVuZ2Uoc3RkOjp1bmlxdWVfbG9jazxibWFsbG9jOjpTdGF0aWNNdXRleD4mLCBzdGQ6
OmNocm9ubzo6ZHVyYXRpb248bG9uZyBsb25nLCBzdGQ6OnJhdGlvPDFsbCwgMTAwMGxsPiA+KSAo
KSBmcm9tIC9ob21lL2Nsb3Blei93ZWJraXQvd2Via2l0MzIvV2ViS2l0QnVpbGQvUmVsZWFzZS9s
aWIvbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4Ck5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2
YWlsYWJsZS4KIzIgIDB4Zjc1YWFmMzIgaW4gYm1hbGxvYzo6SGVhcDo6Y29uY3VycmVudFNjYXZl
bmdlKCkgKCkgZnJvbSAvaG9tZS9jbG9wZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxkL1Jl
bGVhc2UvbGliL2xpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOApObyBzeW1ib2wgdGFibGUg
aW5mbyBhdmFpbGFibGUuCiMzICAweGY3NWFjM2IxIGluIGJtYWxsb2M6OkFzeW5jVGFzazxibWFs
bG9jOjpIZWFwLCB2b2lkIChibWFsbG9jOjpIZWFwOjoqKSgpPjo6dGhyZWFkUnVuTG9vcCgpICgp
IGZyb20gL2hvbWUvY2xvcGV6L3dlYmtpdC93ZWJraXQzMi9XZWJLaXRCdWlsZC9SZWxlYXNlL2xp
Yi9saWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTgKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZh
aWxhYmxlLgojNCAgMHhmNzVhYzU3MSBpbiBibWFsbG9jOjpBc3luY1Rhc2s8Ym1hbGxvYzo6SGVh
cCwgdm9pZCAoYm1hbGxvYzo6SGVhcDo6KikoKT46OnRocmVhZEVudHJ5UG9pbnQoYm1hbGxvYzo6
QXN5bmNUYXNrPGJtYWxsb2M6OkhlYXAsIHZvaWQgKGJtYWxsb2M6OkhlYXA6OiopKCk+KikgKCkg
ZnJvbSAvaG9tZS9jbG9wZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxkL1JlbGVhc2UvbGli
L2xpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOApObyBzeW1ib2wgdGFibGUgaW5mbyBhdmFp
bGFibGUuCiM1ICAweGY3NWFiY2M0IGluIHN0ZDo6dGhyZWFkOjpfSW1wbDxzdGQ6Ol9CaW5kX3Np
bXBsZTx2b2lkICgqKGJtYWxsb2M6OkFzeW5jVGFzazxibWFsbG9jOjpIZWFwLCB2b2lkIChibWFs
bG9jOjpIZWFwOjoqKSgpPiopKShibWFsbG9jOjpBc3luY1Rhc2s8Ym1hbGxvYzo6SGVhcCwgdm9p
ZCAoYm1hbGxvYzo6SGVhcDo6KikoKT4qKT4gPjo6X01fcnVuKCkgKCkgZnJvbSAvaG9tZS9jbG9w
ZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxkL1JlbGVhc2UvbGliL2xpYmphdmFzY3JpcHRj
b3JlZ3RrLTQuMC5zby4xOApObyBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuCiM2ICAweGY0
OWQyMDdlIGluID8/ICgpIGZyb20gL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlic3RkYysrLnNv
LjYKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLgojNyAgMHhmNGQzNGQ5NyBpbiBzdGFy
dF90aHJlYWQgKGFyZz0weGY0NzM5YjQwKSBhdCBwdGhyZWFkX2NyZWF0ZS5jOjMwOQogICAgICAg
IF9fcmVzID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcGQgPSAweGY0NzM5YjQwCiAgICAgICAg
dW53aW5kX2J1ZiA9IHtjYW5jZWxfam1wX2J1ZiA9IHt7am1wX2J1ZiA9IHstMTg3NDA4Mzg0LCAt
MTkzNzUwMjA4LCA0MDAxNTM2LCAtMTkzNzUyMDI0LCAtMjA3OTEyMDQzMiwgLTk3ODM4MzkxOX0s
IG1hc2tfd2FzX3NhdmVkID0gMH19LCBwcml2ID0ge3BhZCA9IHsweDAsIDB4MCwgMHgwLCAweDB9
LCBkYXRhID0ge3ByZXYgPSAweDAsIGNsZWFudXAgPSAweDAsIGNhbmNlbHR5cGUgPSAwfX19CiAg
ICAgICAgbm90X2ZpcnN0X2NhbGwgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBwYWdlc2l6ZV9t
MSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHNwID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAg
ZnJlZXNpemUgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBfX1BSRVRUWV9GVU5DVElPTl9fID0g
InN0YXJ0X3RocmVhZCIKIzggIDB4ZjQ4MzZkZmUgaW4gY2xvbmUgKCkgYXQgLi4vc3lzZGVwcy91
bml4L3N5c3YvbGludXgvaTM4Ni9jbG9uZS5TOjEyOQpObyBsb2NhbHMuCgpUaHJlYWQgMSAoVGhy
ZWFkIDB4ZjQ3M2M3MDAgKExXUCAzMjU0KSk6CiMwICAweGY3MzAzYWUyIGluIEpTQzo6ZXJyb3JQ
cm90b0Z1bmNUb1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSopICgpIGZyb20gL2hvbWUvY2xvcGV6L3dl
YmtpdC93ZWJraXQzMi9XZWJLaXRCdWlsZC9SZWxlYXNlL2xpYi9saWJqYXZhc2NyaXB0Y29yZWd0
ay00LjAuc28uMTgKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLgojMSAgMHhmNzE3ZGM2
ZSBpbiB2bUVudHJ5VG9OYXRpdmUgKCkgZnJvbSAvaG9tZS9jbG9wZXovd2Via2l0L3dlYmtpdDMy
L1dlYktpdEJ1aWxkL1JlbGVhc2UvbGliL2xpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOApO
byBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuCiMyICAweGY3MGJhNzY5IGluIEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6Q2FsbFR5cGUsIEpTQzo6Q2FsbERhdGEgY29uc3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6QXJn
TGlzdCBjb25zdCYpICgpIGZyb20gL2hvbWUvY2xvcGV6L3dlYmtpdC93ZWJraXQzMi9XZWJLaXRC
dWlsZC9SZWxlYXNlL2xpYi9saWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTgKTm8gc3ltYm9s
IHRhYmxlIGluZm8gYXZhaWxhYmxlLgojMyAgMHhmNzJhYjY1OSBpbiBKU0M6OmNhbGwoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6Q2FsbFR5cGUsIEpTQzo6Q2FsbERhdGEgY29u
c3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6QXJnTGlzdCBjb25zdCYpICgpIGZyb20gL2hvbWUvY2xv
cGV6L3dlYmtpdC93ZWJraXQzMi9XZWJLaXRCdWlsZC9SZWxlYXNlL2xpYi9saWJqYXZhc2NyaXB0
Y29yZWd0ay00LjAuc28uMTgKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLgojNCAgMHhm
NzNhZjU0NSBpbiBKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCAoKSBmcm9tIC9ob21lL2Ns
b3Blei93ZWJraXQvd2Via2l0MzIvV2ViS2l0QnVpbGQvUmVsZWFzZS9saWIvbGliamF2YXNjcmlw
dGNvcmVndGstNC4wLnNvLjE4Ck5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4KIzUgIDB4
ZjczYWY5OTQgaW4gSlNDOjpKU09iamVjdDo6ZGVmYXVsdFZhbHVlKEpTQzo6SlNPYmplY3QgY29u
c3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgKCkgZnJv
bSAvaG9tZS9jbG9wZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxkL1JlbGVhc2UvbGliL2xp
YmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOApObyBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFi
bGUuCiM2ICAweGY3M2FlNzNiIGluIEpTQzo6SlNPYmplY3Q6OnRvUHJpbWl0aXZlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCAoKSBmcm9tIC9ob21l
L2Nsb3Blei93ZWJraXQvd2Via2l0MzIvV2ViS2l0QnVpbGQvUmVsZWFzZS9saWIvbGliamF2YXNj
cmlwdGNvcmVndGstNC4wLnNvLjE4Ck5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4KIzcg
IDB4ZjczNTYyY2EgaW4gSlNDOjpKU0NlbGw6OnRvUHJpbWl0aXZlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCAoKSBmcm9tIC9ob21lL2Nsb3Blei93
ZWJraXQvd2Via2l0MzIvV2ViS2l0QnVpbGQvUmVsZWFzZS9saWIvbGliamF2YXNjcmlwdGNvcmVn
dGstNC4wLnNvLjE4Ck5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4KIzggIDB4ZjczNTU2
ZDUgaW4gSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEpTQzo6RXhlY1N0YXRlKiwgYm9v
bCkgY29uc3QgKCkgZnJvbSAvaG9tZS9jbG9wZXovd2Via2l0L3dlYmtpdDMyL1dlYktpdEJ1aWxk
L1JlbGVhc2UvbGliL2xpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOApObyBzeW1ib2wgdGFi
bGUgaW5mbyBhdmFpbGFibGUuCiM5ICAweGY3MzU1Y2M2IGluIEpTQzo6SlNWYWx1ZTo6dG9XVEZT
dHJpbmdTbG93Q2FzZShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0ICgpIGZyb20gL2hvbWUvY2xvcGV6
L3dlYmtpdC93ZWJraXQzMi9XZWJLaXRCdWlsZC9SZWxlYXNlL2xpYi9saWJqYXZhc2NyaXB0Y29y
ZWd0ay00LjAuc28uMTgKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLgojMTAgMHgwODA2
OGM2MSBpbiBKU0M6OkpTVmFsdWU6OnRvV1RGU3RyaW5nKEpTQzo6RXhlY1N0YXRlKikgY29uc3Qg
KCkKTm8gc3ltYm9sIHRhYmxlIGluZm8gYXZhaWxhYmxlLgojMTEgMHgwODA2NmUyNSBpbiBydW5K
U0MoSlNDOjpWTSosIENvbW1hbmRMaW5lKSAoKQpObyBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFi
bGUuCiMxMiAweDA4MDY3MjY3IGluIGpzY21haW4oaW50LCBjaGFyKiopICgpCk5vIHN5bWJvbCB0
YWJsZSBpbmZvIGF2YWlsYWJsZS4KIzEzIDB4MDgwNTBkZjggaW4gbWFpbiAoKQpObyBzeW1ib2wg
dGFibGUgaW5mbyBhdmFpbGFibGUuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>