<?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>214446</bug_id>
          
          <creation_ts>2020-07-17 00:08:38 -0700</creation_ts>
          <short_desc>[JSC] Clean up resolveLocale</short_desc>
          <delta_ts>2020-07-21 10:18:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1672414</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 00:08:38 -0700</bug_when>
    <thetext>[JSC] Clean up resolveLocale</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672415</commentid>
    <comment_count>1</comment_count>
      <attachid>404541</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 00:09:35 -0700</bug_when>
    <thetext>Created attachment 404541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672419</commentid>
    <comment_count>2</comment_count>
      <attachid>404544</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 00:19:12 -0700</bug_when>
    <thetext>Created attachment 404544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672432</commentid>
    <comment_count>3</comment_count>
      <attachid>404552</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 02:18:02 -0700</bug_when>
    <thetext>Created attachment 404552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672484</commentid>
    <comment_count>4</comment_count>
      <attachid>404552</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-17 08:03:26 -0700</bug_when>
    <thetext>Comment on attachment 404552
Patch

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

&gt; Source/JavaScriptCore/runtime/IntlCollator.cpp:84
&gt; +Vector&lt;String&gt; IntlCollator::sortLocaleData(const String&amp; locale, RelevantExtensionKey relevantExtensionKey)

I suggest considering a shorter argument name for this argument in this context, where things aren’t ambiguous. Maybe &quot;key&quot; or &quot;extension&quot; or &quot;extensionKey&quot;.

&gt; Source/JavaScriptCore/runtime/IntlCollator.cpp:190
&gt; +        localeOptions[static_cast&lt;unsigned&gt;(RelevantExtensionKey::Kn)] = String(numeric == TriState::True ? &quot;true&quot;_s : &quot;false&quot;_s);

I’d like us to make a constexpr function in the header to convert to an integer type so that the understanding that it is safe to cast is in exactly one place, rather than having to think about that question in each place where we do a static_cast.

Why is the explicit conversion to String needed?

&gt; Source/JavaScriptCore/runtime/IntlCollator.h:28
&gt; +#include &quot;IntlObject.h&quot;

Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.h:28
&gt; +#include &quot;IntlObject.h&quot;

Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

&gt; Source/JavaScriptCore/runtime/IntlNumberFormat.h:29
&gt; +#include &quot;IntlObject.h&quot;

Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:632
&gt; +inline ASCIILiteral relevantExtensionKeyString(RelevantExtensionKey key)

Seems like this could be constexpr, not just inline.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:691
&gt; +            if ((optionsValue-&gt;isNull() || keyLocaleData.contains(optionsValue.value())) &amp;&amp; optionsValue.value() != value) {

I often prefer the * syntax to the value() syntax. Is that an option here?

&gt; Source/JavaScriptCore/runtime/IntlObject.h:56
&gt; +static constexpr unsigned numberOfRelevantExtensionKeys = 0 JSC_INTL_RELEVANT_EXTENSION_KEYS(JSC_COUNT_INTL_RELEVANT_EXTENSION_KEYS);

Seems like this should be a uint8_t to be consistent with the type used for the enumeration itself. Since this is going to be roughly the same size.

&gt; Source/JavaScriptCore/runtime/IntlObject.h:101
&gt; +    String locale;
&gt; +    String dataLocale;

Can either of these be ASCIILiteral instead of String?

&gt; Source/JavaScriptCore/runtime/IntlObject.h:105
&gt; +ResolvedLocale resolveLocale(JSGlobalObject*, const HashSet&lt;String&gt;&amp; availableLocales, const Vector&lt;String&gt;&amp; requestedLocales, LocaleMatcher, const ResolveLocaleOptions&amp;, std::initializer_list&lt;RelevantExtensionKey&gt; relevantExtensionKeys, Vector&lt;String&gt; (*localeData)(const String&amp;, RelevantExtensionKey));

Can any of this be ASCIILiteral instead of String?

&gt; Source/JavaScriptCore/runtime/IntlPluralRules.h:28
&gt; +#include &quot;IntlObject.h&quot;

Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672577</commentid>
    <comment_count>5</comment_count>
      <attachid>404552</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 12:08:10 -0700</bug_when>
    <thetext>Comment on attachment 404552
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/IntlCollator.cpp:84
&gt;&gt; +Vector&lt;String&gt; IntlCollator::sortLocaleData(const String&amp; locale, RelevantExtensionKey relevantExtensionKey)
&gt; 
&gt; I suggest considering a shorter argument name for this argument in this context, where things aren’t ambiguous. Maybe &quot;key&quot; or &quot;extension&quot; or &quot;extensionKey&quot;.

Changed!

&gt;&gt; Source/JavaScriptCore/runtime/IntlCollator.cpp:190
&gt;&gt; +        localeOptions[static_cast&lt;unsigned&gt;(RelevantExtensionKey::Kn)] = String(numeric == TriState::True ? &quot;true&quot;_s : &quot;false&quot;_s);
&gt; 
&gt; I’d like us to make a constexpr function in the header to convert to an integer type so that the understanding that it is safe to cast is in exactly one place, rather than having to think about that question in each place where we do a static_cast.
&gt; 
&gt; Why is the explicit conversion to String needed?

Because this is `Optional&lt;String&gt;`, not `String`, so implicit conversion cannot happen. And the reason why Optional&lt;String&gt; is required is described in ChangeLog.

&gt;&gt; Source/JavaScriptCore/runtime/IntlCollator.h:28
&gt;&gt; +#include &quot;IntlObject.h&quot;
&gt; 
&gt; Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.h:28
&gt;&gt; +#include &quot;IntlObject.h&quot;
&gt; 
&gt; Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlNumberFormat.h:29
&gt;&gt; +#include &quot;IntlObject.h&quot;
&gt; 
&gt; Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:632
&gt;&gt; +inline ASCIILiteral relevantExtensionKeyString(RelevantExtensionKey key)
&gt; 
&gt; Seems like this could be constexpr, not just inline.

Right. Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:691
&gt;&gt; +            if ((optionsValue-&gt;isNull() || keyLocaleData.contains(optionsValue.value())) &amp;&amp; optionsValue.value() != value) {
&gt; 
&gt; I often prefer the * syntax to the value() syntax. Is that an option here?

It is Optional&lt;&gt;. I personally like `value()` since it is easy to grep, but yeah, but not so strong preference. Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.h:56
&gt;&gt; +static constexpr unsigned numberOfRelevantExtensionKeys = 0 JSC_INTL_RELEVANT_EXTENSION_KEYS(JSC_COUNT_INTL_RELEVANT_EXTENSION_KEYS);
&gt; 
&gt; Seems like this should be a uint8_t to be consistent with the type used for the enumeration itself. Since this is going to be roughly the same size.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.h:101
&gt;&gt; +    String dataLocale;
&gt; 
&gt; Can either of these be ASCIILiteral instead of String?

They are modified and dynamically allocated Strings so we cannot use ASCIILiteral here.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.h:105
&gt;&gt; +ResolvedLocale resolveLocale(JSGlobalObject*, const HashSet&lt;String&gt;&amp; availableLocales, const Vector&lt;String&gt;&amp; requestedLocales, LocaleMatcher, const ResolveLocaleOptions&amp;, std::initializer_list&lt;RelevantExtensionKey&gt; relevantExtensionKeys, Vector&lt;String&gt; (*localeData)(const String&amp;, RelevantExtensionKey));
&gt; 
&gt; Can any of this be ASCIILiteral instead of String?

Strings here is modified and dynamically allocated Strings, so we cannot use ASCIILiteral.

&gt;&gt; Source/JavaScriptCore/runtime/IntlPluralRules.h:28
&gt;&gt; +#include &quot;IntlObject.h&quot;
&gt; 
&gt; Can we use a forward declaration of RelevantExtensionKey instead of adding an include? I think those work for enum class.

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672646</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-17 15:05:41 -0700</bug_when>
    <thetext>Committed r264537: &lt;https://trac.webkit.org/changeset/264537&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672647</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-17 15:06:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/65746090&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673454</commentid>
    <comment_count>8</comment_count>
      <attachid>404552</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-07-21 09:08:01 -0700</bug_when>
    <thetext>Comment on attachment 404552
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:632
&gt;&gt;&gt; +inline ASCIILiteral relevantExtensionKeyString(RelevantExtensionKey key)
&gt;&gt; 
&gt;&gt; Seems like this could be constexpr, not just inline.
&gt; 
&gt; Right. Changed.

The usage of constexpr here is breaking debug builds on linux using `gcc (Debian 8.3.0-6) 8.3.0`. I&apos;m also getting similar error trying to build 32-bits ARMv7 and MIPS:

```
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp.o 
/usr/bin/ccache /usr/bin/c++  -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -fdiagnostics-color=always -Wextra -Wall -Wno-expansion-to-defined -Wno-noexcept-type -Wno-psabi -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -gsplit-dwarf -g -fPIC   -ffp-contract=off -std=c++17 -MD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp
In file included from DerivedSources/ForwardingHeaders/wtf/StdLibExtras.h:32,
                 from DerivedSources/ForwardingHeaders/wtf/FastMalloc.h:26,
                 from ../../Source/JavaScriptCore/config.h:38,
                 from ../../Source/JavaScriptCore/runtime/IntlLocaleConstructor.cpp:26,
                 from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f2e18ffc-15.cpp:1:
../../Source/JavaScriptCore/runtime/IntlObject.cpp: In function ‘constexpr WTF::ASCIILiteral JSC::relevantExtensionKeyString(JSC::RelevantExtensionKey)’:
DerivedSources/ForwardingHeaders/wtf/Assertions.h:354:34: error: call to non-‘constexpr’ function ‘void WTFReportAssertionFailure(const char*, int, const char*, const char*)’
         WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \
         ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Source/JavaScriptCore/runtime/IntlObject.cpp:657:5: note: in expansion of macro ‘ASSERT_UNDER_CONSTEXPR_CONTEXT’
     ASSERT_UNDER_CONSTEXPR_CONTEXT(0);
```

I couldn&apos;t find the reason why it is not possible to use `ASSERT_UNDER_CONSTEXPR_CONTEXT(0);` there, but I would guess that might be some divergence in `WTFReportAssertionFailure` for linux that is causing this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673455</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-21 09:09:02 -0700</bug_when>
    <thetext>So it sounds like ASSERT_UNDER_CONSTEXPR_CONTEXT does not yet work on these compilers. Or is this somehow specific to this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673470</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-21 09:30:35 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; So it sounds like ASSERT_UNDER_CONSTEXPR_CONTEXT does not yet work on these
&gt; compilers. Or is this somehow specific to this file?

My guess is that these compilers are not handling switch statement&apos;s reachability correctly, and failed to analyze that this is unreachable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673488</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-21 10:18:54 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; (In reply to Darin Adler from comment #9)
&gt; &gt; So it sounds like ASSERT_UNDER_CONSTEXPR_CONTEXT does not yet work on these
&gt; &gt; compilers. Or is this somehow specific to this file?
&gt; 
&gt; My guess is that these compilers are not handling switch statement&apos;s
&gt; reachability correctly, and failed to analyze that this is unreachable.

For now, I&apos;ll just remove ASSERT_UNDER_CONSTEXPR_CONTEXT(0).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404541</attachid>
            <date>2020-07-17 00:09:35 -0700</date>
            <delta_ts>2020-07-17 00:19:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214446-20200717000934.patch</filename>
            <type>text/plain</type>
            <size>37347</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTc2OTFhMjE2ZTgzNTNkYjFkZjVhNjYzNTM3NDdkYzcwYmJkNTZkLi4zZmRhN2FiNzlhYzE4YTYy
ZmZlMTFlZmRhYzQ3ZGRmNThkYjA3ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAyMC0wNy0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENsZWFuIHVwIHJlc29sdmVMb2NhbGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDQ0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBSZWxldmFudEV4dGVu
c2lvbktleSBhbmQgb3B0aW1pemUgcmVzb2x2ZUxvY2FsZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBh
dm9pZHMgdXNpbmcgSGFzaE1hcCBmb3IgaW5wdXQgYW5kIG91dHB1dC4KKworICAgICAgICAqIHJ1
bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpzb3J0
TG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6c2VhcmNoTG9jYWxlRGF0
YSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojpsb2Nh
bGVEYXRhKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Lmg6Cisg
ICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50
bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3Jt
YXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJl
ckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OnJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZUxv
Y2FsZSk6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6Omxv
Y2FsZURhdGEpOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVy
YWxSdWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKToKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICog
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Lmg6CisKIDIwMjAtMDctMTYgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDbGVhbiB1cCBJbnRs
IG9wdGlvbiBwYXJzaW5nIGNvZGUgYnkgaW50cm9kdWNpbmcgaW50bE9wdGlvbjw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAppbmRleCA1YTAyYjdi
NjcxZjdkMTY1NDQ4NmQ2ZjI2NjcxMmQ1ZGQ5OTc2ZDcyLi44MjBjZWUyNmViM2UzYjg5OTMwY2M3
ZjU1YzU3YTgzNTE4NDI1Nzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAKQEAgLTM5LDEwICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogY29u
c3QgQ2xhc3NJbmZvIEludGxDb2xsYXRvcjo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbnRsQ29sbGF0b3Ip
IH07CiAKIG5hbWVzcGFjZSBJbnRsQ29sbGF0b3JJbnRlcm5hbCB7Ci1jb25zdGV4cHIgY29uc3Qg
Y2hhciogcmVsZXZhbnRFeHRlbnNpb25LZXlzWzNdID0geyAiY28iLCAia2YiLCAia24iIH07Ci1j
b25zdGV4cHIgc2l6ZV90IGNvbGxhdGlvbkluZGV4ID0gMDsKLWNvbnN0ZXhwciBzaXplX3QgY2Fz
ZUZpcnN0SW5kZXggPSAxOwotY29uc3RleHByIHNpemVfdCBudW1lcmljSW5kZXggPSAyOwogY29u
c3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCkBAIC04NSwxMiArODEsMTIgQEAgdm9p
ZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7
CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRleCkKK1ZlY3RvcjxTdHJpbmc+IEludGxDb2xs
YXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5z
aW9uS2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90
cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00
MDIgMi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtleUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChr
ZXlJbmRleCkgewotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4
OiB7CisgICAgc3dpdGNoIChyZWxldmFudEV4dGVuc2lvbktleSkgeworICAgIGNhc2UgUmVsZXZh
bnRFeHRlbnNpb25LZXk6OkNvOiB7CiAgICAgICAgIC8vIDEwLjIuMyAiVGhlIGZpcnN0IGVsZW1l
bnQgb2YgW1tzb3J0TG9jYWxlRGF0YV1dW2xvY2FsZV0uY28gYW5kIFtbc2VhcmNoTG9jYWxlRGF0
YV1dW2xvY2FsZV0uY28gbXVzdCBiZSBudWxsIGZvciBhbGwgbG9jYWxlIHZhbHVlcy4iCiAgICAg
ICAgIGtleUxvY2FsZURhdGEuYXBwZW5kKHsgfSk7CiAKQEAgLTExOSwxMyArMTE1LDEzIEBAIFZl
Y3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBs
b2NhbGUsIHNpemVfdCBrZXlJbmRlCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6OmNhc2VGaXJzdEluZGV4OgorICAgIGNhc2Ug
UmVsZXZhbnRFeHRlbnNpb25LZXk6OktmOgogICAgICAgICBrZXlMb2NhbGVEYXRhLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMyk7CiAgICAgICAgIGtleUxvY2FsZURhdGEudW5jaGVja2VkQXBwZW5k
KCJmYWxzZSJfcyk7CiAgICAgICAgIGtleUxvY2FsZURhdGEudW5jaGVja2VkQXBwZW5kKCJsb3dl
ciJfcyk7CiAgICAgICAgIGtleUxvY2FsZURhdGEudW5jaGVja2VkQXBwZW5kKCJ1cHBlciJfcyk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6Om51bWVyaWNJ
bmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLbjoKICAgICAgICAga2V5TG9j
YWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwogICAgICAgICBrZXlMb2NhbGVEYXRh
LnVuY2hlY2tlZEFwcGVuZCgiZmFsc2UiX3MpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hl
Y2tlZEFwcGVuZCgidHJ1ZSJfcyk7CkBAIC0xMzYsMjMgKzEzMiwyMyBAQCBWZWN0b3I8U3RyaW5n
PiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXpl
X3Qga2V5SW5kZQogICAgIHJldHVybiBrZXlMb2NhbGVEYXRhOwogfQogCi1WZWN0b3I8U3RyaW5n
PiBJbnRsQ29sbGF0b3I6OnNlYXJjaExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGtl
eUluZGV4KQorVmVjdG9yPFN0cmluZz4gSW50bENvbGxhdG9yOjpzZWFyY2hMb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQog
ewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEw
LjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtl
eUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChrZXlJbmRleCkgewotICAgIGNhc2UgSW50bENvbGxh
dG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4OgorICAgIHN3aXRjaCAocmVsZXZhbnRFeHRlbnNp
b25LZXkpIHsKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDbzoKICAgICAgICAgLy8g
MTAuMi4zICJUaGUgZmlyc3QgZWxlbWVudCBvZiBbW3NvcnRMb2NhbGVEYXRhXV1bbG9jYWxlXS5j
byBhbmQgW1tzZWFyY2hMb2NhbGVEYXRhXV1bbG9jYWxlXS5jbyBtdXN0IGJlIG51bGwgZm9yIGFs
bCBsb2NhbGUgdmFsdWVzLiIKICAgICAgICAga2V5TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDEpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLmFwcGVuZCh7IH0pOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEludGxDb2xsYXRvckludGVybmFsOjpjYXNlRmlyc3RJbmRleDoKKyAg
ICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLZjoKICAgICAgICAga2V5TG9jYWxlRGF0YS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tl
ZEFwcGVuZCgiZmFsc2UiX3MpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVu
ZCgibG93ZXIiX3MpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgidXBw
ZXIiX3MpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGxDb2xsYXRvckludGVybmFsOjpu
dW1lcmljSW5kZXg6CisgICAgY2FzZSBSZWxldmFudEV4dGVuc2lvbktleTo6S246CiAgICAgICAg
IGtleUxvY2FsZURhdGEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKICAgICAgICAga2V5TG9j
YWxlRGF0YS51bmNoZWNrZWRBcHBlbmQoImZhbHNlIl9zKTsKICAgICAgICAga2V5TG9jYWxlRGF0
YS51bmNoZWNrZWRBcHBlbmQoInRydWUiX3MpOwpAQCAtMTgzLDcgKzE3OSw3IEBAIHZvaWQgSW50
bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBsb2NhCiAKICAgICBhdXRvIGxvY2FsZURhdGEgPSAobV91c2FnZSA9PSBVc2Fn
ZTo6U29ydCkgPyBzb3J0TG9jYWxlRGF0YSA6IHNlYXJjaExvY2FsZURhdGE7CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CisgICAgUmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxl
T3B0aW9uczsKIAogICAgIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248
TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
b2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsg
ImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIg
bXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNo
ZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBA
IC0xOTEsMjcgKzE4NywyNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIFRyaVN0YXRl
IG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPm51bWVyaWMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgaWYgKG51bWVyaWMgIT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAg
ICAgIG9wdC5hZGQoImtuIl9zLCBudW1lcmljID09IFRyaVN0YXRlOjpUcnVlID8gInRydWUiX3Mg
OiAiZmFsc2UiX3MpOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihSZWxldmFudEV4dGVuc2lvbktleTo6S24pXSA9IFN0cmluZyhudW1lcmljID09IFRyaVN0YXRl
OjpUcnVlID8gInRydWUiX3MgOiAiZmFsc2UiX3MpOwogCiAgICAgU3RyaW5nIGNhc2VGaXJzdE9w
dGlvbiA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZp
cnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBu
dWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlm
ICghY2FzZUZpcnN0T3B0aW9uLmlzTnVsbCgpKQotICAgICAgICBvcHQuYWRkKCJrZiJfcywgY2Fz
ZUZpcnN0T3B0aW9uKTsKKyAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmKV0gPSBjYXNlRmlyc3RPcHRpb247CiAKICAgICBh
dXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwot
ICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxv
Y2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIG9wdCwgSW50bENvbGxhdG9y
SW50ZXJuYWw6OnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgV1RGX0FSUkFZX0xFTkdUSChJbnRsQ29s
bGF0b3JJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAg
YXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmLCBSZWxldmFu
dEV4dGVuc2lvbktleTo6S24gfSwgbG9jYWxlRGF0YSk7CiAKLSAgICBtX2xvY2FsZSA9IHJlc3Vs
dC5nZXQoImxvY2FsZSJfcyk7CisgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAg
aWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgQ29sbGF0b3IgZHVlIHRvIGludmFs
aWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFN0cmlu
ZyYgY29sbGF0aW9uID0gcmVzdWx0LmdldCgiY28iX3MpOworICAgIGNvbnN0IFN0cmluZyYgY29s
bGF0aW9uID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZh
bnRFeHRlbnNpb25LZXk6OkNvKV07CiAgICAgbV9jb2xsYXRpb24gPSBjb2xsYXRpb24uaXNOdWxs
KCkgPyAiZGVmYXVsdCJfcyA6IGNvbGxhdGlvbjsKLSAgICBtX251bWVyaWMgPSByZXN1bHQuZ2V0
KCJrbiJfcykgPT0gInRydWUiOworICAgIG1fbnVtZXJpYyA9IHJlc29sdmVkLmV4dGVuc2lvbnNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLbildID09ICJ0cnVl
IjsKIAotICAgIGNvbnN0IFN0cmluZyYgY2FzZUZpcnN0U3RyaW5nID0gcmVzdWx0LmdldCgia2Yi
X3MpOworICAgIGNvbnN0IFN0cmluZyYgY2FzZUZpcnN0U3RyaW5nID0gcmVzb2x2ZWQuZXh0ZW5z
aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmKV07CiAg
ICAgaWYgKGNhc2VGaXJzdFN0cmluZyA9PSAibG93ZXIiKQogICAgICAgICBtX2Nhc2VGaXJzdCA9
IENhc2VGaXJzdDo6TG93ZXI7CiAgICAgZWxzZSBpZiAoY2FzZUZpcnN0U3RyaW5nID09ICJ1cHBl
ciIpCkBAIC0yMzYsNyArMjMyLDcgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xs
YXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2EKICAgICAgICAg
Ly8gc2VhcmNoTG9jYWxlRGF0YSBmaWx0ZXJzIG91dCAiY28iIHVuaWNvZGUgZXh0ZW5zaW9uLiBI
b3dldmVyLCB3ZSBuZWVkIHRvIHBhc3MgImNvIiB0byBJQ1Ugd2hlbiBVc2FnZTo6U2VhcmNoIGlz
IHNwZWNpZmllZC4KICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBwYXNzICJjbyIgdW5pY29kZSBl
eHRlbnNpb24gdGhyb3VnaCBsb2NhbGUuIFNpbmNlIHRoZSBvdGhlciByZWxldmFudCBleHRlbnNp
b25zIGFyZSBoYW5kbGVkIHZpYSB1Y29sX3NldEF0dHJpYnV0ZSwKICAgICAgICAgLy8gd2UgY2Fu
IGp1c3QgdXNlIGRhdGFMb2NhbGUKLSAgICAgICAgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0g
bWFrZVN0cmluZyhyZXN1bHQuZ2V0KCJkYXRhTG9jYWxlIl9zKSwgIi11LWNvLXNlYXJjaCIpLnV0
ZjgoKTsKKyAgICAgICAgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNv
bHZlZC5kYXRhTG9jYWxlLCAiLXUtY28tc2VhcmNoIikudXRmOCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgZGF0YUxvZ0xuSWYoSW50bENvbGxhdG9ySW50ZXJuYWw6OnZlcmJvc2UsICJk
YXRhTG9jYWxlV2l0aEV4dGVuc2lvbnM6KCIsIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9ucywgIiki
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKaW5kZXgg
NjljYjMyM2UyMTRkMGNiNWJkNmI3M2QxMzAzZTlmMjc0M2YyMmY2My4uZTc0MjFhZGU2NDRmZWZi
OThhYjA4OWQyYjNhZWQ3NWUwOTk5ODM0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkludGxPYmplY3QuaCIKIAogc3RydWN0
IFVDb2xsYXRvcjsKIApAQCAtNjcsOCArNjcsOCBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzb3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcm
LCBzaXplX3QpOwotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYsIHNpemVfdCk7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNvcnRMb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKKyAgICBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKICAgICBlbnVtIGNsYXNzIFVzYWdlIDogdWludDhfdCB7IFNvcnQsIFNl
YXJjaCB9OwogICAgIGVudW0gY2xhc3MgU2Vuc2l0aXZpdHkgOiB1aW50OF90IHsgQmFzZSwgQWNj
ZW50LCBDYXNlLCBWYXJpYW50IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAppbmRleCAxZTY5YzhlN2M1MWFhOGU4NDdkMDIz
MmNkODc0ZjAzMmExY2QwNDhjLi4xZmI4NThlYTM3MjU4YjE5OTA0OWU4NjU4M2I2OWMwOGE1NzM2
NzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdC5jcHAKQEAgLTQ0LDEwICs0NCw2IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbWlu
RUNNQVNjcmlwdFRpbWUgPSAtOC42NEUxNTsKIGNvbnN0IENsYXNzSW5mbyBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW50bERhdGVUaW1lRm9ybWF0KSB9OwogCiBuYW1lc3Bh
Y2UgSW50bERhdGVUaW1lRm9ybWF0SW50ZXJuYWwgewotY29uc3RleHByIGNvbnN0IGNoYXIqIHJl
bGV2YW50RXh0ZW5zaW9uS2V5c1szXSA9IHsgImNhIiwgImhjIiwgIm51IiB9OwotY29uc3RleHBy
IHNpemVfdCBjYWxlbmRhckluZGV4ID0gMDsKLWNvbnN0ZXhwciBzaXplX3QgaG91ckN5Y2xlSW5k
ZXggPSAxOwotY29uc3RleHByIHNpemVfdCBudW1iZXJpbmdTeXN0ZW1JbmRleCA9IDI7CiB9CiAK
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpVRGF0ZUZvcm1hdERlbGV0ZXI6Om9wZXJhdG9yKCko
VURhdGVGb3JtYXQqIGRhdGVGb3JtYXQpIGNvbnN0CkBAIC0xNjMsMTEgKzE1OSwxMSBAQCBzdGF0
aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZVRpbWVab25lTmFtZShjb25zdCBTdHJpbmcmIHRpbWVab25l
TmFtZSkKICAgICByZXR1cm4gY2Fub25pY2FsOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJ
bmRleCkKK1ZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkgcmVsZXZhbnRFeHRlbnNpb25L
ZXkpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5TG9jYWxlRGF0YTsKLSAgICBzd2l0Y2ggKGtl
eUluZGV4KSB7Ci0gICAgY2FzZSBJbnRsRGF0ZVRpbWVGb3JtYXRJbnRlcm5hbDo6Y2FsZW5kYXJJ
bmRleDogeworICAgIHN3aXRjaCAocmVsZXZhbnRFeHRlbnNpb25LZXkpIHsKKyAgICBjYXNlIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpDYTogewogICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKICAgICAgICAgVUVudW1lcmF0aW9uKiBjYWxlbmRhcnMgPSB1Y2FsX2dldEtl
eXdvcmRWYWx1ZXNGb3JMb2NhbGUoImNhbGVuZGFyIiwgbG9jYWxlLnV0ZjgoKS5kYXRhKCksIGZh
bHNlLCAmc3RhdHVzKTsKICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKQEAgLTE4
OCw3ICsxODQsNyBAQCBWZWN0b3I8U3RyaW5nPiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbgogICAgICAgICB1ZW51bV9jbG9z
ZShjYWxlbmRhcnMpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJbnRsRGF0ZVRp
bWVGb3JtYXRJbnRlcm5hbDo6aG91ckN5Y2xlSW5kZXg6CisgICAgY2FzZSBSZWxldmFudEV4dGVu
c2lvbktleTo6SGM6CiAgICAgICAgIC8vIE51bGwgZGVmYXVsdCBzbyB3ZSBrbm93IHRvIHVzZSAn
aicgaW4gcGF0dGVybi4KICAgICAgICAga2V5TG9jYWxlRGF0YS5hcHBlbmQoU3RyaW5nKCkpOwog
ICAgICAgICBrZXlMb2NhbGVEYXRhLmFwcGVuZCgiaDExIl9zKTsKQEAgLTE5Niw3ICsxOTIsNyBA
QCBWZWN0b3I8U3RyaW5nPiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3Ry
aW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbgogICAgICAgICBrZXlMb2NhbGVEYXRhLmFwcGVuZCgi
aDIzIl9zKTsKICAgICAgICAga2V5TG9jYWxlRGF0YS5hcHBlbmQoImgyNCJfcyk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW50bERhdGVUaW1lRm9ybWF0SW50ZXJuYWw6Om51bWJlcmluZ1N5
c3RlbUluZGV4OgorICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51OgogICAgICAgICBr
ZXlMb2NhbGVEYXRhID0gbnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZShsb2NhbGUpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNDE5LDcgKzQxNSw3IEBAIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwKICAgICBKU09iamVjdCogb3B0aW9ucyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0
ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0aW9ucyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdDsKKyAg
ICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwogCiAgICAgTG9jYWxlTWF0Y2hl
ciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVyPihnbG9iYWxPYmplY3Qs
IG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgeyAibG9va3VwIl9z
LCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6
OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9y
IFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKQEAgLTQzMSw3ICs0MjcsNyBAQCB2b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsCiAgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgImNhbGVuZGFyIGlzIG5vdCBhIHdlbGwtZm9ybWVkIGNhbGVuZGFyIHZhbHVlIl9zKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBvcHQuYWRkKCJjYSJfcywg
Y2FsZW5kYXIpOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihS
ZWxldmFudEV4dGVuc2lvbktleTo6Q2EpXSA9IGNhbGVuZGFyOwogICAgIH0KIAogICAgIFN0cmlu
ZyBudW1iZXJpbmdTeXN0ZW0gPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9u
cywgdm0ucHJvcGVydHlOYW1lcy0+bnVtYmVyaW5nU3lzdGVtLCB7IH0sIG51bGxwdHIsIG51bGxw
dHIpOwpAQCAtNDQxLDcgKzQzNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFs
aXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAg
ICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibnVtYmVyaW5nU3lzdGVt
IGlzIG5vdCBhIHdlbGwtZm9ybWVkIG51bWJlcmluZyBzeXN0ZW0gdmFsdWUiX3MpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG9wdC5hZGQoIm51Il9zLCBudW1iZXJp
bmdTeXN0ZW0pOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihS
ZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKICAg
ICBUcmlTdGF0ZSBob3VyMTIgPSBpbnRsQm9vbGVhbk9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIxMik7CkBAIC00NTQsMjAgKzQ1MCwyMCBAQCB2b2lk
IEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIC8vIFNldCBob3VyMTIgaGVyZSB0byBzaW1wbGlm
eSBob3VyIGxvZ2ljIGxhdGVyLgogICAgICAgICBob3VyMTIgPSB0cmlTdGF0ZShob3VyQ3ljbGUg
PT0gImgxMSIgfHwgaG91ckN5Y2xlID09ICJoMTIiKTsKICAgICAgICAgaWYgKCFob3VyQ3ljbGUu
aXNOdWxsKCkpCi0gICAgICAgICAgICBvcHQuYWRkKCJoYyJfcywgaG91ckN5Y2xlKTsKKyAgICAg
ICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpIYyldID0gaG91ckN5Y2xlOwogICAgIH0gZWxzZQotICAgICAgICBvcHQuYWRkKCJo
YyJfcywgU3RyaW5nKCkpOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2ln
bmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6SGMpXSA9IFN0cmluZygpOwogCiAgICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcygpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVkID0g
cmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExv
Y2FsZXMsIGxvY2FsZU1hdGNoZXIsIG9wdCwgSW50bERhdGVUaW1lRm9ybWF0SW50ZXJuYWw6OnJl
bGV2YW50RXh0ZW5zaW9uS2V5cywgV1RGX0FSUkFZX0xFTkdUSChJbnRsRGF0ZVRpbWVGb3JtYXRJ
bnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byBy
ZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCBy
ZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpDYSwgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkhjLCBSZWxldmFudEV4dGVu
c2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAKLSAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmdl
dCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOworICAgIG1fbG9jYWxlID0gcmVz
b2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERh
dGVUaW1lRm9ybWF0IGR1ZSB0byBpbnZhbGlkIGxvY2FsZSJfcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2NhbGVuZGFyID0gcmVzb2x2ZWQuZ2V0KCJjYSJfcyk7CisgICAgbV9j
YWxlbmRhciA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpDYSldOwogICAgIGlmIChtX2NhbGVuZGFyID09ICJncmVnb3JpYW4i
KQogICAgICAgICBtX2NhbGVuZGFyID0gImdyZWdvcnkiX3M7CiAgICAgZWxzZSBpZiAobV9jYWxl
bmRhciA9PSAiaXNsYW1pY2MiKQpAQCAtNDc1LDkgKzQ3MSw5IEBAIHZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICBlbHNlIGlmIChtX2NhbGVuZGFyID09ICJldGhpb2FhIikKICAgICAgICAgbV9j
YWxlbmRhciA9ICJldGhpb3BpYy1hbWV0ZS1hbGVtIl9zOwogCi0gICAgbV9ob3VyQ3ljbGUgPSBy
ZXNvbHZlZC5nZXQoImhjIl9zKTsKLSAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmdl
dCgibnUiX3MpOwotICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0
cmluZyhyZXNvbHZlZC5nZXQoImRhdGFMb2NhbGUiX3MpLCAiLXUtY2EtIiwgbV9jYWxlbmRhciwg
Ii1udS0iLCBtX251bWJlcmluZ1N5c3RlbSkudXRmOCgpOworICAgIG1faG91ckN5Y2xlID0gcmVz
b2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25L
ZXk6OkhjKV07CisgICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXNvbHZlZC5leHRlbnNpb25zW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXTsKKyAgICBDU3Ry
aW5nIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9ucyA9IG1ha2VTdHJpbmcocmVzb2x2ZWQuZGF0YUxv
Y2FsZSwgIi11LWNhLSIsIG1fY2FsZW5kYXIsICItbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0
ZjgoKTsKIAogICAgIEpTVmFsdWUgdHpWYWx1ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3Qs
IHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuaAppbmRleCA5ZDI2NzFjODljMjRhMDYyNzYzYmVjY2NjYzg0ODJkZjJj
NzU3N2VkLi5hOTc4MGFlZjEyZTQxNTI0MDUwZTNiMGVmMDhmMThiMzJlYWJhMGY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaApA
QCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgSW50bERhdGVUaW1lRm9ybWF0
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKLSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJp
bmcmLCBzaXplX3QpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIAogICAgIGVudW0gY2xhc3MgV2Vla2Rh
eSA6IHVpbnQ4X3QgeyBOb25lLCBOYXJyb3csIFNob3J0LCBMb25nIH07CiAgICAgZW51bSBjbGFz
cyBFcmEgOiB1aW50OF90IHsgTm9uZSwgTmFycm93LCBTaG9ydCwgTG9uZyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCBi
NjQ2ZDUyZDViMzUxMjQ1YTk0MjliMGZiOTU3YjlkOGY1MzNkMGVlLi5mOGM2M2U3ODY4ZTkzNTFm
NTY5Mzc3ZDM1ZjI0NWQwNDI3OWNmZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtNDEsNyArNDEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBJbnRsTnVtYmVyRm9ybWF0OjpzX2luZm8gPSB7ICJP
YmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEludGxOdW1iZXJGb3JtYXQpIH07CiAKIG5hbWVzcGFjZSBJbnRsTnVtYmVyRm9ybWF0SW50
ZXJuYWwgewotY29uc3RleHByIGNvbnN0IGNoYXIqIHJlbGV2YW50RXh0ZW5zaW9uS2V5c1sxXSA9
IHsgIm51IiB9OwogY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCkBAIC04OSwx
MCArODgsMTAgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6
OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRleCkKK1ZlY3Rv
cjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2Nh
bGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5cykKIHsKICAgICAv
LyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2VydmljZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50
ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKLSAgICBBU1NFUlRfVU5VU0VEKGtleUluZGV4LCAh
a2V5SW5kZXgpOyAvLyBUaGUgaW5kZXggb2YgdGhlIGV4dGVuc2lvbiBrZXkgIm51IiBpbiByZWxl
dmFudEV4dGVuc2lvbktleXMgaXMgMC4KKyAgICBBU1NFUlRfVU5VU0VEKHJlbGV2YW50RXh0ZW5z
aW9uS2V5cywgcmVsZXZhbnRFeHRlbnNpb25LZXlzID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpO
dSk7CiAgICAgcmV0dXJuIG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUobG9jYWxlKTsKIH0KIApA
QCAtMTcxLDcgKzE3MCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJl
ckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gb3B0OworICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7
CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1h
dGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0
Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZp
dCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUg
ZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0
Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpAQCAtMTgzLDE5
ICsxODIsMTkgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibnVtYmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdl
bGwtZm9ybWVkIG51bWJlcmluZyBzeXN0ZW0gdmFsdWUiX3MpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIG9wdC5hZGQoIm51Il9zLCBudW1iZXJpbmdTeXN0ZW0pOwor
ICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVu
c2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKICAgICBhdXRvJiBhdmFp
bGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKLSAgICBh
dXRvIHJlc3VsdCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBvcHQsIEludGxOdW1iZXJGb3JtYXRJ
bnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlzLCBXVEZfQVJSQVlfTEVOR1RIKEludGxOdW1i
ZXJGb3JtYXRJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlzKSwgbG9jYWxlRGF0YSk7Cisg
ICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVM
b2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAotICAgIG1fbG9jYWxl
ID0gcmVzdWx0LmdldCgibG9jYWxlIl9zKTsKKyAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2Fs
ZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBOdW1iZXJGb3JtYXQg
ZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fbnVtYmVyaW5nU3lzdGVtID0gcmVzdWx0LmdldCgibnUiX3MpOworICAgIG1fbnVtYmVyaW5n
U3lzdGVtID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZh
bnRFeHRlbnNpb25LZXk6Ok51KV07CiAKICAgICBtX3N0eWxlID0gaW50bE9wdGlvbjxTdHlsZT4o
Z2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdHlsZSwgeyB7ICJkZWNp
bWFsIl9zLCBTdHlsZTo6RGVjaW1hbCB9LCB7ICJwZXJjZW50Il9zLCBTdHlsZTo6UGVyY2VudCB9
LCB7ICJjdXJyZW5jeSJfcywgU3R5bGU6OkN1cnJlbmN5IH0gfSwgInN0eWxlIG11c3QgYmUgZWl0
aGVyIFwiZGVjaW1hbFwiLCBcInBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIl9zLCBTdHlsZTo6
RGVjaW1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKQEAgLTI5
Miw3ICsyOTEsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3Jt
YXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBDU3RyaW5nIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9u
cyA9IG1ha2VTdHJpbmcocmVzdWx0LmdldCgiZGF0YUxvY2FsZSJfcyksICItdS1udS0iLCBtX251
bWJlcmluZ1N5c3RlbSkudXRmOCgpOworICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNp
b25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRhTG9jYWxlLCAiLXUtbnUtIiwgbV9udW1iZXJp
bmdTeXN0ZW0pLnV0ZjgoKTsKICAgICBkYXRhTG9nTG5JZihJbnRsTnVtYmVyRm9ybWF0SW50ZXJu
YWw6OnZlcmJvc2UsICJkYXRhTG9jYWxlV2l0aEV4dGVuc2lvbnM6KCIsIGRhdGFMb2NhbGVXaXRo
RXh0ZW5zaW9ucyAsICIpIik7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
aAppbmRleCA0MzA0YjIyYThjNmE1MTFmNzRlMmJkY2IwNTM4OGQ1YjY1YjczNDc2Li4wZGNhYmIw
Yzg0MTQxYjE0NzM5MTA0YmQ4ZmU4MzlmZDk4MTZjMmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCkBAIC0yNiw3ICsyNiw3IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NzEsNyArNzEsNyBAQCBjbGFzcyBJbnRsTnVtYmVyRm9ybWF0IGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBzaXplX3QpOworICAgIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5KTsKIAogICAgIGVudW0gY2xhc3MgU3R5bGUgOiB1aW50OF90IHsgRGVjaW1hbCwg
UGVyY2VudCwgQ3VycmVuY3kgfTsKICAgICBlbnVtIGNsYXNzIEN1cnJlbmN5RGlzcGxheSA6IHVp
bnQ4X3QgeyBDb2RlLCBTeW1ib2wsIE5hbWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggMGU2ODc5N2FmZDc3YzhmYTYyZjY0MjMzMDQxN2M3
ZGU5MzgxYThjZS4uMmI1NjUzMDJjMWU2MWI1ZGJkY2RjMDM2NTA1YWIwZWI5ZTdlNjJlOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTYyOSw3
ICs2MjksMjAgQEAgc3RhdGljIHZvaWQgdW5pY29kZUV4dGVuc2lvblN1YlRhZ3MoY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24sIFZlY3RvcjxTdHJpbmc+JiBzdWIKICAgICBzdWJ0YWdzLmFwcGVuZChl
eHRlbnNpb24uc3Vic3RyaW5nKHZhbHVlU3RhcnQsIGV4dGVuc2lvbkxlbmd0aCAtIHZhbHVlU3Rh
cnQpKTsKIH0KIAotSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZUxvY2FsZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRj
aGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBvcHRpb25z
LCBjb25zdCBjaGFyKiBjb25zdCByZWxldmFudEV4dGVuc2lvbktleXNbXSwgc2l6ZV90IHJlbGV2
YW50RXh0ZW5zaW9uS2V5Q291bnQsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3Qg
U3RyaW5nJiwgc2l6ZV90KSkKK2lubGluZSBBU0NJSUxpdGVyYWwgcmVsZXZhbnRFeHRlbnNpb25L
ZXlTdHJpbmcoUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQoreworICAgIHN3aXRjaCAoa2V5KSB7
CisjZGVmaW5lIEpTQ19SRVRVUk5fSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUyhsb3dlck5h
bWUsIGNhcGl0YWxpemVkTmFtZSkgXAorICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OmNh
cGl0YWxpemVkTmFtZTogXAorICAgICAgICByZXR1cm4gI2xvd2VyTmFtZSAiIl9zOworICAgIEpT
Q19JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlTKEpTQ19SRVRVUk5fSU5UTF9SRUxFVkFOVF9F
WFRFTlNJT05fS0VZUykKKyN1bmRlZiBKU0NfUkVUVVJOX0lOVExfUkVMRVZBTlRfRVhURU5TSU9O
X0tFWVMKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbDo6bnVsbCgpOworfQorCitSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9jYWxlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxl
TG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1h
dGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmIG9wdGlvbnMs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRl
bnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KSkKIHsKICAgICAvLyBSZXNvbHZlTG9jYWxlIChhdmFpbGFibGVM
b2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zLCByZWxldmFudEV4dGVuc2lvbktleXMs
IGxvY2FsZURhdGEpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMt
cmVzb2x2ZWxvY2FsZQpAQCAtNjQ0LDQ1ICs2NTcsNDMgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
U2UKICAgICBpZiAoIW1hdGNoZXJSZXN1bHQuZXh0ZW5zaW9uLmlzTnVsbCgpKQogICAgICAgICB1
bmljb2RlRXh0ZW5zaW9uU3ViVGFncyhtYXRjaGVyUmVzdWx0LmV4dGVuc2lvbiwgZXh0ZW5zaW9u
U3VidGFncyk7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVz
dWx0LmFkZCgiZGF0YUxvY2FsZSJfcywgZm91bmRMb2NhbGUpOworICAgIFJlc29sdmVkTG9jYWxl
IHJlc29sdmVkOworICAgIHJlc29sdmVkLmRhdGFMb2NhbGUgPSBmb3VuZExvY2FsZTsKIAogICAg
IFN0cmluZyBzdXBwb3J0ZWRFeHRlbnNpb24gPSAiLXUiX3M7Ci0gICAgZm9yIChzaXplX3Qga2V5
SW5kZXggPSAwOyBrZXlJbmRleCA8IHJlbGV2YW50RXh0ZW5zaW9uS2V5Q291bnQ7ICsra2V5SW5k
ZXgpIHsKLSAgICAgICAgY29uc3QgY2hhcioga2V5ID0gcmVsZXZhbnRFeHRlbnNpb25LZXlzW2tl
eUluZGV4XTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4ga2V5TG9jYWxlRGF0YSA9IGxvY2FsZURh
dGEoZm91bmRMb2NhbGUsIGtleUluZGV4KTsKKyAgICBmb3IgKFJlbGV2YW50RXh0ZW5zaW9uS2V5
IGtleSA6IHJlbGV2YW50RXh0ZW5zaW9uS2V5cykgeworICAgICAgICBBU0NJSUxpdGVyYWwga2V5
U3RyaW5nID0gcmVsZXZhbnRFeHRlbnNpb25LZXlTdHJpbmcoa2V5KTsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4ga2V5TG9jYWxlRGF0YSA9IGxvY2FsZURhdGEoZm91bmRMb2NhbGUsIGtleSk7CiAg
ICAgICAgIEFTU0VSVCgha2V5TG9jYWxlRGF0YS5pc0VtcHR5KCkpOwogCiAgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IGtleUxvY2FsZURhdGFbMF07CiAgICAgICAgIFN0cmluZyBzdXBwb3J0ZWRFeHRl
bnNpb25BZGRpdGlvbjsKIAogICAgICAgICBpZiAoIWV4dGVuc2lvblN1YnRhZ3MuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBzaXplX3Qga2V5UG9zID0gZXh0ZW5zaW9uU3VidGFncy5maW5kKGtl
eSk7CisgICAgICAgICAgICBzaXplX3Qga2V5UG9zID0gZXh0ZW5zaW9uU3VidGFncy5maW5kKGtl
eVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoa2V5UG9zICE9IG5vdEZvdW5kKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGtleVBvcyArIDEgPCBleHRlbnNpb25TdWJ0YWdzLnNpemUoKSAmJiBleHRl
bnNpb25TdWJ0YWdzW2tleVBvcyArIDFdLmxlbmd0aCgpID4gMikgewogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZFZhbHVlID0gZXh0ZW5zaW9uU3VidGFnc1trZXlQ
b3MgKyAxXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGtleUxvY2FsZURhdGEuY29udGFpbnMo
cmVxdWVzdGVkVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcXVl
c3RlZFZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRk
aXRpb24gPSBtYWtlU3RyaW5nKCctJywga2V5LCAnLScsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gbWFrZVN0cmluZygnLScsIGtl
eVN0cmluZywgJy0nLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGtleUxvY2FsZURhdGEuY29udGFpbnMoInRydWUiX3MpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gInRydWUiX3M7Ci0gICAgICAgICAgICAgICAgICAgIHN1
cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gbWFrZVN0cmluZygnLScsIGtleSk7CisgICAgICAg
ICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gbWFrZVN0cmluZygnLScs
IGtleVN0cmluZyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJh
dG9yID0gb3B0aW9ucy5maW5kKGtleSk7Ci0gICAgICAgIGlmIChpdGVyYXRvciAhPSBvcHRpb25z
LmVuZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG9wdGlvbnNWYWx1ZSA9IGl0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKGF1dG8gb3B0aW9uc1ZhbHVlID0gb3B0aW9uc1tzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0pIHsKICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBzaG91
bGQgbm90IGdldCBhZGRlZCB0byB0aGUgb3B0aW9ucywgaXQgd29uJ3QgZGlzcGxhY2UgdGhlIGV4
dGVuc2lvbi4KICAgICAgICAgICAgIC8vIE51bGwgd2lsbCByZW1vdmUgdGhlIGV4dGVuc2lvbi4K
LSAgICAgICAgICAgIGlmICgob3B0aW9uc1ZhbHVlLmlzTnVsbCgpIHx8IGtleUxvY2FsZURhdGEu
Y29udGFpbnMob3B0aW9uc1ZhbHVlKSkgJiYgb3B0aW9uc1ZhbHVlICE9IHZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWU7CisgICAgICAgICAgICBpZiAoKG9wdGlv
bnNWYWx1ZS0+aXNOdWxsKCkgfHwga2V5TG9jYWxlRGF0YS5jb250YWlucyhvcHRpb25zVmFsdWUu
dmFsdWUoKSkpICYmIG9wdGlvbnNWYWx1ZS52YWx1ZSgpICE9IHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWUudmFsdWUoKTsKICAgICAgICAgICAgICAgICBzdXBw
b3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9IFN0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHJlc3VsdC5hZGQoa2V5LCB2YWx1ZSk7CisgICAgICAgIHJlc29sdmVkLmV4
dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldID0gdmFsdWU7CiAgICAgICAgIHN1
cHBvcnRlZEV4dGVuc2lvbi5hcHBlbmQoc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24pOwogICAg
IH0KIApAQCAtNjkyLDggKzcwMyw4IEBAIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVM
b2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNlCiAgICAgICAg
IGZvdW5kTG9jYWxlID0gcHJlRXh0ZW5zaW9uICsgc3VwcG9ydGVkRXh0ZW5zaW9uICsgcG9zdEV4
dGVuc2lvbjsKICAgICB9CiAKLSAgICByZXN1bHQuYWRkKCJsb2NhbGUiX3MsIGZvdW5kTG9jYWxl
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc29sdmVkLmxvY2FsZSA9IFdURk1vdmUoZm91
bmRMb2NhbGUpOworICAgIHJldHVybiByZXNvbHZlZDsKIH0KIAogc3RhdGljIEpTQXJyYXkqIGxv
b2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuaAppbmRleCA4ZTg2ZjYzMjQzNTIxNjgyODEzNmI3NDY5OTljMTIyYzk3OGQyNjUyLi4zYzI0
NzNiNmJmMzZhNDU3MGNmNTFjMjlkZmY2YmU3YWZhYjRmYTg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC0zOSw2ICszOSwyMyBAQCBlbnVtIGNsYXNz
IExvY2FsZU1hdGNoZXIgOiB1aW50OF90IHsKICAgICBCZXN0Rml0LAogfTsKIAorI2RlZmluZSBK
U0NfSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUyhtYWNybykgXAorICAgIG1hY3JvKGNhLCBD
YSkgLyogY2FsZW5kYXIgKi8gXAorICAgIG1hY3JvKGNvLCBDbykgLyogY29sbGF0aW9uICovIFwK
KyAgICBtYWNybyhoYywgSGMpIC8qIGhvdXItY3ljbGUgKi8gXAorICAgIG1hY3JvKGtmLCBLZikg
LyogY2FzZS1maXJzdCAqLyBcCisgICAgbWFjcm8oa24sIEtuKSAvKiBudW1lcmljICovIFwKKyAg
ICBtYWNybyhudSwgTnUpIC8qIG51bWJlcmluZy1zeXN0ZW0gKi8gXAorCitlbnVtIGNsYXNzIFJl
bGV2YW50RXh0ZW5zaW9uS2V5IDogdWludDhfdCB7CisjZGVmaW5lIEpTQ19ERUNMQVJFX0lOVExf
UkVMRVZBTlRfRVhURU5TSU9OX0tFWVMobG93ZXJOYW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0
YWxpemVkTmFtZSwKK0pTQ19JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlTKEpTQ19ERUNMQVJF
X0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMpCisjdW5kZWYgSlNDX0RFQ0xBUkVfSU5UTF9S
RUxFVkFOVF9FWFRFTlNJT05fS0VZUworfTsKKyNkZWZpbmUgSlNDX0NPVU5UX0lOVExfUkVMRVZB
TlRfRVhURU5TSU9OX0tFWVMobG93ZXJOYW1lLCBjYXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlJlbGV2YW50RXh0ZW5zaW9uS2V5cyA9IDAgSlND
X0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMoSlNDX0NPVU5UX0lOVExfUkVMRVZBTlRfRVhU
RU5TSU9OX0tFWVMpOworI3VuZGVmIEpTQ19DT1VOVF9JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9L
RVlTCisKIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CkBAIC03Niw3ICs5
MywxNiBAQCB1bnNpZ25lZCBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdW5zaWduZQogVmVjdG9yPGNoYXIsIDMyPiBsb2NhbGVJ
REJ1ZmZlckZvckxhbmd1YWdlVGFnKGNvbnN0IENTdHJpbmcmKTsKIFN0cmluZyBsYW5ndWFnZVRh
Z0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqLCBib29sIGlzSW1tb3J0YWwgPSBmYWxzZSk7CiBWZWN0
b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBsb2NhbGVzKTsKLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVMb2NhbGUoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9ucywgY29uc3QgY2hhciogY29uc3QgcmVsZXZh
bnRFeHRlbnNpb25LZXlzW10sIHNpemVfdCByZWxldmFudEV4dGVuc2lvbktleUNvdW50LCBWZWN0
b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIHNpemVfdCkpOworCit1c2lu
ZyBSZXNvbHZlTG9jYWxlT3B0aW9ucyA9IHN0ZDo6YXJyYXk8T3B0aW9uYWw8U3RyaW5nPiwgbnVt
YmVyT2ZSZWxldmFudEV4dGVuc2lvbktleXM+OwordXNpbmcgUmVsZXZhbnRFeHRlbnNpb25zID0g
c3RkOjphcnJheTxTdHJpbmcsIG51bWJlck9mUmVsZXZhbnRFeHRlbnNpb25LZXlzPjsKK3N0cnVj
dCBSZXNvbHZlZExvY2FsZSB7CisgICAgU3RyaW5nIGxvY2FsZTsKKyAgICBTdHJpbmcgZGF0YUxv
Y2FsZTsKKyAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5zaW9uczsKK307CisKK1Jlc29sdmVk
TG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlz
LCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5KSk7CiBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVu
aWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUpOwogU3RyaW5nIGJlc3RB
dmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAppbmRleCAyZDU3ZTY4ZmY2OWQwZTA5Y2Ni
YzFmNzBhOGU0NTE2Yjg0NmMyZGQ4Li42ODRjYmQ3YmNkMTc5NTI4YWViODJhNTMxOTVhYWEyNzc5
Y2IzYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJ
bnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90KQorVmVjdG9y
PFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2
YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMDgsMTMgKzEwOCwx
MyBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxv
Y2FsZU9wdDsKKyAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVPcHRpb25zOwogICAgIExv
Y2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xv
YmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsg
Imxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2Nh
bGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJs
b29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2Nh
bGVzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0LCBudWxscHRyLCAwLCBsb2NhbGVEYXRhKTsKLSAgICBtX2xv
Y2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOwor
ICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywg
eyB9LCBsb2NhbGVEYXRhKTsKKyAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBp
ZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBQbHVyYWxSdWxlcyBkdWUgdG8gaW52
YWxpZCBsb2NhbGUiX3MpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCmluZGV4IGIwMTVmZTgyYTBlNjkzYTBjYmQw
ODJiMjIwZjI1NWQ4MmFlNzRiNzEuLmE5ZGY5OWI0M2U4OTU3NjY1YzU1NjcyMGEwNTYyMTFjOTQ2
MjFkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSlNP
YmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bnVt
Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS91cGx1cmFscnVsZXMuaD4KIApAQCAtNjIsNyArNjIsNyBA
QCBjbGFzcyBJbnRsUGx1cmFsUnVsZXMgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCk7CisgICAgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwog
CiAgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7IENhcmRpbmFsLCBPcmRpbmFsIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdC5jcHAKaW5kZXggMTFjMzQwMTJjMzlkOWEwNWJjMDA2OGYzNTA0ZGIzOGJkZjQ1MDFl
ZS4uOTdkNWQ3MWVlMjk1MDIxMjg0ZjE0YzEyOTA4ZGM4NGM2OTY2ZWE0NSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBDbGFzc0luZm8g
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0KSB9OwogCiBuYW1lc3BhY2UgSW50bFJlbGF0aXZlVGltZUZvcm1hdEludGVybmFsIHsK
LWNvbnN0ZXhwciBjb25zdCBjaGFyKiByZWxldmFudEV4dGVuc2lvbktleXNbMV0gPSB7ICJudSIg
fTsKIH0KIAogdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0OjpVUmVsYXRpdmVEYXRlVGltZUZv
cm1hdHRlckRlbGV0ZXI6Om9wZXJhdG9yKCkoVVJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIqIHJl
bGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIpIGNvbnN0CkBAIC04MywxMCArODIsOSBAQCB2b2lkIElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXplX3Qga2V5SW5kZXgpCitWZWN0b3I8U3RyaW5n
PiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxl
LCBSZWxldmFudEV4dGVuc2lvbktleSByZWxldmFudEV4dGVuc2lvbktleSkKIHsKLSAgICAvLyBU
aGUgaW5kZXggb2YgdGhlIGV4dGVuc2lvbiBrZXkgIm51IiBpbiByZWxldmFudEV4dGVuc2lvbktl
eXMgaXMgMC4KLSAgICBBU1NFUlRfVU5VU0VEKGtleUluZGV4LCAha2V5SW5kZXgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVsZXZhbnRFeHRlbnNpb25LZXksIHJlbGV2YW50RXh0ZW5zaW9uS2V5ID09
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CiAgICAgcmV0dXJuIG51bWJlcmluZ1N5c3RlbXNG
b3JMb2NhbGUobG9jYWxlKTsKIH0KIApAQCAtMTA3LDcgKzEwNSw3IEBAIHZvaWQgSW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0OworICAgIFJlc29sdmVMb2Nh
bGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVy
ID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVy
OjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAi
bG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJf
cywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKIApAQCAtMTE4LDE5ICsxMTYsMTkgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Ojppbml0aWFsaXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWwKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAibnVt
YmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdlbGwtZm9ybWVkIG51bWJlcmluZyBzeXN0ZW0gdmFsdWUi
X3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG9wdC5hZGQoIm51
Il9zLCBudW1iZXJpbmdTeXN0ZW0pOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsK
ICAgICB9CiAKICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWls
YWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIG9wdCwgSW50bFJl
bGF0aXZlVGltZUZvcm1hdEludGVybmFsOjpyZWxldmFudEV4dGVuc2lvbktleXMsIFdURl9BUlJB
WV9MRU5HVEgoSW50bFJlbGF0aXZlVGltZUZvcm1hdEludGVybmFsOjpyZWxldmFudEV4dGVuc2lv
bktleXMpLCBsb2NhbGVEYXRhKTsKLSAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9w
ZXJ0eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOworICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZl
TG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
bG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUg
fSwgbG9jYWxlRGF0YSk7CisgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYg
KG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgUmVsYXRpdmVUaW1lRm9ybWF0IGR1ZSB0
byBpbnZhbGlkIGxvY2FsZSJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX251
bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmdldCgibnUiX3MpOwotICAgIENTdHJpbmcgZGF0YUxv
Y2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5nZXQoImRhdGFMb2NhbGUi
X3MpLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0ZjgoKTsKKyAgICBtX251bWJlcmlu
Z1N5c3RlbSA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpOdSldOworICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNp
b25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRhTG9jYWxlLCAiLXUtbnUtIiwgbV9udW1iZXJp
bmdTeXN0ZW0pLnV0ZjgoKTsKIAogICAgIG1fc3R5bGUgPSBpbnRsT3B0aW9uPFN0eWxlPihnbG9i
YWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnN0eWxlLCB7IHsgImxvbmciX3Ms
IFN0eWxlOjpMb25nIH0sIHsgInNob3J0Il9zLCBTdHlsZTo6U2hvcnQgfSwgeyAibmFycm93Il9z
LCBTdHlsZTo6TmFycm93IH0gfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwibG9uZ1wiLCBcInNo
b3J0XCIsIG9yIFwibmFycm93XCIiX3MsIFN0eWxlOjpMb25nKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5oCmluZGV4IDg1YjgxZmE4MzhkMzVlZjMz
ZWU5YzBhZTZhNTAyNzBkMTZmODU1ZGEuLjE1MTBhNGZhYjU4OTU4MDFkYzg3ZmE2NzM2NjQ3OGYy
OGNiYTY5YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxS
ZWxhdGl2ZVRpbWVGb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3MgSW50bFJlbGF0
aXZlVGltZUZvcm1hdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9j
YWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKICAgICBTdHJp
bmcgZm9ybWF0SW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUsIFN0cmluZ1ZpZXcgdW5p
dCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404544</attachid>
            <date>2020-07-17 00:19:12 -0700</date>
            <delta_ts>2020-07-17 02:18:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214446-20200717001911.patch</filename>
            <type>text/plain</type>
            <size>37716</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTc2OTFhMjE2ZTgzNTNkYjFkZjVhNjYzNTM3NDdkYzcwYmJkNTZkLi5lZWJhM2E0MjdkOTRiNjE0
NWJlMDU3YzRlZmVkMjBhNzhlMDU1MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMC0wNy0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENsZWFuIHVwIHJlc29sdmVMb2NhbGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDQ0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBSZWxldmFudEV4dGVu
c2lvbktleSBhbmQgb3B0aW1pemUgcmVzb2x2ZUxvY2FsZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBh
dm9pZHMgdXNpbmcgSGFzaE1hcCBmb3IgaW5wdXQgYW5kIG91dHB1dC4KKyAgICAgICAgV2UgaW5z
dGVhZCB1c2Ugc3RkOjphcnJheTxULCBudW1iZXJPZlJlbGV2YW50RXh0ZW5zaW9uS2V5cz4gc2lu
Y2UgIyBvZiBSZWxldmFudEV4dGVuc2lvbktleXMgaXMgb25seSA2LgorCisgICAgICAgIEZvciBp
bnB1dCBvcHRpb24sIHdlIHVzZSBzdGQ6OmFycmF5PE9wdGlvbmFsPFN0cmluZz4sIG51bWJlck9m
UmVsZXZhbnRFeHRlbnNpb25LZXlzPiBzaW5jZSB0aGlzIGRpc3Rpbmd1aXNoIG5vbi1zZXQtb3B0
aW9uIGFuZCBudWxsIFN0cmluZygpLgorICAgICAgICBGb3Igb3V0cHV0IGV4dGVuc2lvbiB2YWx1
ZXMsIHdlIHNpbXBseSB1c2Ugc3RkOjphcnJheTxTdHJpbmcsIG51bWJlck9mUmVsZXZhbnRFeHRl
bnNpb25LZXlzPi4KKworICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6Oklu
dGxDb2xsYXRvcjo6c2VhcmNoTG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRv
cjo6aW5pdGlhbGl6ZUNvbGxhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvci5o
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKToKKyAgICAgICAgKEpTQzo6SW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YSk6Cisg
ICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5n
KToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgICogcnVudGltZS9JbnRs
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEpOgorICAgICAgICAoSlNDOjpJbnRs
UGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6CisgICAgICAgICogcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRh
KToKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0
aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Lmg6CisKIDIwMjAtMDctMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBDbGVhbiB1cCBJbnRsIG9wdGlvbiBwYXJzaW5nIGNvZGUgYnkgaW50cm9k
dWNpbmcgaW50bE9wdGlvbjw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAppbmRleCA1YTAyYjdiNjcxZjdkMTY1NDQ4NmQ2ZjI2NjcxMmQ1ZGQ5OTc2
ZDcyLi44MjBjZWUyNmViM2UzYjg5OTMwY2M3ZjU1YzU3YTgzNTE4NDI1Nzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTM5LDEwICsz
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIEludGxDb2xsYXRvcjo6c19p
bmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShJbnRsQ29sbGF0b3IpIH07CiAKIG5hbWVzcGFjZSBJbnRsQ29sbGF0b3JJ
bnRlcm5hbCB7Ci1jb25zdGV4cHIgY29uc3QgY2hhciogcmVsZXZhbnRFeHRlbnNpb25LZXlzWzNd
ID0geyAiY28iLCAia2YiLCAia24iIH07Ci1jb25zdGV4cHIgc2l6ZV90IGNvbGxhdGlvbkluZGV4
ID0gMDsKLWNvbnN0ZXhwciBzaXplX3QgY2FzZUZpcnN0SW5kZXggPSAxOwotY29uc3RleHByIHNp
emVfdCBudW1lcmljSW5kZXggPSAyOwogY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCkBAIC04NSwxMiArODEsMTIgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEludGxDb2xs
YXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRl
eCkKK1ZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3Ry
aW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQog
ewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEw
LjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtl
eUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChrZXlJbmRleCkgewotICAgIGNhc2UgSW50bENvbGxh
dG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4OiB7CisgICAgc3dpdGNoIChyZWxldmFudEV4dGVu
c2lvbktleSkgeworICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvOiB7CiAgICAgICAg
IC8vIDEwLjIuMyAiVGhlIGZpcnN0IGVsZW1lbnQgb2YgW1tzb3J0TG9jYWxlRGF0YV1dW2xvY2Fs
ZV0uY28gYW5kIFtbc2VhcmNoTG9jYWxlRGF0YV1dW2xvY2FsZV0uY28gbXVzdCBiZSBudWxsIGZv
ciBhbGwgbG9jYWxlIHZhbHVlcy4iCiAgICAgICAgIGtleUxvY2FsZURhdGEuYXBwZW5kKHsgfSk7
CiAKQEAgLTExOSwxMyArMTE1LDEzIEBAIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29y
dExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRlCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6
OmNhc2VGaXJzdEluZGV4OgorICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmOgogICAg
ICAgICBrZXlMb2NhbGVEYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CiAgICAgICAgIGtl
eUxvY2FsZURhdGEudW5jaGVja2VkQXBwZW5kKCJmYWxzZSJfcyk7CiAgICAgICAgIGtleUxvY2Fs
ZURhdGEudW5jaGVja2VkQXBwZW5kKCJsb3dlciJfcyk7CiAgICAgICAgIGtleUxvY2FsZURhdGEu
dW5jaGVja2VkQXBwZW5kKCJ1cHBlciJfcyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50
bENvbGxhdG9ySW50ZXJuYWw6Om51bWVyaWNJbmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpLbjoKICAgICAgICAga2V5TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDIpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgiZmFsc2UiX3MpOwog
ICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgidHJ1ZSJfcyk7CkBAIC0xMzYs
MjMgKzEzMiwyMyBAQCBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXplX3Qga2V5SW5kZQogICAgIHJldHVybiBrZXlMb2Nh
bGVEYXRhOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNlYXJjaExvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGtleUluZGV4KQorVmVjdG9yPFN0cmluZz4gSW50bENv
bGxhdG9yOjpzZWFyY2hMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9u
S2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBv
ZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIg
Mi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtleUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChrZXlJ
bmRleCkgewotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4Ogor
ICAgIHN3aXRjaCAocmVsZXZhbnRFeHRlbnNpb25LZXkpIHsKKyAgICBjYXNlIFJlbGV2YW50RXh0
ZW5zaW9uS2V5OjpDbzoKICAgICAgICAgLy8gMTAuMi4zICJUaGUgZmlyc3QgZWxlbWVudCBvZiBb
W3NvcnRMb2NhbGVEYXRhXV1bbG9jYWxlXS5jbyBhbmQgW1tzZWFyY2hMb2NhbGVEYXRhXV1bbG9j
YWxlXS5jbyBtdXN0IGJlIG51bGwgZm9yIGFsbCBsb2NhbGUgdmFsdWVzLiIKICAgICAgICAga2V5
TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOwogICAgICAgICBrZXlMb2NhbGVE
YXRhLmFwcGVuZCh7IH0pOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGxDb2xsYXRvcklu
dGVybmFsOjpjYXNlRmlyc3RJbmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpL
ZjoKICAgICAgICAga2V5TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOwogICAg
ICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgiZmFsc2UiX3MpOwogICAgICAgICBr
ZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgibG93ZXIiX3MpOwogICAgICAgICBrZXlMb2Nh
bGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgidXBwZXIiX3MpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGxDb2xsYXRvckludGVybmFsOjpudW1lcmljSW5kZXg6CisgICAgY2FzZSBSZWxldmFu
dEV4dGVuc2lvbktleTo6S246CiAgICAgICAgIGtleUxvY2FsZURhdGEucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSgyKTsKICAgICAgICAga2V5TG9jYWxlRGF0YS51bmNoZWNrZWRBcHBlbmQoImZhbHNl
Il9zKTsKICAgICAgICAga2V5TG9jYWxlRGF0YS51bmNoZWNrZWRBcHBlbmQoInRydWUiX3MpOwpA
QCAtMTgzLDcgKzE3OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAKICAgICBhdXRvIGxv
Y2FsZURhdGEgPSAobV91c2FnZSA9PSBVc2FnZTo6U29ydCkgPyBzb3J0TG9jYWxlRGF0YSA6IHNl
YXJjaExvY2FsZURhdGE7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CisgICAg
UmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsKIAogICAgIExvY2FsZU1hdGNoZXIg
bG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywg
TG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpC
ZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBc
ImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBAIC0xOTEsMjcgKzE4NywyNyBAQCB2b2lkIEludGxD
b2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgbG9jYQogICAgIFRyaVN0YXRlIG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm51bWVyaWMpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKG51bWVyaWMgIT0gVHJp
U3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAgICAgIG9wdC5hZGQoImtuIl9zLCBudW1lcmljID09
IFRyaVN0YXRlOjpUcnVlID8gInRydWUiX3MgOiAiZmFsc2UiX3MpOworICAgICAgICBsb2NhbGVP
cHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6S24pXSA9
IFN0cmluZyhudW1lcmljID09IFRyaVN0YXRlOjpUcnVlID8gInRydWUiX3MgOiAiZmFsc2UiX3Mp
OwogCiAgICAgU3RyaW5nIGNhc2VGaXJzdE9wdGlvbiA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFs
T2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwg
Imxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwg
XCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVsbCgpKQot
ICAgICAgICBvcHQuYWRkKCJrZiJfcywgY2FzZUZpcnN0T3B0aW9uKTsKKyAgICAgICAgbG9jYWxl
T3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmKV0g
PSBjYXNlRmlyc3RPcHRpb247CiAKICAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENv
bGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwotICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2Fs
ZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2Fs
ZU1hdGNoZXIsIG9wdCwgSW50bENvbGxhdG9ySW50ZXJuYWw6OnJlbGV2YW50RXh0ZW5zaW9uS2V5
cywgV1RGX0FSUkFZX0xFTkdUSChJbnRsQ29sbGF0b3JJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNp
b25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUo
Z2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVN
YXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZh
bnRFeHRlbnNpb25LZXk6OktmLCBSZWxldmFudEV4dGVuc2lvbktleTo6S24gfSwgbG9jYWxlRGF0
YSk7CiAKLSAgICBtX2xvY2FsZSA9IHJlc3VsdC5nZXQoImxvY2FsZSJfcyk7CisgICAgbV9sb2Nh
bGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAg
ICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRp
YWxpemUgQ29sbGF0b3IgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgY29sbGF0aW9uID0gcmVzdWx0LmdldCgiY28i
X3MpOworICAgIGNvbnN0IFN0cmluZyYgY29sbGF0aW9uID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvKV07CiAgICAgbV9j
b2xsYXRpb24gPSBjb2xsYXRpb24uaXNOdWxsKCkgPyAiZGVmYXVsdCJfcyA6IGNvbGxhdGlvbjsK
LSAgICBtX251bWVyaWMgPSByZXN1bHQuZ2V0KCJrbiJfcykgPT0gInRydWUiOworICAgIG1fbnVt
ZXJpYyA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpLbildID09ICJ0cnVlIjsKIAotICAgIGNvbnN0IFN0cmluZyYgY2FzZUZp
cnN0U3RyaW5nID0gcmVzdWx0LmdldCgia2YiX3MpOworICAgIGNvbnN0IFN0cmluZyYgY2FzZUZp
cnN0U3RyaW5nID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVs
ZXZhbnRFeHRlbnNpb25LZXk6OktmKV07CiAgICAgaWYgKGNhc2VGaXJzdFN0cmluZyA9PSAibG93
ZXIiKQogICAgICAgICBtX2Nhc2VGaXJzdCA9IENhc2VGaXJzdDo6TG93ZXI7CiAgICAgZWxzZSBp
ZiAoY2FzZUZpcnN0U3RyaW5nID09ICJ1cHBlciIpCkBAIC0yMzYsNyArMjMyLDcgQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGxvY2EKICAgICAgICAgLy8gc2VhcmNoTG9jYWxlRGF0YSBmaWx0ZXJzIG91
dCAiY28iIHVuaWNvZGUgZXh0ZW5zaW9uLiBIb3dldmVyLCB3ZSBuZWVkIHRvIHBhc3MgImNvIiB0
byBJQ1Ugd2hlbiBVc2FnZTo6U2VhcmNoIGlzIHNwZWNpZmllZC4KICAgICAgICAgLy8gU28gd2Ug
bmVlZCB0byBwYXNzICJjbyIgdW5pY29kZSBleHRlbnNpb24gdGhyb3VnaCBsb2NhbGUuIFNpbmNl
IHRoZSBvdGhlciByZWxldmFudCBleHRlbnNpb25zIGFyZSBoYW5kbGVkIHZpYSB1Y29sX3NldEF0
dHJpYnV0ZSwKICAgICAgICAgLy8gd2UgY2FuIGp1c3QgdXNlIGRhdGFMb2NhbGUKLSAgICAgICAg
ZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXN1bHQuZ2V0KCJkYXRhTG9j
YWxlIl9zKSwgIi11LWNvLXNlYXJjaCIpLnV0ZjgoKTsKKyAgICAgICAgZGF0YUxvY2FsZVdpdGhF
eHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRhTG9jYWxlLCAiLXUtY28tc2VhcmNo
IikudXRmOCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGF0YUxvZ0xuSWYoSW50bENv
bGxhdG9ySW50ZXJuYWw6OnZlcmJvc2UsICJkYXRhTG9jYWxlV2l0aEV4dGVuc2lvbnM6KCIsIGRh
dGFMb2NhbGVXaXRoRXh0ZW5zaW9ucywgIikiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgKaW5kZXggNjljYjMyM2UyMTRkMGNiNWJkNmI3M2QxMzAzZTlm
Mjc0M2YyMmY2My4uZTc0MjFhZGU2NDRmZWZiOThhYjA4OWQyYjNhZWQ3NWUwOTk5ODM0YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIkludGxPYmplY3QuaCIKIAogc3RydWN0IFVDb2xsYXRvcjsKIApAQCAtNjcsOCArNjcsOCBA
QCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBz
b3J0TG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBzaXplX3QpOwotICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBzZWFyY2hMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCk7CisgICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0
YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSk7CiAKICAgICBlbnVtIGNsYXNz
IFVzYWdlIDogdWludDhfdCB7IFNvcnQsIFNlYXJjaCB9OwogICAgIGVudW0gY2xhc3MgU2Vuc2l0
aXZpdHkgOiB1aW50OF90IHsgQmFzZSwgQWNjZW50LCBDYXNlLCBWYXJpYW50IH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApp
bmRleCAxZTY5YzhlN2M1MWFhOGU4NDdkMDIzMmNkODc0ZjAzMmExY2QwNDhjLi4xZmI4NThlYTM3
MjU4YjE5OTA0OWU4NjU4M2I2OWMwOGE1NzM2NzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKQEAgLTQ0LDEwICs0NCw2
IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbWluRUNNQVNjcmlwdFRpbWUgPSAtOC42NEUxNTsKIGNv
bnN0IENsYXNzSW5mbyBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW50bERh
dGVUaW1lRm9ybWF0KSB9OwogCiBuYW1lc3BhY2UgSW50bERhdGVUaW1lRm9ybWF0SW50ZXJuYWwg
ewotY29uc3RleHByIGNvbnN0IGNoYXIqIHJlbGV2YW50RXh0ZW5zaW9uS2V5c1szXSA9IHsgImNh
IiwgImhjIiwgIm51IiB9OwotY29uc3RleHByIHNpemVfdCBjYWxlbmRhckluZGV4ID0gMDsKLWNv
bnN0ZXhwciBzaXplX3QgaG91ckN5Y2xlSW5kZXggPSAxOwotY29uc3RleHByIHNpemVfdCBudW1i
ZXJpbmdTeXN0ZW1JbmRleCA9IDI7CiB9CiAKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0OjpVRGF0
ZUZvcm1hdERlbGV0ZXI6Om9wZXJhdG9yKCkoVURhdGVGb3JtYXQqIGRhdGVGb3JtYXQpIGNvbnN0
CkBAIC0xNjMsMTEgKzE1OSwxMSBAQCBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZVRpbWVab25l
TmFtZShjb25zdCBTdHJpbmcmIHRpbWVab25lTmFtZSkKICAgICByZXR1cm4gY2Fub25pY2FsOwog
fQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRleCkKK1ZlY3RvcjxTdHJpbmc+IEludGxEYXRl
VGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRl
bnNpb25LZXkgcmVsZXZhbnRFeHRlbnNpb25LZXkpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5
TG9jYWxlRGF0YTsKLSAgICBzd2l0Y2ggKGtleUluZGV4KSB7Ci0gICAgY2FzZSBJbnRsRGF0ZVRp
bWVGb3JtYXRJbnRlcm5hbDo6Y2FsZW5kYXJJbmRleDogeworICAgIHN3aXRjaCAocmVsZXZhbnRF
eHRlbnNpb25LZXkpIHsKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYTogewogICAg
ICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgVUVudW1lcmF0
aW9uKiBjYWxlbmRhcnMgPSB1Y2FsX2dldEtleXdvcmRWYWx1ZXNGb3JMb2NhbGUoImNhbGVuZGFy
IiwgbG9jYWxlLnV0ZjgoKS5kYXRhKCksIGZhbHNlLCAmc3RhdHVzKTsKICAgICAgICAgQVNTRVJU
KFVfU1VDQ0VTUyhzdGF0dXMpKTsKQEAgLTE4OCw3ICsxODQsNyBAQCBWZWN0b3I8U3RyaW5nPiBJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVf
dCBrZXlJbgogICAgICAgICB1ZW51bV9jbG9zZShjYWxlbmRhcnMpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2FzZSBJbnRsRGF0ZVRpbWVGb3JtYXRJbnRlcm5hbDo6aG91ckN5Y2xlSW5k
ZXg6CisgICAgY2FzZSBSZWxldmFudEV4dGVuc2lvbktleTo6SGM6CiAgICAgICAgIC8vIE51bGwg
ZGVmYXVsdCBzbyB3ZSBrbm93IHRvIHVzZSAnaicgaW4gcGF0dGVybi4KICAgICAgICAga2V5TG9j
YWxlRGF0YS5hcHBlbmQoU3RyaW5nKCkpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLmFwcGVuZCgi
aDExIl9zKTsKQEAgLTE5Niw3ICsxOTIsNyBAQCBWZWN0b3I8U3RyaW5nPiBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbgogICAg
ICAgICBrZXlMb2NhbGVEYXRhLmFwcGVuZCgiaDIzIl9zKTsKICAgICAgICAga2V5TG9jYWxlRGF0
YS5hcHBlbmQoImgyNCJfcyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50bERhdGVUaW1l
Rm9ybWF0SW50ZXJuYWw6Om51bWJlcmluZ1N5c3RlbUluZGV4OgorICAgIGNhc2UgUmVsZXZhbnRF
eHRlbnNpb25LZXk6Ok51OgogICAgICAgICBrZXlMb2NhbGVEYXRhID0gbnVtYmVyaW5nU3lzdGVt
c0ZvckxvY2FsZShsb2NhbGUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNDE5
LDcgKzQxNSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVG
b3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBKU09iamVjdCogb3B0aW9u
cyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0aW9u
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IG9wdDsKKyAgICBSZXNvbHZlTG9jYWxlT3B0aW9ucyBsb2NhbGVP
cHRpb25zOwogCiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxM
b2NhbGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAi
YmVzdCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBt
dXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hl
cjo6QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKQEAg
LTQzMSw3ICs0MjcsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
aW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgICAgICB0aHJv
d1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNhbGVuZGFyIGlzIG5vdCBhIHdlbGwt
Zm9ybWVkIGNhbGVuZGFyIHZhbHVlIl9zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBvcHQuYWRkKCJjYSJfcywgY2FsZW5kYXIpOworICAgICAgICBsb2NhbGVPcHRp
b25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6Q2EpXSA9IGNh
bGVuZGFyOwogICAgIH0KIAogICAgIFN0cmluZyBudW1iZXJpbmdTeXN0ZW0gPSBpbnRsU3RyaW5n
T3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bnVtYmVyaW5n
U3lzdGVtLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNDQxLDcgKzQzNyw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAibnVtYmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdlbGwtZm9ybWVkIG51bWJlcmlu
ZyBzeXN0ZW0gdmFsdWUiX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIG9wdC5hZGQoIm51Il9zLCBudW1iZXJpbmdTeXN0ZW0pOworICAgICAgICBsb2NhbGVPcHRp
b25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51
bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKICAgICBUcmlTdGF0ZSBob3VyMTIgPSBpbnRsQm9vbGVh
bk9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIxMik7
CkBAIC00NTQsMjAgKzQ1MCwyMCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIC8v
IFNldCBob3VyMTIgaGVyZSB0byBzaW1wbGlmeSBob3VyIGxvZ2ljIGxhdGVyLgogICAgICAgICBo
b3VyMTIgPSB0cmlTdGF0ZShob3VyQ3ljbGUgPT0gImgxMSIgfHwgaG91ckN5Y2xlID09ICJoMTIi
KTsKICAgICAgICAgaWYgKCFob3VyQ3ljbGUuaXNOdWxsKCkpCi0gICAgICAgICAgICBvcHQuYWRk
KCJoYyJfcywgaG91ckN5Y2xlKTsKKyAgICAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYyldID0gaG91ckN5Y2xlOwogICAg
IH0gZWxzZQotICAgICAgICBvcHQuYWRkKCJoYyJfcywgU3RyaW5nKCkpOworICAgICAgICBsb2Nh
bGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6SGMp
XSA9IFN0cmluZygpOwogCiAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwotICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIG9wdCwgSW50
bERhdGVUaW1lRm9ybWF0SW50ZXJuYWw6OnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgV1RGX0FSUkFZ
X0xFTkdUSChJbnRsRGF0ZVRpbWVGb3JtYXRJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlz
KSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFs
T2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVy
LCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYSwgUmVsZXZhbnRFeHRl
bnNpb25LZXk6OkhjLCBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAK
LSAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUuc3Ry
aW5nKCkpOworICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2Fs
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERhdGVUaW1lRm9ybWF0IGR1ZSB0byBpbnZhbGlkIGxv
Y2FsZSJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NhbGVuZGFyID0gcmVz
b2x2ZWQuZ2V0KCJjYSJfcyk7CisgICAgbV9jYWxlbmRhciA9IHJlc29sdmVkLmV4dGVuc2lvbnNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYSldOwogICAgIGlm
IChtX2NhbGVuZGFyID09ICJncmVnb3JpYW4iKQogICAgICAgICBtX2NhbGVuZGFyID0gImdyZWdv
cnkiX3M7CiAgICAgZWxzZSBpZiAobV9jYWxlbmRhciA9PSAiaXNsYW1pY2MiKQpAQCAtNDc1LDkg
KzQ3MSw5IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3Jt
YXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBlbHNlIGlmIChtX2NhbGVuZGFy
ID09ICJldGhpb2FhIikKICAgICAgICAgbV9jYWxlbmRhciA9ICJldGhpb3BpYy1hbWV0ZS1hbGVt
Il9zOwogCi0gICAgbV9ob3VyQ3ljbGUgPSByZXNvbHZlZC5nZXQoImhjIl9zKTsKLSAgICBtX251
bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmdldCgibnUiX3MpOwotICAgIENTdHJpbmcgZGF0YUxv
Y2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5nZXQoImRhdGFMb2NhbGUi
X3MpLCAiLXUtY2EtIiwgbV9jYWxlbmRhciwgIi1udS0iLCBtX251bWJlcmluZ1N5c3RlbSkudXRm
OCgpOworICAgIG1faG91ckN5Y2xlID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkhjKV07CisgICAgbV9udW1iZXJpbmdTeXN0
ZW0gPSByZXNvbHZlZC5leHRlbnNpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4
dGVuc2lvbktleTo6TnUpXTsKKyAgICBDU3RyaW5nIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9ucyA9
IG1ha2VTdHJpbmcocmVzb2x2ZWQuZGF0YUxvY2FsZSwgIi11LWNhLSIsIG1fY2FsZW5kYXIsICIt
bnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0ZjgoKTsKIAogICAgIEpTVmFsdWUgdHpWYWx1ZSA9
IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAppbmRleCA5ZDI2NzFj
ODljMjRhMDYyNzYzYmVjY2NjYzg0ODJkZjJjNzU3N2VkLi5hOTc4MGFlZjEyZTQxNTI0MDUwZTNi
MGVmMDhmMThiMzJlYWJhMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2lu
Y2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY3LDcgKzY3LDcg
QEAgY2xhc3MgSW50bERhdGVUaW1lRm9ybWF0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgVmVjdG9yPFN0
cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBzaXplX3QpOworICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5
KTsKIAogICAgIGVudW0gY2xhc3MgV2Vla2RheSA6IHVpbnQ4X3QgeyBOb25lLCBOYXJyb3csIFNo
b3J0LCBMb25nIH07CiAgICAgZW51bSBjbGFzcyBFcmEgOiB1aW50OF90IHsgTm9uZSwgTmFycm93
LCBTaG9ydCwgTG9uZyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCBiNjQ2ZDUyZDViMzUxMjQ1YTk0MjliMGZiOTU3Yjlk
OGY1MzNkMGVlLi5mOGM2M2U3ODY4ZTkzNTFmNTY5Mzc3ZDM1ZjI0NWQwNDI3OWNmZWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNw
cApAQCAtNDEsNyArNDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBJbnRs
TnVtYmVyRm9ybWF0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEludGxOdW1iZXJGb3JtYXQpIH07CiAKIG5h
bWVzcGFjZSBJbnRsTnVtYmVyRm9ybWF0SW50ZXJuYWwgewotY29uc3RleHByIGNvbnN0IGNoYXIq
IHJlbGV2YW50RXh0ZW5zaW9uS2V5c1sxXSA9IHsgIm51IiB9OwogY29uc3RleHByIGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwogfQogCkBAIC04OSwxMCArODgsMTAgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9ib3VuZEZvcm1hdCk7CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6OmxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2Nh
bGUsIHNpemVfdCBrZXlJbmRleCkKK1ZlY3RvcjxTdHJpbmc+IEludGxOdW1iZXJGb3JtYXQ6Omxv
Y2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IHJlbGV2
YW50RXh0ZW5zaW9uS2V5cykKIHsKICAgICAvLyA5LjEgSW50ZXJuYWwgc2xvdHMgb2YgU2Vydmlj
ZSBDb25zdHJ1Y3RvcnMgJiAxMS4yLjMgSW50ZXJuYWwgc2xvdHMgKEVDTUEtNDAyIDIuMCkKLSAg
ICBBU1NFUlRfVU5VU0VEKGtleUluZGV4LCAha2V5SW5kZXgpOyAvLyBUaGUgaW5kZXggb2YgdGhl
IGV4dGVuc2lvbiBrZXkgIm51IiBpbiByZWxldmFudEV4dGVuc2lvbktleXMgaXMgMC4KKyAgICBB
U1NFUlRfVU5VU0VEKHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgcmVsZXZhbnRFeHRlbnNpb25LZXlz
ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CiAgICAgcmV0dXJuIG51bWJlcmluZ1N5c3Rl
bXNGb3JMb2NhbGUobG9jYWxlKTsKIH0KIApAQCAtMTcxLDcgKzE3MCw3IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0OworICAgIFJlc29sdmVM
b2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1h
dGNoZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywg
dm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1h
dGNoZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9
IH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZp
dFwiIl9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwpAQCAtMTgzLDE5ICsxODIsMTkgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmEKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
bnVtYmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdlbGwtZm9ybWVkIG51bWJlcmluZyBzeXN0ZW0gdmFs
dWUiX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG9wdC5hZGQo
Im51Il9zLCBudW1iZXJpbmdTeXN0ZW0pOworICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3Rl
bTsKICAgICB9CiAKICAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1h
dEF2YWlsYWJsZUxvY2FsZXMoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHJlc29sdmVMb2NhbGUoZ2xv
YmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRj
aGVyLCBvcHQsIEludGxOdW1iZXJGb3JtYXRJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlz
LCBXVEZfQVJSQVlfTEVOR1RIKEludGxOdW1iZXJGb3JtYXRJbnRlcm5hbDo6cmVsZXZhbnRFeHRl
bnNpb25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2Nh
bGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2Nh
bGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBs
b2NhbGVEYXRhKTsKIAotICAgIG1fbG9jYWxlID0gcmVzdWx0LmdldCgibG9jYWxlIl9zKTsKKyAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgp
KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQg
dG8gaW5pdGlhbGl6ZSBOdW1iZXJGb3JtYXQgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbnVtYmVyaW5nU3lzdGVtID0gcmVzdWx0Lmdl
dCgibnUiX3MpOworICAgIG1fbnVtYmVyaW5nU3lzdGVtID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV07CiAKICAgICBt
X3N0eWxlID0gaW50bE9wdGlvbjxTdHlsZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zdHlsZSwgeyB7ICJkZWNpbWFsIl9zLCBTdHlsZTo6RGVjaW1hbCB9LCB7ICJw
ZXJjZW50Il9zLCBTdHlsZTo6UGVyY2VudCB9LCB7ICJjdXJyZW5jeSJfcywgU3R5bGU6OkN1cnJl
bmN5IH0gfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBcInBlcmNlbnRcIiwg
b3IgXCJjdXJyZW5jeVwiIl9zLCBTdHlsZTo6RGVjaW1hbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKQEAgLTI5Miw3ICsyOTEsNyBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBDU3Ry
aW5nIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9ucyA9IG1ha2VTdHJpbmcocmVzdWx0LmdldCgiZGF0
YUxvY2FsZSJfcyksICItdS1udS0iLCBtX251bWJlcmluZ1N5c3RlbSkudXRmOCgpOworICAgIENT
dHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRh
TG9jYWxlLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0ZjgoKTsKICAgICBkYXRhTG9n
TG5JZihJbnRsTnVtYmVyRm9ybWF0SW50ZXJuYWw6OnZlcmJvc2UsICJkYXRhTG9jYWxlV2l0aEV4
dGVuc2lvbnM6KCIsIGRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9ucyAsICIpIik7CiAKICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAppbmRleCA0MzA0YjIyYThjNmE1MTFmNzRlMmJk
Y2IwNTM4OGQ1YjY1YjczNDc2Li4wZGNhYmIwYzg0MTQxYjE0NzM5MTA0YmQ4ZmU4MzlmZDk4MTZj
MmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSlNP
YmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bnVt
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzEsNyArNzEsNyBAQCBjbGFzcyBJbnRsTnVtYmVy
Rm9ybWF0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmLCBzaXplX3QpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIAogICAgIGVudW0gY2xhc3Mg
U3R5bGUgOiB1aW50OF90IHsgRGVjaW1hbCwgUGVyY2VudCwgQ3VycmVuY3kgfTsKICAgICBlbnVt
IGNsYXNzIEN1cnJlbmN5RGlzcGxheSA6IHVpbnQ4X3QgeyBDb2RlLCBTeW1ib2wsIE5hbWUgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggMGU2
ODc5N2FmZDc3YzhmYTYyZjY0MjMzMDQxN2M3ZGU5MzgxYThjZS4uMmI1NjUzMDJjMWU2MWI1ZGJk
Y2RjMDM2NTA1YWIwZWI5ZTdlNjJlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5jcHAKQEAgLTYyOSw3ICs2MjksMjAgQEAgc3RhdGljIHZvaWQgdW5pY29k
ZUV4dGVuc2lvblN1YlRhZ3MoY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFZlY3RvcjxTdHJpbmc+
JiBzdWIKICAgICBzdWJ0YWdzLmFwcGVuZChleHRlbnNpb24uc3Vic3RyaW5nKHZhbHVlU3RhcnQs
IGV4dGVuc2lvbkxlbmd0aCAtIHZhbHVlU3RhcnQpKTsKIH0KIAotSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBy
ZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBvcHRpb25zLCBjb25zdCBjaGFyKiBjb25zdCByZWxldmFudEV4
dGVuc2lvbktleXNbXSwgc2l6ZV90IHJlbGV2YW50RXh0ZW5zaW9uS2V5Q291bnQsIFZlY3RvcjxT
dHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgc2l6ZV90KSkKK2lubGluZSBBU0NJ
SUxpdGVyYWwgcmVsZXZhbnRFeHRlbnNpb25LZXlTdHJpbmcoUmVsZXZhbnRFeHRlbnNpb25LZXkg
a2V5KQoreworICAgIHN3aXRjaCAoa2V5KSB7CisjZGVmaW5lIEpTQ19SRVRVUk5fSU5UTF9SRUxF
VkFOVF9FWFRFTlNJT05fS0VZUyhsb3dlck5hbWUsIGNhcGl0YWxpemVkTmFtZSkgXAorICAgIGNh
c2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OmNhcGl0YWxpemVkTmFtZTogXAorICAgICAgICByZXR1
cm4gI2xvd2VyTmFtZSAiIl9zOworICAgIEpTQ19JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlT
KEpTQ19SRVRVUk5fSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUykKKyN1bmRlZiBKU0NfUkVU
VVJOX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOworfQorCitSZXNvbHZl
ZExvY2FsZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVz
b2x2ZUxvY2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFu
dEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxv
Y2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKIHsKICAgICAv
LyBSZXNvbHZlTG9jYWxlIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRp
b25zLCByZWxldmFudEV4dGVuc2lvbktleXMsIGxvY2FsZURhdGEpCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtcmVzb2x2ZWxvY2FsZQpAQCAtNjQ0LDQ1ICs2NTcs
NDMgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2UKICAgICBpZiAoIW1hdGNoZXJSZXN1bHQuZXh0
ZW5zaW9uLmlzTnVsbCgpKQogICAgICAgICB1bmljb2RlRXh0ZW5zaW9uU3ViVGFncyhtYXRjaGVy
UmVzdWx0LmV4dGVuc2lvbiwgZXh0ZW5zaW9uU3VidGFncyk7CiAKLSAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LmFkZCgiZGF0YUxvY2FsZSJfcywgZm91bmRM
b2NhbGUpOworICAgIFJlc29sdmVkTG9jYWxlIHJlc29sdmVkOworICAgIHJlc29sdmVkLmRhdGFM
b2NhbGUgPSBmb3VuZExvY2FsZTsKIAogICAgIFN0cmluZyBzdXBwb3J0ZWRFeHRlbnNpb24gPSAi
LXUiX3M7Ci0gICAgZm9yIChzaXplX3Qga2V5SW5kZXggPSAwOyBrZXlJbmRleCA8IHJlbGV2YW50
RXh0ZW5zaW9uS2V5Q291bnQ7ICsra2V5SW5kZXgpIHsKLSAgICAgICAgY29uc3QgY2hhcioga2V5
ID0gcmVsZXZhbnRFeHRlbnNpb25LZXlzW2tleUluZGV4XTsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4ga2V5TG9jYWxlRGF0YSA9IGxvY2FsZURhdGEoZm91bmRMb2NhbGUsIGtleUluZGV4KTsKKyAg
ICBmb3IgKFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSA6IHJlbGV2YW50RXh0ZW5zaW9uS2V5cykg
eworICAgICAgICBBU0NJSUxpdGVyYWwga2V5U3RyaW5nID0gcmVsZXZhbnRFeHRlbnNpb25LZXlT
dHJpbmcoa2V5KTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4ga2V5TG9jYWxlRGF0YSA9IGxvY2Fs
ZURhdGEoZm91bmRMb2NhbGUsIGtleSk7CiAgICAgICAgIEFTU0VSVCgha2V5TG9jYWxlRGF0YS5p
c0VtcHR5KCkpOwogCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGtleUxvY2FsZURhdGFbMF07CiAg
ICAgICAgIFN0cmluZyBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbjsKIAogICAgICAgICBpZiAo
IWV4dGVuc2lvblN1YnRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzaXplX3Qga2V5UG9z
ID0gZXh0ZW5zaW9uU3VidGFncy5maW5kKGtleSk7CisgICAgICAgICAgICBzaXplX3Qga2V5UG9z
ID0gZXh0ZW5zaW9uU3VidGFncy5maW5kKGtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoa2V5
UG9zICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgaWYgKGtleVBvcyArIDEgPCBleHRl
bnNpb25TdWJ0YWdzLnNpemUoKSAmJiBleHRlbnNpb25TdWJ0YWdzW2tleVBvcyArIDFdLmxlbmd0
aCgpID4gMikgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZFZh
bHVlID0gZXh0ZW5zaW9uU3VidGFnc1trZXlQb3MgKyAxXTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGtleUxvY2FsZURhdGEuY29udGFpbnMocmVxdWVzdGVkVmFsdWUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHJlcXVlc3RlZFZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24gPSBtYWtlU3RyaW5nKCctJywga2V5LCAn
LScsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFk
ZGl0aW9uID0gbWFrZVN0cmluZygnLScsIGtleVN0cmluZywgJy0nLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUxvY2FsZURhdGEu
Y29udGFpbnMoInRydWUiX3MpKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gInRydWUi
X3M7Ci0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gbWFr
ZVN0cmluZygnLScsIGtleSk7CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lv
bkFkZGl0aW9uID0gbWFrZVN0cmluZygnLScsIGtleVN0cmluZyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gb3B0aW9ucy5maW5kKGtleSk7Ci0gICAg
ICAgIGlmIChpdGVyYXRvciAhPSBvcHRpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG9wdGlvbnNWYWx1ZSA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKGF1dG8g
b3B0aW9uc1ZhbHVlID0gb3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0pIHsKICAg
ICAgICAgICAgIC8vIFVuZGVmaW5lZCBzaG91bGQgbm90IGdldCBhZGRlZCB0byB0aGUgb3B0aW9u
cywgaXQgd29uJ3QgZGlzcGxhY2UgdGhlIGV4dGVuc2lvbi4KICAgICAgICAgICAgIC8vIE51bGwg
d2lsbCByZW1vdmUgdGhlIGV4dGVuc2lvbi4KLSAgICAgICAgICAgIGlmICgob3B0aW9uc1ZhbHVl
LmlzTnVsbCgpIHx8IGtleUxvY2FsZURhdGEuY29udGFpbnMob3B0aW9uc1ZhbHVlKSkgJiYgb3B0
aW9uc1ZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFs
dWU7CisgICAgICAgICAgICBpZiAoKG9wdGlvbnNWYWx1ZS0+aXNOdWxsKCkgfHwga2V5TG9jYWxl
RGF0YS5jb250YWlucyhvcHRpb25zVmFsdWUudmFsdWUoKSkpICYmIG9wdGlvbnNWYWx1ZS52YWx1
ZSgpICE9IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWUudmFs
dWUoKTsKICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9IFN0cmlu
ZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hZGQoa2V5LCB2
YWx1ZSk7CisgICAgICAgIHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGtleSldID0gdmFsdWU7CiAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbi5hcHBlbmQoc3VwcG9y
dGVkRXh0ZW5zaW9uQWRkaXRpb24pOwogICAgIH0KIApAQCAtNjkyLDggKzcwMyw4IEBAIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSGFzaFNlCiAgICAgICAgIGZvdW5kTG9jYWxlID0gcHJlRXh0ZW5zaW9uICsg
c3VwcG9ydGVkRXh0ZW5zaW9uICsgcG9zdEV4dGVuc2lvbjsKICAgICB9CiAKLSAgICByZXN1bHQu
YWRkKCJsb2NhbGUiX3MsIGZvdW5kTG9jYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
c29sdmVkLmxvY2FsZSA9IFdURk1vdmUoZm91bmRMb2NhbGUpOworICAgIHJldHVybiByZXNvbHZl
ZDsKIH0KIAogc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCA4ZTg2ZjYzMjQzNTIxNjgyODEz
NmI3NDY5OTljMTIyYzk3OGQyNjUyLi4zYzI0NzNiNmJmMzZhNDU3MGNmNTFjMjlkZmY2YmU3YWZh
YjRmYTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBA
IC0zOSw2ICszOSwyMyBAQCBlbnVtIGNsYXNzIExvY2FsZU1hdGNoZXIgOiB1aW50OF90IHsKICAg
ICBCZXN0Rml0LAogfTsKIAorI2RlZmluZSBKU0NfSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZ
UyhtYWNybykgXAorICAgIG1hY3JvKGNhLCBDYSkgLyogY2FsZW5kYXIgKi8gXAorICAgIG1hY3Jv
KGNvLCBDbykgLyogY29sbGF0aW9uICovIFwKKyAgICBtYWNybyhoYywgSGMpIC8qIGhvdXItY3lj
bGUgKi8gXAorICAgIG1hY3JvKGtmLCBLZikgLyogY2FzZS1maXJzdCAqLyBcCisgICAgbWFjcm8o
a24sIEtuKSAvKiBudW1lcmljICovIFwKKyAgICBtYWNybyhudSwgTnUpIC8qIG51bWJlcmluZy1z
eXN0ZW0gKi8gXAorCitlbnVtIGNsYXNzIFJlbGV2YW50RXh0ZW5zaW9uS2V5IDogdWludDhfdCB7
CisjZGVmaW5lIEpTQ19ERUNMQVJFX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMobG93ZXJO
YW1lLCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKK0pTQ19JTlRMX1JFTEVWQU5U
X0VYVEVOU0lPTl9LRVlTKEpTQ19ERUNMQVJFX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMp
CisjdW5kZWYgSlNDX0RFQ0xBUkVfSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUworfTsKKyNk
ZWZpbmUgSlNDX0NPVU5UX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMobG93ZXJOYW1lLCBj
YXBpdGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlJl
bGV2YW50RXh0ZW5zaW9uS2V5cyA9IDAgSlNDX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMo
SlNDX0NPVU5UX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMpOworI3VuZGVmIEpTQ19DT1VO
VF9JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlTCisKIGNsYXNzIEludGxPYmplY3QgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Tm9uRmluYWxPYmplY3Q7CkBAIC03Niw3ICs5MywxNiBAQCB1bnNpZ25lZCBpbnRsRGVmYXVsdE51
bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZQogVmVjdG9yPGNoYXIsIDMyPiBsb2NhbGVJREJ1ZmZlckZvckxhbmd1YWdlVGFnKGNvbnN0IENT
dHJpbmcmKTsKIFN0cmluZyBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqLCBib29s
IGlzSW1tb3J0YWwgPSBmYWxzZSk7CiBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzKTsKLUhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9u
cywgY29uc3QgY2hhciogY29uc3QgcmVsZXZhbnRFeHRlbnNpb25LZXlzW10sIHNpemVfdCByZWxl
dmFudEV4dGVuc2lvbktleUNvdW50LCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0
IFN0cmluZyYsIHNpemVfdCkpOworCit1c2luZyBSZXNvbHZlTG9jYWxlT3B0aW9ucyA9IHN0ZDo6
YXJyYXk8T3B0aW9uYWw8U3RyaW5nPiwgbnVtYmVyT2ZSZWxldmFudEV4dGVuc2lvbktleXM+Owor
dXNpbmcgUmVsZXZhbnRFeHRlbnNpb25zID0gc3RkOjphcnJheTxTdHJpbmcsIG51bWJlck9mUmVs
ZXZhbnRFeHRlbnNpb25LZXlzPjsKK3N0cnVjdCBSZXNvbHZlZExvY2FsZSB7CisgICAgU3RyaW5n
IGxvY2FsZTsKKyAgICBTdHJpbmcgZGF0YUxvY2FsZTsKKyAgICBSZWxldmFudEV4dGVuc2lvbnMg
ZXh0ZW5zaW9uczsKK307CisKK1Jlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNv
bHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lv
bktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEp
KGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CiBKU1ZhbHVlIHN1cHBvcnRl
ZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVl
IG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBsb2NhbGUpOwogU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNw
cAppbmRleCAyZDU3ZTY4ZmY2OWQwZTA5Y2NiYzFmNzBhOGU0NTE2Yjg0NmMyZGQ4Li42ODRjYmQ3
YmNkMTc5NTI4YWViODJhNTMxOTVhYWEyNzc5Y2IzYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29u
c3QgU3RyaW5nJiwgc2l6ZV90KQorVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVy
biB7IH07CiB9CkBAIC0xMDgsMTMgKzEwOCwxMyBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6aW5p
dGlhbGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdQog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIAotICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxvY2FsZU9wdDsKKyAgICBSZXNvbHZlTG9jYWxlT3B0
aW9ucyBsb2NhbGVPcHRpb25zOwogICAgIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGlu
dGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9v
a3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2Fs
ZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExv
Y2FsZU1hdGNoZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0LCBudWxscHRy
LCAwLCBsb2NhbGVEYXRhKTsKLSAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0
eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOworICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKKyAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlh
bGl6ZSBQbHVyYWxSdWxlcyBkdWUgdG8gaW52YWxpZCBsb2NhbGUiX3MpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5o
CmluZGV4IGIwMTVmZTgyYTBlNjkzYTBjYmQwODJiMjIwZjI1NWQ4MmFlNzRiNzEuLmE5ZGY5OWI0
M2U4OTU3NjY1YzU1NjcyMGEwNTYyMTFjOTQ2MjFkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0
LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91cGx1cmFs
cnVsZXMuaD4KIApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBJbnRsUGx1cmFsUnVsZXMgZmluYWwg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNp
emVfdCk7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5n
JiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCiAgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7
IENhcmRpbmFsLCBPcmRpbmFsIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggMTFjMzQwMTJjMzlk
OWEwNWJjMDA2OGYzNTA0ZGIzOGJkZjQ1MDFlZS4uOTdkNWQ3MWVlMjk1MDIxMjg0ZjE0YzEyOTA4
ZGM4NGM2OTY2ZWE0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjb25zdCBDbGFzc0luZm8gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6c19pbmZv
ID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KSB9OwogCiBuYW1lc3BhY2UgSW50bFJl
bGF0aXZlVGltZUZvcm1hdEludGVybmFsIHsKLWNvbnN0ZXhwciBjb25zdCBjaGFyKiByZWxldmFu
dEV4dGVuc2lvbktleXNbMV0gPSB7ICJudSIgfTsKIH0KIAogdm9pZCBJbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0OjpVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlckRlbGV0ZXI6Om9wZXJhdG9yKCkoVVJl
bGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIqIHJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIpIGNvbnN0
CkBAIC04MywxMCArODIsOSBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXpl
X3Qga2V5SW5kZXgpCitWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2Nh
bGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSByZWxldmFu
dEV4dGVuc2lvbktleSkKIHsKLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGV4dGVuc2lvbiBrZXkg
Im51IiBpbiByZWxldmFudEV4dGVuc2lvbktleXMgaXMgMC4KLSAgICBBU1NFUlRfVU5VU0VEKGtl
eUluZGV4LCAha2V5SW5kZXgpOworICAgIEFTU0VSVF9VTlVTRUQocmVsZXZhbnRFeHRlbnNpb25L
ZXksIHJlbGV2YW50RXh0ZW5zaW9uS2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CiAg
ICAgcmV0dXJuIG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUobG9jYWxlKTsKIH0KIApAQCAtMTA3
LDcgKzEwNSw3IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0
aXZlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gb3B0OworICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CiAgICAg
TG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVyPihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsg
eyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3MsIExv
Y2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBc
Imxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIApAQCAtMTE4LDE5ICsxMTYs
MTkgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVsYXRpdmVUaW1l
Rm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAibnVtYmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdlbGwtZm9y
bWVkIG51bWJlcmluZyBzeXN0ZW0gdmFsdWUiX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIG9wdC5hZGQoIm51Il9zLCBudW1iZXJpbmdTeXN0ZW0pOworICAgICAg
ICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktl
eTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKICAgICBjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVkID0gcmVzb2x2
ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IGxvY2FsZU1hdGNoZXIsIG9wdCwgSW50bFJlbGF0aXZlVGltZUZvcm1hdEludGVybmFsOjpyZWxl
dmFudEV4dGVuc2lvbktleXMsIFdURl9BUlJBWV9MRU5HVEgoSW50bFJlbGF0aXZlVGltZUZvcm1h
dEludGVybmFsOjpyZWxldmFudEV4dGVuc2lvbktleXMpLCBsb2NhbGVEYXRhKTsKLSAgICBtX2xv
Y2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOwor
ICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywg
eyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CisgICAgbV9sb2NhbGUg
PSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxp
emUgUmVsYXRpdmVUaW1lRm9ybWF0IGR1ZSB0byBpbnZhbGlkIGxvY2FsZSJfcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmdldCgi
bnUiX3MpOwotICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmlu
ZyhyZXNvbHZlZC5nZXQoImRhdGFMb2NhbGUiX3MpLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0
ZW0pLnV0ZjgoKTsKKyAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmV4dGVuc2lvbnNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldOworICAgIENT
dHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRh
TG9jYWxlLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0ZjgoKTsKIAogICAgIG1fc3R5
bGUgPSBpbnRsT3B0aW9uPFN0eWxlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPnN0eWxlLCB7IHsgImxvbmciX3MsIFN0eWxlOjpMb25nIH0sIHsgInNob3J0Il9zLCBT
dHlsZTo6U2hvcnQgfSwgeyAibmFycm93Il9zLCBTdHlsZTo6TmFycm93IH0gfSwgInN0eWxlIG11
c3QgYmUgZWl0aGVyIFwibG9uZ1wiLCBcInNob3J0XCIsIG9yIFwibmFycm93XCIiX3MsIFN0eWxl
OjpMb25nKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dC5oCmluZGV4IDg1YjgxZmE4MzhkMzVlZjMzZWU5YzBhZTZhNTAyNzBkMTZmODU1ZGEuLjE1MTBh
NGZhYjU4OTU4MDFkYzg3ZmE2NzM2NjQ3OGYyOGNiYTY5YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKQEAgLTYy
LDcgKzYyLDcgQEAgY2xhc3MgSW50bFJlbGF0aXZlVGltZUZvcm1hdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90KTsKKyAg
ICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFu
dEV4dGVuc2lvbktleSk7CiAKICAgICBTdHJpbmcgZm9ybWF0SW50ZXJuYWwoSlNHbG9iYWxPYmpl
Y3QqLCBkb3VibGUsIFN0cmluZ1ZpZXcgdW5pdCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404552</attachid>
            <date>2020-07-17 02:18:02 -0700</date>
            <delta_ts>2020-07-17 08:03:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214446-20200717021801.patch</filename>
            <type>text/plain</type>
            <size>38055</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTc2OTFhMjE2ZTgzNTNkYjFkZjVhNjYzNTM3NDdkYzcwYmJkNTZkLi5lZWJhM2E0MjdkOTRiNjE0
NWJlMDU3YzRlZmVkMjBhNzhlMDU1MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMC0wNy0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENsZWFuIHVwIHJlc29sdmVMb2NhbGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDQ0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBSZWxldmFudEV4dGVu
c2lvbktleSBhbmQgb3B0aW1pemUgcmVzb2x2ZUxvY2FsZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBh
dm9pZHMgdXNpbmcgSGFzaE1hcCBmb3IgaW5wdXQgYW5kIG91dHB1dC4KKyAgICAgICAgV2UgaW5z
dGVhZCB1c2Ugc3RkOjphcnJheTxULCBudW1iZXJPZlJlbGV2YW50RXh0ZW5zaW9uS2V5cz4gc2lu
Y2UgIyBvZiBSZWxldmFudEV4dGVuc2lvbktleXMgaXMgb25seSA2LgorCisgICAgICAgIEZvciBp
bnB1dCBvcHRpb24sIHdlIHVzZSBzdGQ6OmFycmF5PE9wdGlvbmFsPFN0cmluZz4sIG51bWJlck9m
UmVsZXZhbnRFeHRlbnNpb25LZXlzPiBzaW5jZSB0aGlzIGRpc3Rpbmd1aXNoIG5vbi1zZXQtb3B0
aW9uIGFuZCBudWxsIFN0cmluZygpLgorICAgICAgICBGb3Igb3V0cHV0IGV4dGVuc2lvbiB2YWx1
ZXMsIHdlIHNpbXBseSB1c2Ugc3RkOjphcnJheTxTdHJpbmcsIG51bWJlck9mUmVsZXZhbnRFeHRl
bnNpb25LZXlzPi4KKworICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bENvbGxhdG9yOjpzb3J0TG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6Oklu
dGxDb2xsYXRvcjo6c2VhcmNoTG9jYWxlRGF0YSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRv
cjo6aW5pdGlhbGl6ZUNvbGxhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvci5o
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKToKKyAgICAgICAgKEpTQzo6SW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YSk6Cisg
ICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5n
KToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgICogcnVudGltZS9JbnRs
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEpOgorICAgICAgICAoSlNDOjpJbnRs
UGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6CisgICAgICAgICogcnVudGltZS9J
bnRsUGx1cmFsUnVsZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRh
KToKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0
aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
Lmg6CisKIDIwMjAtMDctMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBDbGVhbiB1cCBJbnRsIG9wdGlvbiBwYXJzaW5nIGNvZGUgYnkgaW50cm9k
dWNpbmcgaW50bE9wdGlvbjw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcAppbmRleCA1YTAyYjdiNjcxZjdkMTY1NDQ4NmQ2ZjI2NjcxMmQ1ZGQ5OTc2
ZDcyLi45YmQwY2E2YjVlZWQ1YmIxYWQwMWQ1YTgzNjM0NGMyOTQ2NjhlZTk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTM5LDEwICsz
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIEludGxDb2xsYXRvcjo6c19p
bmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShJbnRsQ29sbGF0b3IpIH07CiAKIG5hbWVzcGFjZSBJbnRsQ29sbGF0b3JJ
bnRlcm5hbCB7Ci1jb25zdGV4cHIgY29uc3QgY2hhciogcmVsZXZhbnRFeHRlbnNpb25LZXlzWzNd
ID0geyAiY28iLCAia2YiLCAia24iIH07Ci1jb25zdGV4cHIgc2l6ZV90IGNvbGxhdGlvbkluZGV4
ID0gMDsKLWNvbnN0ZXhwciBzaXplX3QgY2FzZUZpcnN0SW5kZXggPSAxOwotY29uc3RleHByIHNp
emVfdCBudW1lcmljSW5kZXggPSAyOwogY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCkBAIC04NSwxMiArODEsMTIgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2JvdW5kQ29tcGFyZSk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEludGxDb2xs
YXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRl
eCkKK1ZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29ydExvY2FsZURhdGEoY29uc3QgU3Ry
aW5nJiBsb2NhbGUsIFJlbGV2YW50RXh0ZW5zaW9uS2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQog
ewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEw
LjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtl
eUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChrZXlJbmRleCkgewotICAgIGNhc2UgSW50bENvbGxh
dG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4OiB7CisgICAgc3dpdGNoIChyZWxldmFudEV4dGVu
c2lvbktleSkgeworICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvOiB7CiAgICAgICAg
IC8vIDEwLjIuMyAiVGhlIGZpcnN0IGVsZW1lbnQgb2YgW1tzb3J0TG9jYWxlRGF0YV1dW2xvY2Fs
ZV0uY28gYW5kIFtbc2VhcmNoTG9jYWxlRGF0YV1dW2xvY2FsZV0uY28gbXVzdCBiZSBudWxsIGZv
ciBhbGwgbG9jYWxlIHZhbHVlcy4iCiAgICAgICAgIGtleUxvY2FsZURhdGEuYXBwZW5kKHsgfSk7
CiAKQEAgLTExOSwxMyArMTE1LDEzIEBAIFZlY3RvcjxTdHJpbmc+IEludGxDb2xsYXRvcjo6c29y
dExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRlCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6
OmNhc2VGaXJzdEluZGV4OgorICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmOgogICAg
ICAgICBrZXlMb2NhbGVEYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CiAgICAgICAgIGtl
eUxvY2FsZURhdGEudW5jaGVja2VkQXBwZW5kKCJmYWxzZSJfcyk7CiAgICAgICAgIGtleUxvY2Fs
ZURhdGEudW5jaGVja2VkQXBwZW5kKCJsb3dlciJfcyk7CiAgICAgICAgIGtleUxvY2FsZURhdGEu
dW5jaGVja2VkQXBwZW5kKCJ1cHBlciJfcyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50
bENvbGxhdG9ySW50ZXJuYWw6Om51bWVyaWNJbmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpLbjoKICAgICAgICAga2V5TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDIpOwogICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgiZmFsc2UiX3MpOwog
ICAgICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgidHJ1ZSJfcyk7CkBAIC0xMzYs
MjMgKzEzMiwyMyBAQCBWZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNvcnRMb2NhbGVEYXRh
KGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXplX3Qga2V5SW5kZQogICAgIHJldHVybiBrZXlMb2Nh
bGVEYXRhOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsQ29sbGF0b3I6OnNlYXJjaExvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGtleUluZGV4KQorVmVjdG9yPFN0cmluZz4gSW50bENv
bGxhdG9yOjpzZWFyY2hMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9u
S2V5IHJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBv
ZiBTZXJ2aWNlIENvbnN0cnVjdG9ycyAmIDEwLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIg
Mi4wKQogICAgIFZlY3RvcjxTdHJpbmc+IGtleUxvY2FsZURhdGE7Ci0gICAgc3dpdGNoIChrZXlJ
bmRleCkgewotICAgIGNhc2UgSW50bENvbGxhdG9ySW50ZXJuYWw6OmNvbGxhdGlvbkluZGV4Ogor
ICAgIHN3aXRjaCAocmVsZXZhbnRFeHRlbnNpb25LZXkpIHsKKyAgICBjYXNlIFJlbGV2YW50RXh0
ZW5zaW9uS2V5OjpDbzoKICAgICAgICAgLy8gMTAuMi4zICJUaGUgZmlyc3QgZWxlbWVudCBvZiBb
W3NvcnRMb2NhbGVEYXRhXV1bbG9jYWxlXS5jbyBhbmQgW1tzZWFyY2hMb2NhbGVEYXRhXV1bbG9j
YWxlXS5jbyBtdXN0IGJlIG51bGwgZm9yIGFsbCBsb2NhbGUgdmFsdWVzLiIKICAgICAgICAga2V5
TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOwogICAgICAgICBrZXlMb2NhbGVE
YXRhLmFwcGVuZCh7IH0pOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGxDb2xsYXRvcklu
dGVybmFsOjpjYXNlRmlyc3RJbmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpL
ZjoKICAgICAgICAga2V5TG9jYWxlRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOwogICAg
ICAgICBrZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgiZmFsc2UiX3MpOwogICAgICAgICBr
ZXlMb2NhbGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgibG93ZXIiX3MpOwogICAgICAgICBrZXlMb2Nh
bGVEYXRhLnVuY2hlY2tlZEFwcGVuZCgidXBwZXIiX3MpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGxDb2xsYXRvckludGVybmFsOjpudW1lcmljSW5kZXg6CisgICAgY2FzZSBSZWxldmFu
dEV4dGVuc2lvbktleTo6S246CiAgICAgICAgIGtleUxvY2FsZURhdGEucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSgyKTsKICAgICAgICAga2V5TG9jYWxlRGF0YS51bmNoZWNrZWRBcHBlbmQoImZhbHNl
Il9zKTsKICAgICAgICAga2V5TG9jYWxlRGF0YS51bmNoZWNrZWRBcHBlbmQoInRydWUiX3MpOwpA
QCAtMTgzLDcgKzE3OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAKICAgICBhdXRvIGxv
Y2FsZURhdGEgPSAobV91c2FnZSA9PSBVc2FnZTo6U29ydCkgPyBzb3J0TG9jYWxlRGF0YSA6IHNl
YXJjaExvY2FsZURhdGE7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CisgICAg
UmVzb2x2ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsKIAogICAgIExvY2FsZU1hdGNoZXIg
bG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywg
TG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpC
ZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBc
ImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CkBAIC0xOTEsMjcgKzE4NywyNyBAQCB2b2lkIEludGxD
b2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgbG9jYQogICAgIFRyaVN0YXRlIG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm51bWVyaWMpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKG51bWVyaWMgIT0gVHJp
U3RhdGU6OkluZGV0ZXJtaW5hdGUpCi0gICAgICAgIG9wdC5hZGQoImtuIl9zLCBudW1lcmljID09
IFRyaVN0YXRlOjpUcnVlID8gInRydWUiX3MgOiAiZmFsc2UiX3MpOworICAgICAgICBsb2NhbGVP
cHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6S24pXSA9
IFN0cmluZyhudW1lcmljID09IFRyaVN0YXRlOjpUcnVlID8gInRydWUiX3MgOiAiZmFsc2UiX3Mp
OwogCiAgICAgU3RyaW5nIGNhc2VGaXJzdE9wdGlvbiA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFs
T2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwg
Imxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwg
XCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVsbCgpKQot
ICAgICAgICBvcHQuYWRkKCJrZiJfcywgY2FzZUZpcnN0T3B0aW9uKTsKKyAgICAgICAgbG9jYWxl
T3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmKV0g
PSBjYXNlRmlyc3RPcHRpb247CiAKICAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENv
bGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwotICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2Fs
ZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2Fs
ZU1hdGNoZXIsIG9wdCwgSW50bENvbGxhdG9ySW50ZXJuYWw6OnJlbGV2YW50RXh0ZW5zaW9uS2V5
cywgV1RGX0FSUkFZX0xFTkdUSChJbnRsQ29sbGF0b3JJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNp
b25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUo
Z2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVN
YXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZh
bnRFeHRlbnNpb25LZXk6OktmLCBSZWxldmFudEV4dGVuc2lvbktleTo6S24gfSwgbG9jYWxlRGF0
YSk7CiAKLSAgICBtX2xvY2FsZSA9IHJlc3VsdC5nZXQoImxvY2FsZSJfcyk7CisgICAgbV9sb2Nh
bGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAg
ICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRp
YWxpemUgQ29sbGF0b3IgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgY29sbGF0aW9uID0gcmVzdWx0LmdldCgiY28i
X3MpOworICAgIGNvbnN0IFN0cmluZyYgY29sbGF0aW9uID0gcmVzb2x2ZWQuZXh0ZW5zaW9uc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvKV07CiAgICAgbV9j
b2xsYXRpb24gPSBjb2xsYXRpb24uaXNOdWxsKCkgPyAiZGVmYXVsdCJfcyA6IGNvbGxhdGlvbjsK
LSAgICBtX251bWVyaWMgPSByZXN1bHQuZ2V0KCJrbiJfcykgPT0gInRydWUiOworICAgIG1fbnVt
ZXJpYyA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpLbildID09ICJ0cnVlIl9zOwogCi0gICAgY29uc3QgU3RyaW5nJiBjYXNl
Rmlyc3RTdHJpbmcgPSByZXN1bHQuZ2V0KCJrZiJfcyk7CisgICAgY29uc3QgU3RyaW5nJiBjYXNl
Rmlyc3RTdHJpbmcgPSByZXNvbHZlZC5leHRlbnNpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihS
ZWxldmFudEV4dGVuc2lvbktleTo6S2YpXTsKICAgICBpZiAoY2FzZUZpcnN0U3RyaW5nID09ICJs
b3dlciIpCiAgICAgICAgIG1fY2FzZUZpcnN0ID0gQ2FzZUZpcnN0OjpMb3dlcjsKICAgICBlbHNl
IGlmIChjYXNlRmlyc3RTdHJpbmcgPT0gInVwcGVyIikKQEAgLTIzNiw3ICsyMzIsNyBAQCB2b2lk
IEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgbG9jYQogICAgICAgICAvLyBzZWFyY2hMb2NhbGVEYXRhIGZpbHRlcnMg
b3V0ICJjbyIgdW5pY29kZSBleHRlbnNpb24uIEhvd2V2ZXIsIHdlIG5lZWQgdG8gcGFzcyAiY28i
IHRvIElDVSB3aGVuIFVzYWdlOjpTZWFyY2ggaXMgc3BlY2lmaWVkLgogICAgICAgICAvLyBTbyB3
ZSBuZWVkIHRvIHBhc3MgImNvIiB1bmljb2RlIGV4dGVuc2lvbiB0aHJvdWdoIGxvY2FsZS4gU2lu
Y2UgdGhlIG90aGVyIHJlbGV2YW50IGV4dGVuc2lvbnMgYXJlIGhhbmRsZWQgdmlhIHVjb2xfc2V0
QXR0cmlidXRlLAogICAgICAgICAvLyB3ZSBjYW4ganVzdCB1c2UgZGF0YUxvY2FsZQotICAgICAg
ICBkYXRhTG9jYWxlV2l0aEV4dGVuc2lvbnMgPSBtYWtlU3RyaW5nKHJlc3VsdC5nZXQoImRhdGFM
b2NhbGUiX3MpLCAiLXUtY28tc2VhcmNoIikudXRmOCgpOworICAgICAgICBkYXRhTG9jYWxlV2l0
aEV4dGVuc2lvbnMgPSBtYWtlU3RyaW5nKHJlc29sdmVkLmRhdGFMb2NhbGUsICItdS1jby1zZWFy
Y2giKS51dGY4KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkYXRhTG9nTG5JZihJbnRs
Q29sbGF0b3JJbnRlcm5hbDo6dmVyYm9zZSwgImRhdGFMb2NhbGVXaXRoRXh0ZW5zaW9uczooIiwg
ZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zLCAiKSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3IuaAppbmRleCA2OWNiMzIzZTIxNGQwY2I1YmQ2YjczZDEzMDNl
OWYyNzQzZjIyZjYzLi5lNzQyMWFkZTY0NGZlZmI5OGFiMDg5ZDJiM2FlZDc1ZTA5OTk4MzRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaApAQCAtMjUs
NyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSAiSW50bE9iamVjdC5oIgogCiBzdHJ1Y3QgVUNvbGxhdG9yOwogCkBAIC02Nyw4ICs2Nyw4
IEBAIGNsYXNzIEludGxDb2xsYXRvciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IHNvcnRMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCk7Ci0gICAgc3RhdGljIFZlY3Rv
cjxTdHJpbmc+IHNlYXJjaExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90KTsKKyAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gc29ydExvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZh
bnRFeHRlbnNpb25LZXkpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KTsKIAogICAgIGVudW0gY2xh
c3MgVXNhZ2UgOiB1aW50OF90IHsgU29ydCwgU2VhcmNoIH07CiAgICAgZW51bSBjbGFzcyBTZW5z
aXRpdml0eSA6IHVpbnQ4X3QgeyBCYXNlLCBBY2NlbnQsIENhc2UsIFZhcmlhbnQgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
CmluZGV4IDFlNjljOGU3YzUxYWE4ZTg0N2QwMjMyY2Q4NzRmMDMyYTFjZDA0OGMuLjFmYjg1OGVh
MzcyNThiMTk5MDQ5ZTg2NTgzYjY5YzA4YTU3MzY3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtNDQsMTAgKzQ0
LDYgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5FQ01BU2NyaXB0VGltZSA9IC04LjY0RTE1Owog
Y29uc3QgQ2xhc3NJbmZvIEludGxEYXRlVGltZUZvcm1hdDo6c19pbmZvID0geyAiT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbnRs
RGF0ZVRpbWVGb3JtYXQpIH07CiAKIG5hbWVzcGFjZSBJbnRsRGF0ZVRpbWVGb3JtYXRJbnRlcm5h
bCB7Ci1jb25zdGV4cHIgY29uc3QgY2hhciogcmVsZXZhbnRFeHRlbnNpb25LZXlzWzNdID0geyAi
Y2EiLCAiaGMiLCAibnUiIH07Ci1jb25zdGV4cHIgc2l6ZV90IGNhbGVuZGFySW5kZXggPSAwOwot
Y29uc3RleHByIHNpemVfdCBob3VyQ3ljbGVJbmRleCA9IDE7Ci1jb25zdGV4cHIgc2l6ZV90IG51
bWJlcmluZ1N5c3RlbUluZGV4ID0gMjsKIH0KIAogdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OlVE
YXRlRm9ybWF0RGVsZXRlcjo6b3BlcmF0b3IoKShVRGF0ZUZvcm1hdCogZGF0ZUZvcm1hdCkgY29u
c3QKQEAgLTE2MywxMSArMTU5LDExIEBAIHN0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplVGltZVpv
bmVOYW1lKGNvbnN0IFN0cmluZyYgdGltZVpvbmVOYW1lKQogICAgIHJldHVybiBjYW5vbmljYWw7
CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25z
dCBTdHJpbmcmIGxvY2FsZSwgc2l6ZV90IGtleUluZGV4KQorVmVjdG9yPFN0cmluZz4gSW50bERh
dGVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4
dGVuc2lvbktleSByZWxldmFudEV4dGVuc2lvbktleSkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBr
ZXlMb2NhbGVEYXRhOwotICAgIHN3aXRjaCAoa2V5SW5kZXgpIHsKLSAgICBjYXNlIEludGxEYXRl
VGltZUZvcm1hdEludGVybmFsOjpjYWxlbmRhckluZGV4OiB7CisgICAgc3dpdGNoIChyZWxldmFu
dEV4dGVuc2lvbktleSkgeworICAgIGNhc2UgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhOiB7CiAg
ICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgICAgICBVRW51bWVy
YXRpb24qIGNhbGVuZGFycyA9IHVjYWxfZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZSgiY2FsZW5k
YXIiLCBsb2NhbGUudXRmOCgpLmRhdGEoKSwgZmFsc2UsICZzdGF0dXMpOwogICAgICAgICBBU1NF
UlQoVV9TVUNDRVNTKHN0YXR1cykpOwpAQCAtMTg4LDcgKzE4NCw3IEBAIFZlY3RvcjxTdHJpbmc+
IEludGxEYXRlVGltZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgc2l6
ZV90IGtleUluCiAgICAgICAgIHVlbnVtX2Nsb3NlKGNhbGVuZGFycyk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEludGxEYXRlVGltZUZvcm1hdEludGVybmFsOjpob3VyQ3ljbGVJ
bmRleDoKKyAgICBjYXNlIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYzoKICAgICAgICAgLy8gTnVs
bCBkZWZhdWx0IHNvIHdlIGtub3cgdG8gdXNlICdqJyBpbiBwYXR0ZXJuLgogICAgICAgICBrZXlM
b2NhbGVEYXRhLmFwcGVuZChTdHJpbmcoKSk7CiAgICAgICAgIGtleUxvY2FsZURhdGEuYXBwZW5k
KCJoMTEiX3MpOwpAQCAtMTk2LDcgKzE5Miw3IEBAIFZlY3RvcjxTdHJpbmc+IEludGxEYXRlVGlt
ZUZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgc2l6ZV90IGtleUluCiAg
ICAgICAgIGtleUxvY2FsZURhdGEuYXBwZW5kKCJoMjMiX3MpOwogICAgICAgICBrZXlMb2NhbGVE
YXRhLmFwcGVuZCgiaDI0Il9zKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRsRGF0ZVRp
bWVGb3JtYXRJbnRlcm5hbDo6bnVtYmVyaW5nU3lzdGVtSW5kZXg6CisgICAgY2FzZSBSZWxldmFu
dEV4dGVuc2lvbktleTo6TnU6CiAgICAgICAgIGtleUxvY2FsZURhdGEgPSBudW1iZXJpbmdTeXN0
ZW1zRm9yTG9jYWxlKGxvY2FsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC00
MTksNyArNDE1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGlt
ZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIEpTT2JqZWN0KiBvcHRp
b25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKGdsb2JhbE9iamVjdCwgb3JpZ2luYWxPcHRp
b25zKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0OworICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2Fs
ZU9wdGlvbnM7CiAKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBpbnRsT3B0aW9u
PExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+
bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxvb2t1cCB9LCB7
ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2NhbGVNYXRjaGVy
IG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBMb2NhbGVNYXRj
aGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpA
QCAtNDMxLDcgKzQyNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgICAgIHRo
cm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiY2FsZW5kYXIgaXMgbm90IGEgd2Vs
bC1mb3JtZWQgY2FsZW5kYXIgdmFsdWUiX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIG9wdC5hZGQoImNhIl9zLCBjYWxlbmRhcik7CisgICAgICAgIGxvY2FsZU9w
dGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYSldID0g
Y2FsZW5kYXI7CiAgICAgfQogCiAgICAgU3RyaW5nIG51bWJlcmluZ1N5c3RlbSA9IGludGxTdHJp
bmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1iZXJp
bmdTeXN0ZW0sIHsgfSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC00NDEsNyArNDM3LDcgQEAgdm9p
ZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJudW1iZXJpbmdTeXN0ZW0gaXMgbm90IGEgd2VsbC1mb3JtZWQgbnVtYmVy
aW5nIHN5c3RlbSB2YWx1ZSJfcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgb3B0LmFkZCgibnUiX3MsIG51bWJlcmluZ1N5c3RlbSk7CisgICAgICAgIGxvY2FsZU9w
dGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0g
bnVtYmVyaW5nU3lzdGVtOwogICAgIH0KIAogICAgIFRyaVN0YXRlIGhvdXIxMiA9IGludGxCb29s
ZWFuT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEy
KTsKQEAgLTQ1NCwyMCArNDUwLDIwIEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFs
aXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAg
Ly8gU2V0IGhvdXIxMiBoZXJlIHRvIHNpbXBsaWZ5IGhvdXIgbG9naWMgbGF0ZXIuCiAgICAgICAg
IGhvdXIxMiA9IHRyaVN0YXRlKGhvdXJDeWNsZSA9PSAiaDExIiB8fCBob3VyQ3ljbGUgPT0gImgx
MiIpOwogICAgICAgICBpZiAoIWhvdXJDeWNsZS5pc051bGwoKSkKLSAgICAgICAgICAgIG9wdC5h
ZGQoImhjIl9zLCBob3VyQ3ljbGUpOworICAgICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkhjKV0gPSBob3VyQ3ljbGU7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG9wdC5hZGQoImhjIl9zLCBTdHJpbmcoKSk7CisgICAgICAgIGxv
Y2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpI
YyldID0gU3RyaW5nKCk7CiAKICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwg
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgb3B0LCBJ
bnRsRGF0ZVRpbWVGb3JtYXRJbnRlcm5hbDo6cmVsZXZhbnRFeHRlbnNpb25LZXlzLCBXVEZfQVJS
QVlfTEVOR1RIKEludGxEYXRlVGltZUZvcm1hdEludGVybmFsOjpyZWxldmFudEV4dGVuc2lvbktl
eXMpLCBsb2NhbGVEYXRhKTsKKyAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9i
YWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNo
ZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4
dGVuc2lvbktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsK
IAotICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQuZ2V0KHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZS5z
dHJpbmcoKSk7CisgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9j
YWxlLmlzRW1wdHkoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgRGF0ZVRpbWVGb3JtYXQgZHVlIHRvIGludmFsaWQg
bG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2FsZW5kYXIgPSBy
ZXNvbHZlZC5nZXQoImNhIl9zKTsKKyAgICBtX2NhbGVuZGFyID0gcmVzb2x2ZWQuZXh0ZW5zaW9u
c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhKV07CiAgICAg
aWYgKG1fY2FsZW5kYXIgPT0gImdyZWdvcmlhbiIpCiAgICAgICAgIG1fY2FsZW5kYXIgPSAiZ3Jl
Z29yeSJfczsKICAgICBlbHNlIGlmIChtX2NhbGVuZGFyID09ICJpc2xhbWljYyIpCkBAIC00NzUs
OSArNDcxLDkgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZv
cm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIGVsc2UgaWYgKG1fY2FsZW5k
YXIgPT0gImV0aGlvYWEiKQogICAgICAgICBtX2NhbGVuZGFyID0gImV0aGlvcGljLWFtZXRlLWFs
ZW0iX3M7CiAKLSAgICBtX2hvdXJDeWNsZSA9IHJlc29sdmVkLmdldCgiaGMiX3MpOwotICAgIG1f
bnVtYmVyaW5nU3lzdGVtID0gcmVzb2x2ZWQuZ2V0KCJudSJfcyk7Ci0gICAgQ1N0cmluZyBkYXRh
TG9jYWxlV2l0aEV4dGVuc2lvbnMgPSBtYWtlU3RyaW5nKHJlc29sdmVkLmdldCgiZGF0YUxvY2Fs
ZSJfcyksICItdS1jYS0iLCBtX2NhbGVuZGFyLCAiLW51LSIsIG1fbnVtYmVyaW5nU3lzdGVtKS51
dGY4KCk7CisgICAgbV9ob3VyQ3ljbGUgPSByZXNvbHZlZC5leHRlbnNpb25zW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6SGMpXTsKKyAgICBtX251bWJlcmluZ1N5
c3RlbSA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpOdSldOworICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25z
ID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRhTG9jYWxlLCAiLXUtY2EtIiwgbV9jYWxlbmRhciwg
Ii1udS0iLCBtX251bWJlcmluZ1N5c3RlbSkudXRmOCgpOwogCiAgICAgSlNWYWx1ZSB0elZhbHVl
ID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCmluZGV4IDlkMjY3
MWM4OWMyNGEwNjI3NjNiZWNjY2NjODQ4MmRmMmM3NTc3ZWQuLmE5NzgwYWVmMTJlNDE1MjQwNTBl
M2IwZWYwOGYxOGIzMmVhYmEwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAj
aW5jbHVkZSA8dW5pY29kZS91ZGF0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjcsNyArNjcs
NyBAQCBjbGFzcyBJbnRsRGF0ZVRpbWVGb3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCk7CisgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpOwogCiAgICAgZW51bSBjbGFzcyBXZWVrZGF5IDogdWludDhfdCB7IE5vbmUsIE5hcnJvdywg
U2hvcnQsIExvbmcgfTsKICAgICBlbnVtIGNsYXNzIEVyYSA6IHVpbnQ4X3QgeyBOb25lLCBOYXJy
b3csIFNob3J0LCBMb25nIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCmluZGV4IGI2NDZkNTJkNWIzNTEyNDVhOTQyOWIwZmI5NTdi
OWQ4ZjUzM2QwZWUuLmY4YzYzZTc4NjhlOTM1MWY1NjkzNzdkMzVmMjQ1ZDA0Mjc5Y2ZlYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIElu
dGxOdW1iZXJGb3JtYXQ6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW50bE51bWJlckZvcm1hdCkgfTsKIAog
bmFtZXNwYWNlIEludGxOdW1iZXJGb3JtYXRJbnRlcm5hbCB7Ci1jb25zdGV4cHIgY29uc3QgY2hh
ciogcmVsZXZhbnRFeHRlbnNpb25LZXlzWzFdID0geyAibnUiIH07CiBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKQEAgLTg5LDEwICs4OCwxMCBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2JvdW5kRm9ybWF0KTsKIH0KIAotVmVj
dG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxv
Y2FsZSwgc2l6ZV90IGtleUluZGV4KQorVmVjdG9yPFN0cmluZz4gSW50bE51bWJlckZvcm1hdDo6
bG9jYWxlRGF0YShjb25zdCBTdHJpbmcmIGxvY2FsZSwgUmVsZXZhbnRFeHRlbnNpb25LZXkgcmVs
ZXZhbnRFeHRlbnNpb25LZXlzKQogewogICAgIC8vIDkuMSBJbnRlcm5hbCBzbG90cyBvZiBTZXJ2
aWNlIENvbnN0cnVjdG9ycyAmIDExLjIuMyBJbnRlcm5hbCBzbG90cyAoRUNNQS00MDIgMi4wKQot
ICAgIEFTU0VSVF9VTlVTRUQoa2V5SW5kZXgsICFrZXlJbmRleCk7IC8vIFRoZSBpbmRleCBvZiB0
aGUgZXh0ZW5zaW9uIGtleSAibnUiIGluIHJlbGV2YW50RXh0ZW5zaW9uS2V5cyBpcyAwLgorICAg
IEFTU0VSVF9VTlVTRUQocmVsZXZhbnRFeHRlbnNpb25LZXlzLCByZWxldmFudEV4dGVuc2lvbktl
eXMgPT0gUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KTsKICAgICByZXR1cm4gbnVtYmVyaW5nU3lz
dGVtc0ZvckxvY2FsZShsb2NhbGUpOwogfQogCkBAIC0xNzEsNyArMTcwLDcgQEAgdm9pZCBJbnRs
TnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmEKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKICAgICB9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CisgICAgUmVzb2x2
ZUxvY2FsZU9wdGlvbnMgbG9jYWxlT3B0aW9uczsKIAogICAgIExvY2FsZU1hdGNoZXIgbG9jYWxl
TWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywgTG9jYWxl
TWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0
IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3Qg
Zml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CkBAIC0xODMsMTkgKzE4MiwxOSBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYQogICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJudW1iZXJpbmdTeXN0ZW0gaXMgbm90IGEgd2VsbC1mb3JtZWQgbnVtYmVyaW5nIHN5c3RlbSB2
YWx1ZSJfcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgb3B0LmFk
ZCgibnUiX3MsIG51bWJlcmluZ1N5c3RlbSk7CisgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lz
dGVtOwogICAgIH0KIAogICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpOwotICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2FsZShn
bG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1h
dGNoZXIsIG9wdCwgSW50bE51bWJlckZvcm1hdEludGVybmFsOjpyZWxldmFudEV4dGVuc2lvbktl
eXMsIFdURl9BUlJBWV9MRU5HVEgoSW50bE51bWJlckZvcm1hdEludGVybmFsOjpyZWxldmFudEV4
dGVuc2lvbktleXMpLCBsb2NhbGVEYXRhKTsKKyAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxv
Y2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxv
Y2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0s
IGxvY2FsZURhdGEpOwogCi0gICAgbV9sb2NhbGUgPSByZXN1bHQuZ2V0KCJsb2NhbGUiX3MpOwor
ICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxl
ZCB0byBpbml0aWFsaXplIE51bWJlckZvcm1hdCBkdWUgdG8gaW52YWxpZCBsb2NhbGUiX3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXN1bHQu
Z2V0KCJudSJfcyk7CisgICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXNvbHZlZC5leHRlbnNpb25z
W3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXTsKIAogICAg
IG1fc3R5bGUgPSBpbnRsT3B0aW9uPFN0eWxlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPnN0eWxlLCB7IHsgImRlY2ltYWwiX3MsIFN0eWxlOjpEZWNpbWFsIH0sIHsg
InBlcmNlbnQiX3MsIFN0eWxlOjpQZXJjZW50IH0sIHsgImN1cnJlbmN5Il9zLCBTdHlsZTo6Q3Vy
cmVuY3kgfSB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwi
LCBvciBcImN1cnJlbmN5XCIiX3MsIFN0eWxlOjpEZWNpbWFsKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpAQCAtMjkyLDcgKzI5MSw3IEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIENT
dHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXN1bHQuZ2V0KCJk
YXRhTG9jYWxlIl9zKSwgIi11LW51LSIsIG1fbnVtYmVyaW5nU3lzdGVtKS51dGY4KCk7CisgICAg
Q1N0cmluZyBkYXRhTG9jYWxlV2l0aEV4dGVuc2lvbnMgPSBtYWtlU3RyaW5nKHJlc29sdmVkLmRh
dGFMb2NhbGUsICItdS1udS0iLCBtX251bWJlcmluZ1N5c3RlbSkudXRmOCgpOwogICAgIGRhdGFM
b2dMbklmKEludGxOdW1iZXJGb3JtYXRJbnRlcm5hbDo6dmVyYm9zZSwgImRhdGFMb2NhbGVXaXRo
RXh0ZW5zaW9uczooIiwgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zICwgIikiKTsKIAogICAgIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCmluZGV4IDQzMDRiMjJhOGM2YTUxMWY3NGUy
YmRjYjA1Mzg4ZDViNjViNzM0NzYuLjBkY2FiYjBjODQxNDFiMTQ3MzkxMDRiZDhmZTgzOWZkOTgx
NmMyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3Vu
dW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03MSw3ICs3MSw3IEBAIGNsYXNzIEludGxOdW1i
ZXJGb3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNv
bnN0IFN0cmluZyYsIHNpemVfdCk7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURh
dGEoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCiAgICAgZW51bSBjbGFz
cyBTdHlsZSA6IHVpbnQ4X3QgeyBEZWNpbWFsLCBQZXJjZW50LCBDdXJyZW5jeSB9OwogICAgIGVu
dW0gY2xhc3MgQ3VycmVuY3lEaXNwbGF5IDogdWludDhfdCB7IENvZGUsIFN5bWJvbCwgTmFtZSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCAw
ZTY4Nzk3YWZkNzdjOGZhNjJmNjQyMzMwNDE3YzdkZTkzODFhOGNlLi4wZDg0ZDQ5NDg1MDVhNGU2
ZWNhNjkyOWE5ZThkMzA3NjM4YTRkZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcApAQCAtNjI5LDcgKzYyOSwyMCBAQCBzdGF0aWMgdm9pZCB1bmlj
b2RlRXh0ZW5zaW9uU3ViVGFncyhjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgVmVjdG9yPFN0cmlu
Zz4mIHN1YgogICAgIHN1YnRhZ3MuYXBwZW5kKGV4dGVuc2lvbi5zdWJzdHJpbmcodmFsdWVTdGFy
dCwgZXh0ZW5zaW9uTGVuZ3RoIC0gdmFsdWVTdGFydCkpOwogfQogCi1IYXNoTWFwPFN0cmluZywg
U3RyaW5nPiByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIG9wdGlvbnMsIGNvbnN0IGNoYXIqIGNvbnN0IHJlbGV2YW50
RXh0ZW5zaW9uS2V5c1tdLCBzaXplX3QgcmVsZXZhbnRFeHRlbnNpb25LZXlDb3VudCwgVmVjdG9y
PFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBzaXplX3QpKQoraW5saW5lIEFT
Q0lJTGl0ZXJhbCByZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktl
eSBrZXkpCit7CisgICAgc3dpdGNoIChrZXkpIHsKKyNkZWZpbmUgSlNDX1JFVFVSTl9JTlRMX1JF
TEVWQU5UX0VYVEVOU0lPTl9LRVlTKGxvd2VyTmFtZSwgY2FwaXRhbGl6ZWROYW1lKSBcCisgICAg
Y2FzZSBSZWxldmFudEV4dGVuc2lvbktleTo6Y2FwaXRhbGl6ZWROYW1lOiBcCisgICAgICAgIHJl
dHVybiAjbG93ZXJOYW1lICIiX3M7CisgICAgSlNDX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tF
WVMoSlNDX1JFVFVSTl9JTlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlTKQorI3VuZGVmIEpTQ19S
RVRVUk5fSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK1Jlc29s
dmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBS
ZXNvbHZlTG9jYWxlT3B0aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2
YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgq
bG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAg
IC8vIFJlc29sdmVMb2NhbGUgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9w
dGlvbnMsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlCkBAIC02NDQsNTYgKzY1
Nyw1MyBAQCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZQogICAgIGlmICghbWF0Y2hlclJlc3VsdC5l
eHRlbnNpb24uaXNOdWxsKCkpCiAgICAgICAgIHVuaWNvZGVFeHRlbnNpb25TdWJUYWdzKG1hdGNo
ZXJSZXN1bHQuZXh0ZW5zaW9uLCBleHRlbnNpb25TdWJ0YWdzKTsKIAotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQuYWRkKCJkYXRhTG9jYWxlIl9zLCBmb3Vu
ZExvY2FsZSk7CisgICAgUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZWQ7CisgICAgcmVzb2x2ZWQuZGF0
YUxvY2FsZSA9IGZvdW5kTG9jYWxlOwogCiAgICAgU3RyaW5nIHN1cHBvcnRlZEV4dGVuc2lvbiA9
ICItdSJfczsKLSAgICBmb3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwgcmVsZXZh
bnRFeHRlbnNpb25LZXlDb3VudDsgKytrZXlJbmRleCkgewotICAgICAgICBjb25zdCBjaGFyKiBr
ZXkgPSByZWxldmFudEV4dGVuc2lvbktleXNba2V5SW5kZXhdOwotICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBrZXlMb2NhbGVEYXRhID0gbG9jYWxlRGF0YShmb3VuZExvY2FsZSwga2V5SW5kZXgpOwor
ICAgIGZvciAoUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5IDogcmVsZXZhbnRFeHRlbnNpb25LZXlz
KSB7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBrZXlTdHJpbmcgPSByZWxldmFudEV4dGVuc2lvbktl
eVN0cmluZyhrZXkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXlMb2NhbGVEYXRhID0gbG9j
YWxlRGF0YShmb3VuZExvY2FsZSwga2V5KTsKICAgICAgICAgQVNTRVJUKCFrZXlMb2NhbGVEYXRh
LmlzRW1wdHkoKSk7CiAKICAgICAgICAgU3RyaW5nIHZhbHVlID0ga2V5TG9jYWxlRGF0YVswXTsK
ICAgICAgICAgU3RyaW5nIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uOwogCiAgICAgICAgIGlm
ICghZXh0ZW5zaW9uU3VidGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBrZXlQ
b3MgPSBleHRlbnNpb25TdWJ0YWdzLmZpbmQoa2V5KTsKKyAgICAgICAgICAgIHNpemVfdCBrZXlQ
b3MgPSBleHRlbnNpb25TdWJ0YWdzLmZpbmQoa2V5U3RyaW5nKTsKICAgICAgICAgICAgIGlmIChr
ZXlQb3MgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UG9zICsgMSA8IGV4
dGVuc2lvblN1YnRhZ3Muc2l6ZSgpICYmIGV4dGVuc2lvblN1YnRhZ3Nba2V5UG9zICsgMV0ubGVu
Z3RoKCkgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVk
VmFsdWUgPSBleHRlbnNpb25TdWJ0YWdzW2tleVBvcyArIDFdOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoa2V5TG9jYWxlRGF0YS5jb250YWlucyhyZXF1ZXN0ZWRWYWx1ZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcmVxdWVzdGVkVmFsdWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9IG1ha2VTdHJpbmcoJy0nLCBrZXks
ICctJywgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9u
QWRkaXRpb24gPSBtYWtlU3RyaW5nKCctJywga2V5U3RyaW5nLCAnLScsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5TG9jYWxlRGF0
YS5jb250YWlucygidHJ1ZSJfcykpIHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAidHJ1
ZSJfczsKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24gPSBt
YWtlU3RyaW5nKCctJywga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5z
aW9uQWRkaXRpb24gPSBtYWtlU3RyaW5nKCctJywga2V5U3RyaW5nKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBvcHRpb25zLmZpbmQoa2V5KTsKLSAg
ICAgICAgaWYgKGl0ZXJhdG9yICE9IG9wdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgb3B0aW9uc1ZhbHVlID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoYXV0
byBvcHRpb25zVmFsdWUgPSBvcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXSkgewog
ICAgICAgICAgICAgLy8gVW5kZWZpbmVkIHNob3VsZCBub3QgZ2V0IGFkZGVkIHRvIHRoZSBvcHRp
b25zLCBpdCB3b24ndCBkaXNwbGFjZSB0aGUgZXh0ZW5zaW9uLgogICAgICAgICAgICAgLy8gTnVs
bCB3aWxsIHJlbW92ZSB0aGUgZXh0ZW5zaW9uLgotICAgICAgICAgICAgaWYgKChvcHRpb25zVmFs
dWUuaXNOdWxsKCkgfHwga2V5TG9jYWxlRGF0YS5jb250YWlucyhvcHRpb25zVmFsdWUpKSAmJiBv
cHRpb25zVmFsdWUgIT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbnNW
YWx1ZTsKKyAgICAgICAgICAgIGlmICgob3B0aW9uc1ZhbHVlLT5pc051bGwoKSB8fCBrZXlMb2Nh
bGVEYXRhLmNvbnRhaW5zKG9wdGlvbnNWYWx1ZS52YWx1ZSgpKSkgJiYgb3B0aW9uc1ZhbHVlLnZh
bHVlKCkgIT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbnNWYWx1ZS52
YWx1ZSgpOwogICAgICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gU3Ry
aW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFkZChrZXks
IHZhbHVlKTsKKyAgICAgICAgcmVzb2x2ZWQuZXh0ZW5zaW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oa2V5KV0gPSB2YWx1ZTsKICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uLmFwcGVuZChzdXBw
b3J0ZWRFeHRlbnNpb25BZGRpdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHN1cHBvcnRlZEV4dGVu
c2lvbi5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgU3RyaW5nIHByZUV4dGVuc2lvbiA9IGZvdW5k
TG9jYWxlLnN1YnN0cmluZygwLCBtYXRjaGVyUmVzdWx0LmV4dGVuc2lvbkluZGV4KTsKLSAgICAg
ICAgU3RyaW5nIHBvc3RFeHRlbnNpb24gPSBmb3VuZExvY2FsZS5zdWJzdHJpbmcobWF0Y2hlclJl
c3VsdC5leHRlbnNpb25JbmRleCk7Ci0gICAgICAgIGZvdW5kTG9jYWxlID0gcHJlRXh0ZW5zaW9u
ICsgc3VwcG9ydGVkRXh0ZW5zaW9uICsgcG9zdEV4dGVuc2lvbjsKKyAgICAgICAgU3RyaW5nVmll
dyBmb3VuZExvY2FsZVZpZXcoZm91bmRMb2NhbGUpOworICAgICAgICBmb3VuZExvY2FsZSA9IG1h
a2VTdHJpbmcoZm91bmRMb2NhbGVWaWV3LnN1YnN0cmluZygwLCBtYXRjaGVyUmVzdWx0LmV4dGVu
c2lvbkluZGV4KSwgc3VwcG9ydGVkRXh0ZW5zaW9uLCBmb3VuZExvY2FsZVZpZXcuc3Vic3RyaW5n
KG1hdGNoZXJSZXN1bHQuZXh0ZW5zaW9uSW5kZXgpKTsKICAgICB9CiAKLSAgICByZXN1bHQuYWRk
KCJsb2NhbGUiX3MsIGZvdW5kTG9jYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc29s
dmVkLmxvY2FsZSA9IFdURk1vdmUoZm91bmRMb2NhbGUpOworICAgIHJldHVybiByZXNvbHZlZDsK
IH0KIAogc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCA4ZTg2ZjYzMjQzNTIxNjgyODEzNmI3
NDY5OTljMTIyYzk3OGQyNjUyLi4zYzI0NzNiNmJmMzZhNDU3MGNmNTFjMjlkZmY2YmU3YWZhYjRm
YTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC0z
OSw2ICszOSwyMyBAQCBlbnVtIGNsYXNzIExvY2FsZU1hdGNoZXIgOiB1aW50OF90IHsKICAgICBC
ZXN0Rml0LAogfTsKIAorI2RlZmluZSBKU0NfSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUyht
YWNybykgXAorICAgIG1hY3JvKGNhLCBDYSkgLyogY2FsZW5kYXIgKi8gXAorICAgIG1hY3JvKGNv
LCBDbykgLyogY29sbGF0aW9uICovIFwKKyAgICBtYWNybyhoYywgSGMpIC8qIGhvdXItY3ljbGUg
Ki8gXAorICAgIG1hY3JvKGtmLCBLZikgLyogY2FzZS1maXJzdCAqLyBcCisgICAgbWFjcm8oa24s
IEtuKSAvKiBudW1lcmljICovIFwKKyAgICBtYWNybyhudSwgTnUpIC8qIG51bWJlcmluZy1zeXN0
ZW0gKi8gXAorCitlbnVtIGNsYXNzIFJlbGV2YW50RXh0ZW5zaW9uS2V5IDogdWludDhfdCB7Cisj
ZGVmaW5lIEpTQ19ERUNMQVJFX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMobG93ZXJOYW1l
LCBjYXBpdGFsaXplZE5hbWUpIGNhcGl0YWxpemVkTmFtZSwKK0pTQ19JTlRMX1JFTEVWQU5UX0VY
VEVOU0lPTl9LRVlTKEpTQ19ERUNMQVJFX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMpCisj
dW5kZWYgSlNDX0RFQ0xBUkVfSU5UTF9SRUxFVkFOVF9FWFRFTlNJT05fS0VZUworfTsKKyNkZWZp
bmUgSlNDX0NPVU5UX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMobG93ZXJOYW1lLCBjYXBp
dGFsaXplZE5hbWUpICsgMQorc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlJlbGV2
YW50RXh0ZW5zaW9uS2V5cyA9IDAgSlNDX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMoSlND
X0NPVU5UX0lOVExfUkVMRVZBTlRfRVhURU5TSU9OX0tFWVMpOworI3VuZGVmIEpTQ19DT1VOVF9J
TlRMX1JFTEVWQU5UX0VYVEVOU0lPTl9LRVlTCisKIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7CkBAIC03Niw3ICs5MywxNiBAQCB1bnNpZ25lZCBpbnRsRGVmYXVsdE51bWJl
ck9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgdW5zaWduZQog
VmVjdG9yPGNoYXIsIDMyPiBsb2NhbGVJREJ1ZmZlckZvckxhbmd1YWdlVGFnKGNvbnN0IENTdHJp
bmcmKTsKIFN0cmluZyBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqLCBib29sIGlz
SW1tb3J0YWwgPSBmYWxzZSk7CiBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzKTsKLUhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
LCBMb2NhbGVNYXRjaGVyLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9ucywg
Y29uc3QgY2hhciogY29uc3QgcmVsZXZhbnRFeHRlbnNpb25LZXlzW10sIHNpemVfdCByZWxldmFu
dEV4dGVuc2lvbktleUNvdW50LCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0
cmluZyYsIHNpemVfdCkpOworCit1c2luZyBSZXNvbHZlTG9jYWxlT3B0aW9ucyA9IHN0ZDo6YXJy
YXk8T3B0aW9uYWw8U3RyaW5nPiwgbnVtYmVyT2ZSZWxldmFudEV4dGVuc2lvbktleXM+OwordXNp
bmcgUmVsZXZhbnRFeHRlbnNpb25zID0gc3RkOjphcnJheTxTdHJpbmcsIG51bWJlck9mUmVsZXZh
bnRFeHRlbnNpb25LZXlzPjsKK3N0cnVjdCBSZXNvbHZlZExvY2FsZSB7CisgICAgU3RyaW5nIGxv
Y2FsZTsKKyAgICBTdHJpbmcgZGF0YUxvY2FsZTsKKyAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0
ZW5zaW9uczsKK307CisKK1Jlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZl
TG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktl
eT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNv
bnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CiBKU1ZhbHVlIHN1cHBvcnRlZExv
Y2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9w
dGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBsb2NhbGUpOwogU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcApp
bmRleCAyZDU3ZTY4ZmY2OWQwZTA5Y2NiYzFmNzBhOGU0NTE2Yjg0NmMyZGQ4Li42ODRjYmQ3YmNk
MTc5NTI4YWViODJhNTMxOTVhYWEyNzc5Y2IzYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsUGx1cmFsUnVsZXM6OmxvY2FsZURhdGEoY29uc3Qg
U3RyaW5nJiwgc2l6ZV90KQorVmVjdG9yPFN0cmluZz4gSW50bFBsdXJhbFJ1bGVzOjpsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KQogewogICAgIHJldHVybiB7
IH07CiB9CkBAIC0xMDgsMTMgKzEwOCwxMyBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6aW5pdGlh
bGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdQogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIAotICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxvY2FsZU9wdDsKKyAgICBSZXNvbHZlTG9jYWxlT3B0aW9u
cyBsb2NhbGVPcHRpb25zOwogICAgIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxP
cHRpb248TG9jYWxlTWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGVNYXRjaGVyLCB7IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3Vw
IH0sIHsgImJlc3QgZml0Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1h
dGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2Fs
ZU1hdGNoZXI6OkJlc3RGaXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
UGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxl
cywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0LCBudWxscHRyLCAw
LCBsb2NhbGVEYXRhKTsKLSAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGUuc3RyaW5nKCkpOworICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxl
KGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxl
TWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKKyAgICBtX2xvY2FsZSA9
IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CiAgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6
ZSBQbHVyYWxSdWxlcyBkdWUgdG8gaW52YWxpZCBsb2NhbGUiX3MpOwogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCmlu
ZGV4IGIwMTVmZTgyYTBlNjkzYTBjYmQwODJiMjIwZjI1NWQ4MmFlNzRiNzEuLmE5ZGY5OWI0M2U4
OTU3NjY1YzU1NjcyMGEwNTYyMTFjOTQ2MjFkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0Lmgi
CiAjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91cGx1cmFscnVs
ZXMuaD4KIApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBJbnRsUGx1cmFsUnVsZXMgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVf
dCk7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwg
UmVsZXZhbnRFeHRlbnNpb25LZXkpOwogCiAgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7IENh
cmRpbmFsLCBPcmRpbmFsIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggMTFjMzQwMTJjMzlkOWEw
NWJjMDA2OGYzNTA0ZGIzOGJkZjQ1MDFlZS4uOTdkNWQ3MWVlMjk1MDIxMjg0ZjE0YzEyOTA4ZGM4
NGM2OTY2ZWE0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjb25zdCBDbGFzc0luZm8gSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6c19pbmZvID0g
eyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShJbnRsUmVsYXRpdmVUaW1lRm9ybWF0KSB9OwogCiBuYW1lc3BhY2UgSW50bFJlbGF0
aXZlVGltZUZvcm1hdEludGVybmFsIHsKLWNvbnN0ZXhwciBjb25zdCBjaGFyKiByZWxldmFudEV4
dGVuc2lvbktleXNbMV0gPSB7ICJudSIgfTsKIH0KIAogdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9y
bWF0OjpVUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlckRlbGV0ZXI6Om9wZXJhdG9yKCkoVVJlbGF0
aXZlRGF0ZVRpbWVGb3JtYXR0ZXIqIHJlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIpIGNvbnN0CkBA
IC04MywxMCArODIsOSBAQCB2b2lkIEludGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBzaXplX3Qg
a2V5SW5kZXgpCitWZWN0b3I8U3RyaW5nPiBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojpsb2NhbGVE
YXRhKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBSZWxldmFudEV4dGVuc2lvbktleSByZWxldmFudEV4
dGVuc2lvbktleSkKIHsKLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGV4dGVuc2lvbiBrZXkgIm51
IiBpbiByZWxldmFudEV4dGVuc2lvbktleXMgaXMgMC4KLSAgICBBU1NFUlRfVU5VU0VEKGtleUlu
ZGV4LCAha2V5SW5kZXgpOworICAgIEFTU0VSVF9VTlVTRUQocmVsZXZhbnRFeHRlbnNpb25LZXks
IHJlbGV2YW50RXh0ZW5zaW9uS2V5ID09IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSk7CiAgICAg
cmV0dXJuIG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUobG9jYWxlKTsKIH0KIApAQCAtMTA3LDcg
KzEwNSw3IEBAIHZvaWQgSW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZl
VGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gb3B0OworICAgIFJlc29sdmVMb2NhbGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CiAgICAgTG9j
YWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVyPihnbG9i
YWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgeyAi
bG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3MsIExvY2Fs
ZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxv
b2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIApAQCAtMTE4LDE5ICsxMTYsMTkg
QEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVsYXRpdmVUaW1lRm9y
bWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAibnVtYmVyaW5nU3lzdGVtIGlzIG5vdCBhIHdlbGwtZm9ybWVk
IG51bWJlcmluZyBzeXN0ZW0gdmFsdWUiX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIG9wdC5hZGQoIm51Il9zLCBudW1iZXJpbmdTeXN0ZW0pOworICAgICAgICBs
b2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6
TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKICAgICBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVkID0gcmVzb2x2ZUxv
Y2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxv
Y2FsZU1hdGNoZXIsIG9wdCwgSW50bFJlbGF0aXZlVGltZUZvcm1hdEludGVybmFsOjpyZWxldmFu
dEV4dGVuc2lvbktleXMsIFdURl9BUlJBWV9MRU5HVEgoSW50bFJlbGF0aXZlVGltZUZvcm1hdElu
dGVybmFsOjpyZWxldmFudEV4dGVuc2lvbktleXMpLCBsb2NhbGVEYXRhKTsKLSAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmdldCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUuc3RyaW5nKCkpOworICAg
IGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBS
ZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CisgICAgbV9sb2NhbGUgPSBy
ZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewogICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxpemUg
UmVsYXRpdmVUaW1lRm9ybWF0IGR1ZSB0byBpbnZhbGlkIGxvY2FsZSJfcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmdldCgibnUi
X3MpOwotICAgIENTdHJpbmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhy
ZXNvbHZlZC5nZXQoImRhdGFMb2NhbGUiX3MpLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0p
LnV0ZjgoKTsKKyAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVkLmV4dGVuc2lvbnNbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldOworICAgIENTdHJp
bmcgZGF0YUxvY2FsZVdpdGhFeHRlbnNpb25zID0gbWFrZVN0cmluZyhyZXNvbHZlZC5kYXRhTG9j
YWxlLCAiLXUtbnUtIiwgbV9udW1iZXJpbmdTeXN0ZW0pLnV0ZjgoKTsKIAogICAgIG1fc3R5bGUg
PSBpbnRsT3B0aW9uPFN0eWxlPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFt
ZXMtPnN0eWxlLCB7IHsgImxvbmciX3MsIFN0eWxlOjpMb25nIH0sIHsgInNob3J0Il9zLCBTdHls
ZTo6U2hvcnQgfSwgeyAibmFycm93Il9zLCBTdHlsZTo6TmFycm93IH0gfSwgInN0eWxlIG11c3Qg
YmUgZWl0aGVyIFwibG9uZ1wiLCBcInNob3J0XCIsIG9yIFwibmFycm93XCIiX3MsIFN0eWxlOjpM
b25nKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5o
CmluZGV4IDg1YjgxZmE4MzhkMzVlZjMzZWU5YzBhZTZhNTAyNzBkMTZmODU1ZGEuLjE1MTBhNGZh
YjU4OTU4MDFkYzg3ZmE2NzM2NjQ3OGYyOGNiYTY5YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmgKQEAgLTYyLDcg
KzYyLDcgQEAgY2xhc3MgSW50bFJlbGF0aXZlVGltZUZvcm1hdCBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3RyaW5nJiwgc2l6ZV90KTsKKyAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gbG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4
dGVuc2lvbktleSk7CiAKICAgICBTdHJpbmcgZm9ybWF0SW50ZXJuYWwoSlNHbG9iYWxPYmplY3Qq
LCBkb3VibGUsIFN0cmluZ1ZpZXcgdW5pdCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="419926"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>