<?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>216061</bug_id>
          
          <creation_ts>2020-09-01 18:34:41 -0700</creation_ts>
          <short_desc>[JSC] Cache toString / valueOf / @@toPrimitive for major cases</short_desc>
          <delta_ts>2020-09-07 22:22:25 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216262</see_also>
          <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>
          
          <blocked>216222</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1684688</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-01 18:34:41 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684689</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-01 18:34:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/68179682&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684732</commentid>
    <comment_count>2</comment_count>
      <attachid>407743</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-01 23:48:38 -0700</bug_when>
    <thetext>Created attachment 407743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684739</commentid>
    <comment_count>3</comment_count>
      <attachid>407746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 00:28:49 -0700</bug_when>
    <thetext>Created attachment 407746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684740</commentid>
    <comment_count>4</comment_count>
      <attachid>407747</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 00:38:46 -0700</bug_when>
    <thetext>Created attachment 407747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684982</commentid>
    <comment_count>5</comment_count>
      <attachid>407811</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 14:16:53 -0700</bug_when>
    <thetext>Created attachment 407811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685003</commentid>
    <comment_count>6</comment_count>
      <attachid>407811</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 14:33:24 -0700</bug_when>
    <thetext>Comment on attachment 407811
Patch

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

&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:117
&gt; +    macro(ObjectToStringAdaptiveStructure, CachedSpecialPropertyAdaptiveStructureWatchpoint)

Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685021</commentid>
    <comment_count>7</comment_count>
      <attachid>407811</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-02 15:14:01 -0700</bug_when>
    <thetext>Comment on attachment 407811
Patch

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

Nice. r=me

&gt; Source/JavaScriptCore/runtime/CachedSpecialPropertyAdaptiveStructureWatchpoint.h:2
&gt; + * Copyright (C) 2019 Apple Inc. All rights reserved.

2020

&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:112
&gt; +    WTF::storeStoreFence(); // Store to the field of this struct should be visible to the concurrent collectors after struct is visible.

from what I said on slack, I don&apos;t think this is needed, but double check

&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:184
&gt; +            cache.m_presentWatchpoint = makeUnique&lt;CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint&gt;(equivCondition, this);

let&apos;s call &quot;m_presentWatchpoint&quot; m_equivalenceWatchpoint or something similar

&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:219
&gt; +                    continue;

continue isn&apos;t needed. Did you mean break so we continue the outer loop?

&gt; Source/JavaScriptCore/runtime/StructureRareDataInlines.h:39
&gt; +    Bag&lt;CachedSpecialPropertyAdaptiveStructureWatchpoint&gt; m_missWatchpoints;
&gt; +    std::unique_ptr&lt;CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint&gt; m_presentWatchpoint;

maybe in the future we can use ObjectPropertyConditionSet? Or is this just to save memory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685022</commentid>
    <comment_count>8</comment_count>
      <attachid>407811</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-02 15:14:46 -0700</bug_when>
    <thetext>Comment on attachment 407811
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/CachedSpecialPropertyAdaptiveStructureWatchpoint.h:2
&gt;&gt; + * Copyright (C) 2019 Apple Inc. All rights reserved.
&gt; 
&gt; 2020

I see you renamed this. Maybe 2019-2020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685085</commentid>
    <comment_count>9</comment_count>
      <attachid>407811</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 18:04:30 -0700</bug_when>
    <thetext>Comment on attachment 407811
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:117
&gt;&gt; +    macro(ObjectToStringAdaptiveStructure, CachedSpecialPropertyAdaptiveStructureWatchpoint)
&gt; 
&gt; Will change.

Fixed.

&gt;&gt;&gt; Source/JavaScriptCore/runtime/CachedSpecialPropertyAdaptiveStructureWatchpoint.h:2
&gt;&gt;&gt; + * Copyright (C) 2019 Apple Inc. All rights reserved.
&gt;&gt; 
&gt;&gt; 2020
&gt; 
&gt; I see you renamed this. Maybe 2019-2020

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:112
&gt;&gt; +    WTF::storeStoreFence(); // Store to the field of this struct should be visible to the concurrent collectors after struct is visible.
&gt; 
&gt; from what I said on slack, I don&apos;t think this is needed, but double check

Yeah, agree. Removed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:184
&gt;&gt; +            cache.m_presentWatchpoint = makeUnique&lt;CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint&gt;(equivCondition, this);
&gt; 
&gt; let&apos;s call &quot;m_presentWatchpoint&quot; m_equivalenceWatchpoint or something similar

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureRareData.cpp:219
&gt;&gt; +                    continue;
&gt; 
&gt; continue isn&apos;t needed. Did you mean break so we continue the outer loop?

Oops! Right. To simply, I&apos;ll extract this as clearCacheIfInvalidated lambda, and return instead of continue.

&gt;&gt; Source/JavaScriptCore/runtime/StructureRareDataInlines.h:39
&gt;&gt; +    std::unique_ptr&lt;CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint&gt; m_presentWatchpoint;
&gt; 
&gt; maybe in the future we can use ObjectPropertyConditionSet? Or is this just to save memory?

Sounds good. I&apos;ll file a bug and paste a FIXME here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685097</commentid>
    <comment_count>10</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 18:26:30 -0700</bug_when>
    <thetext>Created attachment 407845
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685159</commentid>
    <comment_count>11</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 21:27:41 -0700</bug_when>
    <thetext>Comment on attachment 407845
Patch

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

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:-2208
&gt; -    // Make sure that whatever default value methods there are on object&apos;s prototype chain are
&gt; -    // being watched.
&gt; -    for (const JSObject* object = this; object; object = object-&gt;structure(vm)-&gt;storedPrototypeObject(object))
&gt; -        object-&gt;structure(vm)-&gt;startWatchingInternalPropertiesIfNecessary(vm);
&gt; -

I revert this for now. The reason is the following,

1. DFG Graph::canOptimizeStringObjectAccess is checking both valueOf and toString status
2. However, in the normal path, valueOf of StringObject is rarely accessed (toString suceeeds, and we do not access to valueOf).
3. As a result, valueOf related structures are not watched at all. So in DFG, DFG Graph::canOptimizeStringObjectAccess failed.

This affects on JetStream2/date-format-xparb-SP. For now, I&apos;ll keep this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685163</commentid>
    <comment_count>12</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 21:34:46 -0700</bug_when>
    <thetext>Comment on attachment 407845
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:-2208
&gt;&gt; -
&gt; 
&gt; I revert this for now. The reason is the following,
&gt; 
&gt; 1. DFG Graph::canOptimizeStringObjectAccess is checking both valueOf and toString status
&gt; 2. However, in the normal path, valueOf of StringObject is rarely accessed (toString suceeeds, and we do not access to valueOf).
&gt; 3. As a result, valueOf related structures are not watched at all. So in DFG, DFG Graph::canOptimizeStringObjectAccess failed.
&gt; 
&gt; This affects on JetStream2/date-format-xparb-SP. For now, I&apos;ll keep this.

Ah, no. Yeah, since this is not invoked from IC, basically, without this, we do not put watchpoints. So, as a result, PropertyCondition::isWatchableWhenValid for Equavalent will fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685166</commentid>
    <comment_count>13</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 21:37:30 -0700</bug_when>
    <thetext>Comment on attachment 407845
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:-2208
&gt;&gt;&gt; -
&gt;&gt; 
&gt;&gt; I revert this for now. The reason is the following,
&gt;&gt; 
&gt;&gt; 1. DFG Graph::canOptimizeStringObjectAccess is checking both valueOf and toString status
&gt;&gt; 2. However, in the normal path, valueOf of StringObject is rarely accessed (toString suceeeds, and we do not access to valueOf).
&gt;&gt; 3. As a result, valueOf related structures are not watched at all. So in DFG, DFG Graph::canOptimizeStringObjectAccess failed.
&gt;&gt; 
&gt;&gt; This affects on JetStream2/date-format-xparb-SP. For now, I&apos;ll keep this.
&gt; 
&gt; Ah, no. Yeah, since this is not invoked from IC, basically, without this, we do not put watchpoints. So, as a result, PropertyCondition::isWatchableWhenValid for Equavalent will fail.

And in this path, we will put this watchpoint for toString, but not for valueOf since we are not accessing it at runtime actually. Then, Graph::canOptimizeStringObjectAccess almost always fail.
We should do in the meantime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685168</commentid>
    <comment_count>14</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 21:39:09 -0700</bug_when>
    <thetext>Comment on attachment 407845
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:-2208
&gt;&gt;&gt;&gt; -
&gt;&gt;&gt; 
&gt;&gt;&gt; I revert this for now. The reason is the following,
&gt;&gt;&gt; 
&gt;&gt;&gt; 1. DFG Graph::canOptimizeStringObjectAccess is checking both valueOf and toString status
&gt;&gt;&gt; 2. However, in the normal path, valueOf of StringObject is rarely accessed (toString suceeeds, and we do not access to valueOf).
&gt;&gt;&gt; 3. As a result, valueOf related structures are not watched at all. So in DFG, DFG Graph::canOptimizeStringObjectAccess failed.
&gt;&gt;&gt; 
&gt;&gt;&gt; This affects on JetStream2/date-format-xparb-SP. For now, I&apos;ll keep this.
&gt;&gt; 
&gt;&gt; Ah, no. Yeah, since this is not invoked from IC, basically, without this, we do not put watchpoints. So, as a result, PropertyCondition::isWatchableWhenValid for Equavalent will fail.
&gt; 
&gt; And in this path, we will put this watchpoint for toString, but not for valueOf since we are not accessing it at runtime actually. Then, Graph::canOptimizeStringObjectAccess almost always fail.
&gt; We should do in the meantime.

Ideally, DFG should not check toString &amp; valueOf. DFG should check either of that by checking the context. And after that, we can safely remove it since our new code already puts watchpoints appropriately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685172</commentid>
    <comment_count>15</comment_count>
      <attachid>407845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 21:52:52 -0700</bug_when>
    <thetext>Comment on attachment 407845
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:-2208
&gt;&gt;&gt;&gt;&gt; -
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I revert this for now. The reason is the following,
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; 1. DFG Graph::canOptimizeStringObjectAccess is checking both valueOf and toString status
&gt;&gt;&gt;&gt; 2. However, in the normal path, valueOf of StringObject is rarely accessed (toString suceeeds, and we do not access to valueOf).
&gt;&gt;&gt;&gt; 3. As a result, valueOf related structures are not watched at all. So in DFG, DFG Graph::canOptimizeStringObjectAccess failed.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This affects on JetStream2/date-format-xparb-SP. For now, I&apos;ll keep this.
&gt;&gt;&gt; 
&gt;&gt;&gt; Ah, no. Yeah, since this is not invoked from IC, basically, without this, we do not put watchpoints. So, as a result, PropertyCondition::isWatchableWhenValid for Equavalent will fail.
&gt;&gt; 
&gt;&gt; And in this path, we will put this watchpoint for toString, but not for valueOf since we are not accessing it at runtime actually. Then, Graph::canOptimizeStringObjectAccess almost always fail.
&gt;&gt; We should do in the meantime.
&gt; 
&gt; Ideally, DFG should not check toString &amp; valueOf. DFG should check either of that by checking the context. And after that, we can safely remove it since our new code already puts watchpoints appropriately.

Filed https://bugs.webkit.org/show_bug.cgi?id=216117
Maybe, I&apos;ll do that for StringObject first since it is super simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685190</commentid>
    <comment_count>16</comment_count>
      <attachid>407871</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-02 22:52:43 -0700</bug_when>
    <thetext>Created attachment 407871
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685524</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-03 18:03:46 -0700</bug_when>
    <thetext>Committed r266567: &lt;https://trac.webkit.org/changeset/266567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686117</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-05 14:17:21 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #17)
&gt; Committed r266567: &lt;https://trac.webkit.org/changeset/266567&gt;

JSTests/test262/test/language/expressions/dynamic-import/custom-primitive.js started to fail: https://build.webkit.org/builders/Apple-Catalina-Debug-Test262-Tests/builds/7201.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686173</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-05 23:54:08 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #18)
&gt; (In reply to Yusuke Suzuki from comment #17)
&gt; &gt; Committed r266567: &lt;https://trac.webkit.org/changeset/266567&gt;
&gt; 
&gt; JSTests/test262/test/language/expressions/dynamic-import/custom-primitive.js
&gt; started to fail:
&gt; https://build.webkit.org/builders/Apple-Catalina-Debug-Test262-Tests/builds/
&gt; 7201.

Will be fixed in https://bugs.webkit.org/show_bug.cgi?id=216222</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407743</attachid>
            <date>2020-09-01 23:48:38 -0700</date>
            <delta_ts>2020-09-02 00:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200901234837.patch</filename>
            <type>text/plain</type>
            <size>36743</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NGE4MThkNDRiNjM5OTA3NGM4Y2I5MTU5ZWRkZWEyOTI2N2U1MDc5Li45NGI1ZGQ4NjdjMWQ3MWFl
ZjllYTQ0N2ZjN2NjNmVkNzBhNWQ1YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMC0wOS0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4MTc5NjgyPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFycmF5VG9T
dHJpbmdXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om9iamVj
dFByb3RvVG9TdHJpbmdGdW5jdGlvbiBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OmNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlT2JqZWN0VG9TdHJpbmdD
YWNoZVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25PYmpl
Y3RUb1N0cmluZ0NhY2hlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldE9i
amVjdFRvU3RyaW5nVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6
OmNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVE
YXRhOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6Ok9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVSYXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVl
KToKKwogMjAyMC0wOC0zMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHNvbWUgUHRyVGFnIGRlYnVnZ2luZyBjb2RlIGZyb20gcmVsZWFzZSBidWlsZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
aW5kZXggZWI1YzJjMDBkZWUwMDc2M2M2MTVlYzE4ZjhjNGY1YjJhNmEyYzIwNi4uNTI3NmVhZTQ1
YTAyMzNmODZkNDhiMDRjZjEwNGI0OWY2YmZhM2I1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNDgwLDYgKzQ4MCw3IEBAIEpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBHbG9iYWxPYmplY3RNCiAgICAgLCBtX3NldEFkZFdhdGNocG9pbnRTZXQoSXNXYXRj
aGVkKQogICAgICwgbV9hcnJheVNwZWNpZXNXYXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkK
ICAgICAsIG1fYXJyYXlKb2luV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCisgICAgLCBtX2FycmF5
VG9TdHJpbmdXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKICAgICAsIG1fbnVtYmVyVG9TdHJpbmdX
YXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKICAgICAsIG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1f
c3RhY2tUcmFjZUxpbWl0KE9wdGlvbnM6OmRlZmF1bHRFcnJvclN0YWNrVHJhY2VMaW1pdCgpKQpA
QCAtNjEwLDYgKzYxMSwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAg
ICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBo
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXModm0sIHRoaXMsICZjYWxsRnVuY3Rpb24sICZhcHBs
eUZ1bmN0aW9uLCAmaGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbik7CisgICAgbV9vYmplY3RQcm90
b1RvU3RyaW5nRnVuY3Rpb24uaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6
ZXI8SlNGdW5jdGlvbj4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246
OmNyZWF0ZShpbml0LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nLnN0cmluZygpLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgTm9JbnRyaW5zaWMpKTsK
KyAgICAgICAgfSk7CiAgICAgbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi5pbml0TGF0ZXIo
CiAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxKU0Z1bmN0aW9uPiYgaW5pdCkgewogICAg
ICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGluaXQub3duZXIs
IDAsIGluaXQudm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuc3RyaW5nKCksIGFycmF5UHJvdG9G
dW5jVG9TdHJpbmcsIE5vSW50cmluc2ljKSk7CkBAIC0xMzc0LDYgKzEzNzksMTEgQEAgY2FwaXRh
bE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVG
bGFnID8gY2FwaXRhbE5hbWUKICAgICAgICAgbV9hcnJheVByb3RvdHlwZUpvaW5XYXRjaHBvaW50
ID0gbWFrZVVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odGhpcywgY29uZGl0aW9uLCBtX2FycmF5Sm9pbldhdGNocG9pbnRT
ZXQpOwogICAgICAgICBtX2FycmF5UHJvdG90eXBlSm9pbldhdGNocG9pbnQtPmluc3RhbGwodm0p
OwogICAgIH0KKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlv
biA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KHRoaXMsIHRoaXMtPmFycmF5UHJvdG90eXBlKCks
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKTsKKyAgICAgICAgbV9hcnJheVByb3RvdHlwZVRv
U3RyaW5nV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHRoaXMsIGNvbmRpdGlvbiwgbV9hcnJh
eVRvU3RyaW5nV2F0Y2hwb2ludFNldCk7CisgICAgICAgIG1fYXJyYXlQcm90b3R5cGVUb1N0cmlu
Z1dhdGNocG9pbnQtPmluc3RhbGwodm0pOworICAgIH0KIAogICAgIHsKICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhp
cywgbWFwSXRlcmF0b3JQcm90b3R5cGUsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwpAQCAtMTg5
NSw2ICsxOTA1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgdGhpc09iamVjdC0+bV9wYXJzZUlu
dEZ1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fcGFyc2VGbG9hdEZ1
bmN0aW9uLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fb2JqZWN0UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYXJyYXlQcm90
b1RvU3RyaW5nRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9hcnJh
eVByb3RvVmFsdWVzRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9l
dmFsRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhNzU1YzMxMTA0ZDM4OGUyNTQ4N2NmNzRmMDE2
ZjEwNzY2YWUxM2I0Li40NjJjZDhjODFhYWM4ZDkxYzM5YmNhY2QzNzg5ZTQ5NDFmNDBmZWY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAg
LTMxMyw2ICszMTMsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0IHsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVu
Y3Rpb24+IG1fcGFyc2VJbnRGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIEpTRnVuY3Rpb24+IG1fcGFyc2VGbG9hdEZ1bmN0aW9uOwogCisgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX29iamVjdFByb3RvVG9TdHJpbmdGdW5jdGlv
bjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fYXJyYXlQ
cm90b1RvU3RyaW5nRnVuY3Rpb247CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBK
U0Z1bmN0aW9uPiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fZXZhbEZ1bmN0aW9uOwpAQCAtNDc0LDExICs0
NzUsMTMgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCB7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3NldEFkZFdhdGNocG9pbnRTZXQ7
CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5U3BlY2llc1dhdGNocG9pbnRTZXQ7CiAg
ICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5Sm9pbldhdGNocG9pbnRTZXQ7CisgICAgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX2FycmF5VG9TdHJpbmdXYXRjaHBvaW50U2V0OwogICAgIElubGlu
ZVdhdGNocG9pbnRTZXQgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdh
dGNocG9pbnRTZXQ+PiBtX2FycmF5Q29uc3RydWN0b3JTcGVjaWVzV2F0Y2hwb2ludDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVDb25zdHJ1Y3RvcldhdGNocG9pbnQ7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheVByb3RvdHlwZUpvaW5X
YXRjaHBvaW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheVByb3RvdHlwZVRvU3Ry
aW5nV2F0Y2hwb2ludDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJdGVyYXRvclBy
b3RvdHlwZU5leHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcFByb3RvdHlwZVN5bWJv
bEl0ZXJhdG9yV2F0Y2hwb2ludDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwSXRlcmF0
b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKQEAgLTUwMSw2ICs1MDQsNyBAQCBjbGFzcyBKU0ds
b2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBJbmxp
bmVXYXRjaHBvaW50U2V0JiBzZXRBZGRXYXRjaHBvaW50U2V0KCkgeyByZXR1cm4gbV9zZXRBZGRX
YXRjaHBvaW50U2V0OyB9CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYXJyYXlTcGVjaWVzV2F0
Y2hwb2ludFNldCgpIHsgcmV0dXJuIG1fYXJyYXlTcGVjaWVzV2F0Y2hwb2ludFNldDsgfQogICAg
IElubGluZVdhdGNocG9pbnRTZXQmIGFycmF5Sm9pbldhdGNocG9pbnRTZXQoKSB7IHJldHVybiBt
X2FycmF5Sm9pbldhdGNocG9pbnRTZXQ7IH0KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBhcnJh
eVRvU3RyaW5nV2F0Y2hwb2ludFNldCgpIHsgcmV0dXJuIG1fYXJyYXlUb1N0cmluZ1dhdGNocG9p
bnRTZXQ7IH0KICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBudW1iZXJUb1N0cmluZ1dhdGNocG9p
bnRTZXQoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlSklUKCkp
OwpAQCAtNjMzLDYgKzYzNyw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QgewogCiAgICAgSlNGdW5jdGlvbiogZXZhbEZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9ldmFsRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlv
biogdGhyb3dUeXBlRXJyb3JGdW5jdGlvbigpIGNvbnN0OworICAgIEpTRnVuY3Rpb24qIG9iamVj
dFByb3RvVG9TdHJpbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uLmdldCh0aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlv
bi5nZXQodGhpcyk7IH0KICAgICBKU0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXQodGhpcyk7IH0K
ICAgICBKU0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb25Db25jdXJyZW50bHkoKSBj
b25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXRDb25jdXJyZW50bHko
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IDUw
YWQwYTZiYmMwNGFiNmY0ZTYwM2Y2M2UzZGE3MmU4ZmUwOTJjNDYuLjM1NjY5ZmZmOTEwNjM0NWE3
YjYzMjViZjJmYTg2MWU4MmU0Y2E4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKQEAgLTIxNDQsMzMgKzIxNDQsNDQgQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICB9CiB9CiAKLWVudW0gY2xhc3MgVHlwZUhpbnRNb2RlIHsgVGFrZXNIaW50LCBE
b2VzTm90VGFrZUhpbnQgfTsKLQotdGVtcGxhdGU8VHlwZUhpbnRNb2RlIG1vZGUgPSBUeXBlSGlu
dE1vZGU6OkRvZXNOb3RUYWtlSGludD4KK3RlbXBsYXRlPFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkg
a2V5Pgogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaXRpdmVGdW5jdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGlzIHdoZW4gd2UgaGF2ZSBmaXhlZDogcmRhcjovL3Byb2JsZW0vMzM0NTE4NDAKLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTA5LgotICAgIGNv
bnN0ZXhwciBib29sIGRlYnVnTnVsbFN0cnVjdHVyZSA9IG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpU
YWtlc0hpbnQ7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihv
YmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJlPihnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2Nv
cGUuZXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBoYXNQcm9wZXJ0eSA/IHNs
b3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
aWYgKGZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6
OlRha2VzSGludCkKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5jYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldCk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUg
Zml4ZWQ6IHJkYXI6Ly9wcm9ibGVtLzMzNDUxODQwCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcxMDkuCisgICAgICAgIGNvbnN0ZXhwciBib29s
IGRlYnVnTnVsbFN0cnVjdHVyZSA9IGtleSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1By
aW1pdGl2ZTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3Qq
PihvYmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJlPihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBoYXNQcm9wZXJ0eSA/
IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQo
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUo
Z2xvYmFsT2JqZWN0LCB2bSwgZnVuY3Rpb24sIGtleSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB9CisgICAgaWYgKGZ1
bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisK
KyAgICBpZiBjb25zdGV4cHIgKGtleSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmlu
ZykgeworICAgICAgICBpZiAoZnVuY3Rpb24gPT0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b1Rv
U3RyaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKEpTU3RyaW5nKiByZXN1bHQgPSBv
YmplY3QtPnN0cnVjdHVyZSh2bSktPm9iamVjdFRvU3RyaW5nVmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCiAgICAgYXV0byBjYWxsRGF0
YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CiAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0g
Q2FsbERhdGE6OlR5cGU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gVHlwZUhpbnRNb2Rl
OjpUYWtlc0hpbnQpCisgICAgICAgIGlmIGNvbnN0ZXhwciAoa2V5ID09IFByb3BlcnR5QWNjZXNz
Q2FjaGVLZXk6OlRvUHJpbWl0aXZlKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlN5bWJvbC50b1ByaW1pdGl2ZSBpcyBub3QgYSBmdW5jdGlvbiwgdW5k
ZWZpbmVkLCBvciBudWxsIl9zKTsKICAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwog
ICAgIH0KIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxBcmdzOwotICAgIGlmIChtb2Rl
ID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KSB7CisgICAgaWYgY29uc3RleHByIChrZXkgPT0g
UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9QcmltaXRpdmUpIHsKICAgICAgICAgSlNTdHJpbmcq
IGhpbnRTdHJpbmcgPSBudWxscHRyOwogICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKICAgICAgICAg
Y2FzZSBOb1ByZWZlcmVuY2U6CkBAIC0yMTkwLDggKzIyMDEsMTEgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWMKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
biwgY2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFT
U0VSVCghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIGlmIChyZXN1bHQuaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpEb2VzTm90VGFrZUhpbnQg
PyBKU1ZhbHVlKCkgOiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3ltYm9s
LnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCJfcyk7CisgICAgaWYgKHJlc3VsdC5pc09i
amVjdCgpKSB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoa2V5ID09IFByb3BlcnR5QWNjZXNzQ2Fj
aGVLZXk6OlRvUHJpbWl0aXZlKQorICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9QcmltaXRpdmUgcmV0dXJuZWQgYW4gb2JqZWN0
Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMjIwMSwyNyArMjIxNSwyMiBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFy
eVRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByZWZlcnJlZFByaQog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3aGF0ZXZlciBkZWZh
dWx0IHZhbHVlIG1ldGhvZHMgdGhlcmUgYXJlIG9uIG9iamVjdCdzIHByb3RvdHlwZSBjaGFpbiBh
cmUKLSAgICAvLyBiZWluZyB3YXRjaGVkLgotICAgIGZvciAoY29uc3QgSlNPYmplY3QqIG9iamVj
dCA9IHRoaXM7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zdG9yZWRQ
cm90b3R5cGVPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5z
dGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwotCiAgICAgSlNW
YWx1ZSB2YWx1ZTsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcpIHsKLSAgICAgICAgdmFs
dWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRp
dmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0
LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEVYQ0VQ
VElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZh
bHVlLmFzQ2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVl
ID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VmFsdWVP
Zj4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsK
ICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhj
ZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9Q
cmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZh
bHVlT2YsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2VsbCgpKTsK
ICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB2
YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmcsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1p
dGl2ZUZ1bmN0aW9uPFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nPihnbG9iYWxPYmpl
Y3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0g
dmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7CkBAIC0yMjQyLDcgKzIyNTEsNyBAQCBKU1ZhbHVlIEpTT2JqZWN0Ojp0b1ByaW1pdGl2
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeQogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVu
Y3Rpb248VHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQ+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wsIHByZWZlcnJlZFR5cGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5
OjpUb1ByaW1pdGl2ZT4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1By
aW1pdGl2ZVN5bWJvbCwgcHJlZmVycmVkVHlwZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCmluZGV4
IDQxNzBkMjQ4M2Y1ZmM4MjBlNDllYzM1ZmE4MGEwM2IyMGQ4YTVhYjEuLmQzM2I4MWZiMjM3MzI2
MGY2YmExMjdiNzY5ZTY4MDAwYjFjNzk5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIE9i
amVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogICAgIAotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNU
b1N0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIDApOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZywgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24o
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnZh
bHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVy
dHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSGFzT3duUHJvcGVydHlJbnRyaW5zaWMp
OwpAQCAtMzUwLDcgKzM1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBKU1N0
cmluZyoganNSZXN1bHQgPSBqc1N0cmluZyhnbG9iYWxPYmplY3QsIHZtLnNtYWxsU3RyaW5ncy5v
YmplY3RTdHJpbmdTdGFydCgpLCBqc1RhZywgdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZygnXScpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAg
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFs
T2JqZWN0LCB2bSwganNSZXN1bHQsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2
bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFsT2JqZWN0LCB2bSwganNSZXN1bHQsIFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFnLCBzbG90KTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzUmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCmluZGV4IDAwOWVmNThkZjIxNjk0OGNjYTJiZWQ1ODY2
YWJkODgxODEzMjVkMzMuLmRjNjMzMzJhZTg3MjA4Y2Q3NjlkOWM4Y2I3MzVkODY2NzJiNTc0ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRvU3RyaW5n
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAK
QEAgLTU3LDcgKzU3LDE5IEBAIHZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVECiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5n
VmFsdWUoKTsKKyAgICBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSA9IFByb3BlcnR5QWNjZXNz
Q2FjaGVLZXk6OlRvU3RyaW5nVGFnOworICAgIGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFnOworICAgIGVsc2UgaWYgKG1fa2V5LnVpZCgpID09
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkKKyAgICAgICAga2V5ID0gUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleTo6VG9TdHJpbmc7CisgICAgZWxzZSBpZiAobV9rZXkudWlkKCkgPT0g
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2tl
eS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbC5pbXBsKCkpOwor
ICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2ZTsKKyAgICB9
CisKKyAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoa2V5
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCmluZGV4IDM4OTlkMTZmYmI3MWYxM2ZmMDRhM2FhY2NmN2JiNDM1YTI3MzZl
MjcuLjFiYWNiM2QyZTc5ZjNhMTVjZjQyNzViNmUzMTU5MWQ1ZjA2MTgwZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC01MzEsMTIgKzUzMSwxOCBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIEpTU3RyaW5nKiBv
YmplY3RUb1N0cmluZ1ZhbHVlKCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzUmFyZURhdGEoKSkK
KyAgICAgICAgSlNWYWx1ZSBjYWNoZWQgPSBjYWNoZWRTcGVjaWFsUHJvcGVydHkoUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleTo6VG9TdHJpbmdUYWcpOworICAgICAgICBpZiAoIWNhY2hlZCkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+b2JqZWN0
VG9TdHJpbmdWYWx1ZSgpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTU3RyaW5nKj4o
Y2FjaGVkKTsKICAgICB9Ci0KLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9i
YWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiB0b1N0
cmluZ1RhZ1N5bWJvbFNsb3QpOworICAgIEpTVmFsdWUgY2FjaGVkU3BlY2lhbFByb3BlcnR5KFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXNSYXJlRGF0
YSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHJhcmVE
YXRhKCktPm9iamVjdFRvU3RyaW5nVmFsdWUoa2V5KTsKKyAgICB9CisgICAgdm9pZCBzZXRPYmpl
Y3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBKU1ZhbHVlLCBQcm9wZXJ0eUFj
Y2Vzc0NhY2hlS2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDFjZjZm
ODdmYjkwODdkYjlhOWQ0YzRjNTBhOGViYTNjN2MwMTAxZTYuLjcwMWRjMGQxYWNkNTg3NjA2NzA2
MGE3MzUzNjZlNzliOGNmY2VmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTQyNywxMSArNDI3LDExIEBAIGlubGluZSBzaXpl
X3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQog
ICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAK
LWlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVy
dHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNl
dE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2Nh
dGVSYXJlRGF0YSh2bSk7Ci0gICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShn
bG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKKyAg
ICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9iamVjdCwgdm0sIHRo
aXMsIHZhbHVlLCBrZXksIHNsb3QpOwogfQogCiB0ZW1wbGF0ZTxTdHJ1Y3R1cmU6OlNob3VsZFBp
biBzaG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKaW5kZXggNWQ5ZWIzODAyMmYwODFmZGZh
Y2ZjMjk4YTk5NjZkNWE2MWU0YzZhNC4uMmViYjE3NDA1ZjVlYzZmMzhhYjA1MjQ3MjA2Y2IwMDlk
NTdkNjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmNwcApAQCAtNzQsMTAgKzc0LDEzIEBAIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcmV2aW91cyk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh0aGlzT2JqZWN0LT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkpOworICAgIGlmICh0aGlz
T2JqZWN0LT5tX29iamVjdFRvU3RyaW5nQ2FjaGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5czsgKytpbmRl
eCkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+b2Jq
ZWN0VG9TdHJpbmdWYWx1ZShzdGF0aWNfY2FzdDxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5PihpbmRl
eCkpKTsKKyAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWNoZWRQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBudW1iZXJPZkNhY2hlZFByb3BlcnR5TmFtZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byog
Y2FjaGVkID0gdGhpc09iamVjdC0+bV9jYWNoZWRQcm9wZXJ0eU5hbWVzW2luZGV4XS51bnZhbGlk
YXRlZEdldCgpOworICAgICAgICBhdXRvKiBjYWNoZWQgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZFBy
b3BlcnR5TmFtZXNbaW5kZXhdLmdldCgpOwogICAgICAgICBpZiAoY2FjaGVkICE9IGNhY2hlZFBy
b3BlcnR5TmFtZXNTZW50aW5lbCgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChjYWNoZWQpOwogICAgIH0KQEAgLTk3LDMzICsxMDAsNjIgQEAgY2xhc3MgT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJs
aWMgQWRhcHQKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogbV9zdHJ1Y3R1cmVSYXJlRGF0YTsKIH07
CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwg
SlNTdHJpbmcqIHZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9sU2xv
dCkKK1Byb3BlcnR5QWNjZXNzV2F0Y2hwb2ludHM6On5Qcm9wZXJ0eUFjY2Vzc1dhdGNocG9pbnRz
KCkgPSBkZWZhdWx0OworCitPYmplY3RUb1N0cmluZ0NhY2hlJiBTdHJ1Y3R1cmVSYXJlRGF0YTo6
ZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZVNsb3coKQogewotICAgIGlmIChjYW5DYWNoZU9iamVj
dFRvU3RyaW5nVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNDb21waWxh
dGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFt
X29iamVjdFRvU3RyaW5nQ2FjaGUpOworICAgIGF1dG8gY2FjaGUgPSBtYWtlVW5pcXVlPE9iamVj
dFRvU3RyaW5nQ2FjaGU+KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBtX29i
amVjdFRvU3RyaW5nQ2FjaGUgPSBXVEZNb3ZlKGNhY2hlKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIHJldHVybiAqbV9vYmplY3RUb1N0cmluZ0NhY2hlLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25PYmplY3RUb1N0cmluZ0NhY2hl
KFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5KQoreworICAgIGVuc3VyZU9iamVjdFRvU3RyaW5n
Q2FjaGUoKS5tX2NhY2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXS5tX3ZhbHVlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpOwor
fQogCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlU2xvdyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVyZSogb3duU3RydWN0
dXJlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBudWxscHRy
OworICAgIHN3aXRjaCAoa2V5KSB7CisgICAgY2FzZSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpU
b1N0cmluZ1RhZzoKKyAgICAgICAgdWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3BlcnR5QWNjZXNzQ2Fj
aGVLZXk6OlRvU3RyaW5nOgorICAgICAgICB1aWQgPSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
Zy5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvcGVydHlBY2Nlc3NDYWNoZUtl
eTo6VmFsdWVPZjoKKyAgICAgICAgdWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBs
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9Q
cmltaXRpdmU6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3lt
Ym9sLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90Lmlz
VmFsdWUoKSkgeworICAgIGlmIChzbG90LmlzVmFsdWUoKSkgewogICAgICAgICAvLyBXZSBkb24n
dCBoYW5kbGUgdGhlIG93biBwcm9wZXJ0eSBjYXNlIG9mIFN5bWJvbC50b1N0cmluZ1RhZyBiZWNh
dXNlIHdlIHdvdWxkIG5ldmVyIGtub3cgaWYgYSBuZXcKICAgICAgICAgLy8gb2JqZWN0IHRyYW5z
aXRpb25pbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIGhhZCB0aGUgc2FtZSB2YWx1ZSBzdG9yZWQg
aW4gU3ltYm9sLnRvU3RyaW5nVGFnLgogICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHRoaXMgaXMg
YSBzdXBlciB1bmxpa2VseSBjYXNlIGFueXdheS4KLSAgICAgICAgaWYgKCF0b1N0cmluZ1RhZ1N5
bWJvbFNsb3QuaXNDYWNoZWFibGUoKSB8fCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2Uo
KS0+c3RydWN0dXJlKHZtKSA9PSBvd25TdHJ1Y3R1cmUpCisgICAgICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZSgpIHx8IHNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJlKHZtKSA9PSBvd25TdHJ1Y3R1
cmUpCiAgICAgICAgICAgICByZXR1cm47CiAKLQogICAgICAgICAvLyBUaGlzIHdpbGwgbm90IGNy
ZWF0ZSBhIGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RydWN0dXJlIGJ1dCB0aGF0IGlzIGdv
b2QgYmVjYXVzZSB3ZSBrbm93IHRoZSBTeW1ib2wudG9TdHJpbmdUYWcKICAgICAgICAgLy8gaXMg
bm90IG9uIHRoZSBvd25TdHJ1Y3R1cmUgc28gd2Ugd2lsbCB0cmFuc2lzaXRpb24gaWYgb25lIGlz
IGFkZGVkIGFuZCB0aGlzIGNhY2hlIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQuCi0gICAgICAgIHBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHRvU3RyaW5n
VGFnU3ltYm9sU2xvdC5zbG90QmFzZSgpKTsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQodm0sIHRoaXMsIGdsb2JhbE9iamVj
dCwgb3duU3RydWN0dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKTsKKyAgICAgICAgcHJlcGFyZUNo
YWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgp
KTsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCBzbG90LnNs
b3RCYXNlKCksIHVpZCk7CiAgICAgICAgIEFTU0VSVCghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8
fCBjb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSk7Ci0gICAgfSBlbHNlIGlm
ICh0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNVbnNldCgpKSB7CisgICAgfSBlbHNlIGlmIChzbG90
LmlzVW5zZXQoKSkgewogICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVj
dCwgb3duU3RydWN0dXJlLCBudWxscHRyKTsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0
cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKTsKKyAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZt
LCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdWlkKTsKICAgICB9IGVsc2UKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAgICAgIGdpdmVVcE9u
T2JqZWN0VG9TdHJpbmdDYWNoZShrZXkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MzYsNDcgKzE2OCw1NyBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmlu
Z1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJgogCiAgICAgICAgICAgICAv
LyBUaGUgZXF1aXZhbGVuY2UgY29uZGl0aW9uIHdvbid0IGJlIHdhdGNoYWJsZSBpZiB3ZSBoYXZl
IGFscmVhZHkgc2VlbiBhIHJlcGxhY2VtZW50LgogICAgICAgICAgICAgaWYgKCFlcXVpdkNvbmRp
dGlvbi5pc1dhdGNoYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgZ2l2ZVVwT25PYmplY3RUb1N0
cmluZ1ZhbHVlQ2FjaGUoKTsKKyAgICAgICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5n
Q2FjaGUoa2V5KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAoIWNvbmRpdGlvbi5pc1dhdGNoYWJsZSgpKSB7Ci0gICAgICAgICAgICBn
aXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgpOworICAgICAgICAgICAgZ2l2ZVVwT25P
YmplY3RUb1N0cmluZ0NhY2hlKGtleSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0
eSgpKTsKKyAgICBhdXRvJiBjYWNoZSA9IGVuc3VyZU9iamVjdFRvU3RyaW5nQ2FjaGUoKS5tX2Nh
Y2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXTsKICAgICBmb3IgKE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGNvbmRpdGlvbiA6IGNvbmRpdGlvblNldCkgewogICAgICAgICBpZiAoY29uZGl0
aW9uLmNvbmRpdGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpIHsK
LSAgICAgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBv
aW50ID0gbWFrZVVuaXF1ZTxPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludD4oZXF1aXZDb25kaXRpb24sIHRoaXMpOwotICAgICAgICAgICAgbV9vYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQtPmluc3RhbGwodm0pOwor
ICAgICAgICAgICAgY2FjaGUubV9wcmVzZW50V2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0
VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KGVxdWl2Q29u
ZGl0aW9uLCB0aGlzKTsKKyAgICAgICAgICAgIGNhY2hlLm1fcHJlc2VudFdhdGNocG9pbnQtPmlu
c3RhbGwodm0pOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdB
ZGFwdGl2ZVdhdGNocG9pbnRTZXQuYWRkKGNvbmRpdGlvbiwgdGhpcyktPmluc3RhbGwodm0pOwor
ICAgICAgICAgICAgY2FjaGUubV9taXNzV2F0Y2hwb2ludHMuYWRkKGNvbmRpdGlvbiwgdGhpcykt
Pmluc3RhbGwodm0pOwogICAgIH0KLQotICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKKyAgICBjYWNoZS5tX3ZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwog
fQogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKQor
dm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXkga2V5KQogewotICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNo
cG9pbnRTZXQuY2xlYXIoKTsKLSAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZh
bHVlV2F0Y2hwb2ludC5yZXNldCgpOwotICAgIGlmICghY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1Zh
bHVlKCkpCi0gICAgICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5jbGVhcigpOworICAgIGF1dG8q
IG9iamVjdFRvU3RyaW5nQ2FjaGUgPSBtX29iamVjdFRvU3RyaW5nQ2FjaGUuZ2V0KCk7CisgICAg
aWYgKCFvYmplY3RUb1N0cmluZ0NhY2hlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgY2Fj
aGUgPSBvYmplY3RUb1N0cmluZ0NhY2hlLT5tX2NhY2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihr
ZXkpXTsKKyAgICBjYWNoZS5tX21pc3NXYXRjaHBvaW50cy5jbGVhcigpOworICAgIGNhY2hlLm1f
cHJlc2VudFdhdGNocG9pbnQucmVzZXQoKTsKKyAgICBpZiAoY2FjaGUubV92YWx1ZS5nZXQoKSAh
PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKKyAgICAgICAgY2FjaGUubV92
YWx1ZS5jbGVhcigpOwogfQogCiB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYgdm0pCiB7Ci0gICAgaWYgKG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUlu
ZmVycmVkVmFsdWVXYXRjaHBvaW50KSB7Ci0gICAgICAgIGlmICghbV9vYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQtPmtleSgpLmlzU3RpbGxMaXZlKHZtKSkgewot
ICAgICAgICAgICAgY2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChhdXRvKiB3YXRjaHBvaW50IDogbV9vYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlV2F0Y2hwb2ludFNldCkgewotICAgICAgICBpZiAoIXdhdGNocG9p
bnQtPmtleSgpLmlzU3RpbGxMaXZlKHZtKSkgewotICAgICAgICAgICAgY2xlYXJPYmplY3RUb1N0
cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKG1fb2JqZWN0VG9TdHJp
bmdDYWNoZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1i
ZXJPZlByb3BlcnR5QWNjZXNzQ2FjaGVLZXlzOyArK2luZGV4KSB7CisgICAgICAgICAgICBQcm9w
ZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSA9IHN0YXRpY19jYXN0PFByb3BlcnR5QWNjZXNzQ2FjaGVL
ZXk+KGluZGV4KTsKKyAgICAgICAgICAgIGF1dG8mIGNhY2hlID0gbV9vYmplY3RUb1N0cmluZ0Nh
Y2hlLT5tX2NhY2hlW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChjYWNoZS5tX3ByZXNlbnRXYXRj
aHBvaW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZS5tX3ByZXNlbnRXYXRjaHBvaW50
LT5rZXkoKS5pc1N0aWxsTGl2ZSh2bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJPYmpl
Y3RUb1N0cmluZ1ZhbHVlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byogd2F0
Y2hwb2ludCA6IGNhY2hlLm1fbWlzc1dhdGNocG9pbnRzKSB7CisgICAgICAgICAgICAgICAgaWYg
KCF3YXRjaHBvaW50LT5rZXkoKS5pc1N0aWxsTGl2ZSh2bSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTE5NCw5ICsyMzYsMjAgQEAgYm9vbCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aXNWYWxpZCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fc3RydWN0dXJlUmFyZURhdGEtPmlzTGl2ZSgpOwogfQogCi12b2lkIE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwg
Y29uc3QgRmlyZURldGFpbCYpCit2b2lkIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiB2bSwgY29uc3QgRmlyZURldGFp
bCYpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVl
KCk7CisgICAgUHJvcGVydHlBY2Nlc3NDYWNoZUtleSBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hl
S2V5OjpUb1N0cmluZ1RhZzsKKyAgICBpZiAodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKQorICAgICAgICBrZXkgPSBQcm9wZXJ0
eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZ1RhZzsKKyAgICBlbHNlIGlmICh0aGlzLT5rZXkoKS51
aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkpCisgICAgICAgIGtleSA9
IFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nOworICAgIGVsc2UgaWYgKHRoaXMtPmtl
eSgpLnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKQorICAgICAgICBr
ZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpWYWx1ZU9mOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRp
dmVTeW1ib2wuaW1wbCgpKTsKKyAgICAgICAga2V5ID0gUHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6
VG9QcmltaXRpdmU7CisgICAgfQorICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNsZWFyT2JqZWN0
VG9TdHJpbmdWYWx1ZShrZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCmluZGV4IDgyOTNj
ZGM1OWVkMTU3ZGVjZjY3MWZhZGYxZjE5NTI1OTYwYzQ0NzQuLjVkNWQ0ZDliOWFiMTllYjY0OWQ0
OTBjZjI3ZTY1YTlkMWY4YzQzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaApAQCAtMzUsMTQgKzM1LDIzIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7
Ci1jbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDsKIGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Owor
Y2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQ7CitzdHJ1Y3QgT2JqZWN0VG9TdHJpbmdDYWNoZTsKIGVudW0gY2xhc3MgQ2FjaGVkUHJvcGVy
dHlOYW1lc0tpbmQgOiB1aW50OF90IHsKICAgICBLZXlzID0gMCwKICAgICBHZXRPd25Qcm9wZXJ0
eU5hbWVzLAogfTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZDYWNoZWRQcm9w
ZXJ0eU5hbWVzID0gMjsKIAorZW51bSBjbGFzcyBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IDogdWlu
dDhfdCB7CisgICAgVG9TdHJpbmdUYWcgPSAwLAorICAgIFRvU3RyaW5nLAorICAgIFZhbHVlT2Ys
CisgICAgVG9QcmltaXRpdmUsCit9Oworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlByb3BlcnR5QWNjZXNzQ2FjaGVLZXlzID0gNDsKKwogY2xhc3MgU3RydWN0dXJlUmFyZURhdGEg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwpAQCAtNzAsMTEgKzc5LDggQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICB2b2lkIHNldFByZXZpb3VzSUQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAg
ICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpOwogCi0gICAgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5n
VmFsdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxP
YmplY3QqLCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgSlNTdHJpbmcqIHZhbHVlLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7Ci0gICAgdm9pZCBnaXZl
VXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgpIHsgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIob2JqZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpKTsg
fQotICAgIGJvb2wgY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1ZhbHVlKCkgeyByZXR1cm4gbV9vYmpl
Y3RUb1N0cmluZ1ZhbHVlLnVudmFsaWRhdGVkR2V0KCkgPT0gb2JqZWN0VG9TdHJpbmdDYWNoZUdp
dmVVcE1hcmtlcigpOyB9Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ0NhY2hl
R2l2ZVVwTWFya2VyKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEpTU3RyaW5nKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSk7IH0KKyAgICBKU1ZhbHVlIG9iamVjdFRvU3RyaW5nVmFsdWUoUHJv
cGVydHlBY2Nlc3NDYWNoZUtleSkgY29uc3Q7CisgICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1Zh
bHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTVmFs
dWUsIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXksIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CkBAIC0xMDUsMTIgKzExMSwxNyBAQCBjbGFzcyBTdHJ1
Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBP
YmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDsKICAgICBmcmllbmQgY2xh
c3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ7
CiAKLSAgICB2b2lkIGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwotCiAgICAgU3RydWN0dXJl
UmFyZURhdGEoVk0mLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHZvaWQgY2xlYXJPYmplY3RUb1N0cmlu
Z1ZhbHVlKFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkpOworICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZVNsb3coSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVy
ZSwgSlNWYWx1ZSwgUHJvcGVydHlBY2Nlc3NDYWNoZUtleSwgY29uc3QgUHJvcGVydHlTbG90Jik7
CisKKyAgICBPYmplY3RUb1N0cmluZ0NhY2hlJiBlbnN1cmVPYmplY3RUb1N0cmluZ0NhY2hlKCk7
CisgICAgT2JqZWN0VG9TdHJpbmdDYWNoZSYgZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZVNsb3co
KTsKKyAgICBib29sIGNhbkNhY2hlT2JqZWN0VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0Nh
Y2hlS2V5KTsKKyAgICB2b2lkIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdDYWNoZShQcm9wZXJ0eUFj
Y2Vzc0NhY2hlS2V5KTsKKwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7
Ci0gICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgc3RvcnkgZm9yIGNsZWFyaW5nIHRoZXNlIHBy
b3BlcnR5IG5hbWVzIGNhY2hlcyBpbiBHQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNjU5CiAgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcj4gbV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpAQCAtMTE4LDggKzEy
OSw3IEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFJlZlB0cjxXYXRjaHBvaW50U2V0
PiwgV1RGOjpJbnRIYXNoPFByb3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czxQcm9wZXJ0eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHJvcGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hw
b2ludFNldHM7Ci0gICAgQmFnPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50PiBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4gbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFRvU3RyaW5nQ2FjaGU+IG1fb2JqZWN0VG9TdHJpbmdD
YWNoZTsKICAgICBCb3g8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9wb2x5UHJvdG9XYXRjaHBvaW50
OwogCiAgICAgUHJvcGVydHlPZmZzZXQgbV9tYXhPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCmluZGV4
IDllZmEwOTAxZWNiNzVhZWE1MDBmN2Y1OWI5NTRhZGU2MWUzYWE1MjEuLmUzMDVlZGE2NjhlOTdh
NDRlYmNhODYxNTUxMzBjZDg0MTA3OThjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCkBAIC0zMiw2ICsz
MiwxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IFByb3BlcnR5QWNjZXNzV2F0Y2hw
b2ludHMgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB+UHJvcGVy
dHlBY2Nlc3NXYXRjaHBvaW50cygpOworICAgIEJhZzxPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludD4gbV9taXNzV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVfcHRy
PE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBt
X3ByZXNlbnRXYXRjaHBvaW50OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOwor
fTsKKworc3RydWN0IE9iamVjdFRvU3RyaW5nQ2FjaGUgeworICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKKyAgICBQcm9wZXJ0eUFjY2Vzc1dhdGNocG9pbnRzIG1fY2FjaGVbbnVt
YmVyT2ZQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5c107Cit9OworCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1
cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwpAQCAtNDIsMTIgKzU1
LDE1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZpb3VzSUQoKQog
ICAgIG1fcHJldmlvdXMuY2xlYXIoKTsKIH0KIAotaW5saW5lIEpTU3RyaW5nKiBTdHJ1Y3R1cmVS
YXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZSBTdHJ1
Y3R1cmVSYXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5
IGtleSkgY29uc3QKIHsKLSAgICBhdXRvKiB2YWx1ZSA9IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS51
bnZhbGlkYXRlZEdldCgpOwotICAgIGlmICh2YWx1ZSA9PSBvYmplY3RUb1N0cmluZ0NhY2hlR2l2
ZVVwTWFya2VyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh2YWx1ZSkKKyAg
ICBhdXRvKiBjYWNoZSA9IG1fb2JqZWN0VG9TdHJpbmdDYWNoZS5nZXQoKTsKKyAgICBpZiAoIWNh
Y2hlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWNo
ZS0+bV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1ZS5nZXQoKTsKKyAg
ICBpZiAodmFsdWUgPT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKQog
ICAgICAgICB2YWxpZGF0ZUNlbGwodmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTk2
LDQgKzExMiwyOCBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkUHJv
cGVydHlOYW1lcyhWTSYgdm0sIENhY2hlZFByb3BlcnR5TmFtZQogICAgIG1fY2FjaGVkUHJvcGVy
dHlOYW1lc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2luZCldLnNldCh2bSwgdGhpcywgYnV0dGVy
Zmx5KTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlUmFyZURhdGE6OmNhbkNhY2hlT2JqZWN0
VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSkKK3sKKyAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAg
IGF1dG8qIGNhY2hlID0gbV9vYmplY3RUb1N0cmluZ0NhY2hlLmdldCgpOworICAgIGlmICghY2Fj
aGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjYWNoZS0+bV9jYWNoZVtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1ZS5nZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0
aXBsZUNhbGxlZU9iamVjdHMoKTsKK30KKworaW5saW5lIE9iamVjdFRvU3RyaW5nQ2FjaGUmIFN0
cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVPYmplY3RUb1N0cmluZ0NhY2hlKCkKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwor
ICAgIGlmIChhdXRvKiBjYWNoZSA9IG1fb2JqZWN0VG9TdHJpbmdDYWNoZS5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuICpjYWNoZTsKKyAgICByZXR1cm4gZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZVNs
b3coKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3Ry
aW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUq
IG93blN0cnVjdHVyZSwgSlNWYWx1ZSB2YWx1ZSwgUHJvcGVydHlBY2Nlc3NDYWNoZUtleSBrZXks
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoIWNhbkNhY2hlT2JqZWN0VG9T
dHJpbmdWYWx1ZShrZXkpKQorICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIHNldE9iamVjdFRv
U3RyaW5nVmFsdWVTbG93KGdsb2JhbE9iamVjdCwgdm0sIG93blN0cnVjdHVyZSwgdmFsdWUsIGtl
eSwgc2xvdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407746</attachid>
            <date>2020-09-02 00:28:49 -0700</date>
            <delta_ts>2020-09-02 00:38:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200902002848.patch</filename>
            <type>text/plain</type>
            <size>36998</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NGE4MThkNDRiNjM5OTA3NGM4Y2I5MTU5ZWRkZWEyOTI2N2U1MDc5Li5hNTUwODlhOTI3ODllYmI2
NjVmMjNhOTlhOWM1YmY3ZjA4OTNlN2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4MTc5NjgyPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFycmF5VG9T
dHJpbmdXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om9iamVj
dFByb3RvVG9TdHJpbmdGdW5jdGlvbiBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OmNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
OmZpcmVJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlT2JqZWN0VG9TdHJpbmdD
YWNoZVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25PYmpl
Y3RUb1N0cmluZ0NhY2hlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldE9i
amVjdFRvU3RyaW5nVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6
OmNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVE
YXRhOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6Ok9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVSYXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVl
KToKKwogMjAyMC0wOC0zMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHNvbWUgUHRyVGFnIGRlYnVnZ2luZyBjb2RlIGZyb20gcmVsZWFzZSBidWlsZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
aW5kZXggZWI1YzJjMDBkZWUwMDc2M2M2MTVlYzE4ZjhjNGY1YjJhNmEyYzIwNi4uNTI3NmVhZTQ1
YTAyMzNmODZkNDhiMDRjZjEwNGI0OWY2YmZhM2I1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNDgwLDYgKzQ4MCw3IEBAIEpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBHbG9iYWxPYmplY3RNCiAgICAgLCBtX3NldEFkZFdhdGNocG9pbnRTZXQoSXNXYXRj
aGVkKQogICAgICwgbV9hcnJheVNwZWNpZXNXYXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkK
ICAgICAsIG1fYXJyYXlKb2luV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCisgICAgLCBtX2FycmF5
VG9TdHJpbmdXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKICAgICAsIG1fbnVtYmVyVG9TdHJpbmdX
YXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKICAgICAsIG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1f
c3RhY2tUcmFjZUxpbWl0KE9wdGlvbnM6OmRlZmF1bHRFcnJvclN0YWNrVHJhY2VMaW1pdCgpKQpA
QCAtNjEwLDYgKzYxMSwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAg
ICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBo
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXModm0sIHRoaXMsICZjYWxsRnVuY3Rpb24sICZhcHBs
eUZ1bmN0aW9uLCAmaGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbik7CisgICAgbV9vYmplY3RQcm90
b1RvU3RyaW5nRnVuY3Rpb24uaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6
ZXI8SlNGdW5jdGlvbj4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246
OmNyZWF0ZShpbml0LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nLnN0cmluZygpLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgTm9JbnRyaW5zaWMpKTsK
KyAgICAgICAgfSk7CiAgICAgbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi5pbml0TGF0ZXIo
CiAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxKU0Z1bmN0aW9uPiYgaW5pdCkgewogICAg
ICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGluaXQub3duZXIs
IDAsIGluaXQudm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuc3RyaW5nKCksIGFycmF5UHJvdG9G
dW5jVG9TdHJpbmcsIE5vSW50cmluc2ljKSk7CkBAIC0xMzc0LDYgKzEzNzksMTEgQEAgY2FwaXRh
bE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVG
bGFnID8gY2FwaXRhbE5hbWUKICAgICAgICAgbV9hcnJheVByb3RvdHlwZUpvaW5XYXRjaHBvaW50
ID0gbWFrZVVuaXF1ZTxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxp
bmVXYXRjaHBvaW50U2V0Pj4odGhpcywgY29uZGl0aW9uLCBtX2FycmF5Sm9pbldhdGNocG9pbnRT
ZXQpOwogICAgICAgICBtX2FycmF5UHJvdG90eXBlSm9pbldhdGNocG9pbnQtPmluc3RhbGwodm0p
OwogICAgIH0KKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlv
biA9IHNldHVwQWRhcHRpdmVXYXRjaHBvaW50KHRoaXMsIHRoaXMtPmFycmF5UHJvdG90eXBlKCks
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKTsKKyAgICAgICAgbV9hcnJheVByb3RvdHlwZVRv
U3RyaW5nV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHRoaXMsIGNvbmRpdGlvbiwgbV9hcnJh
eVRvU3RyaW5nV2F0Y2hwb2ludFNldCk7CisgICAgICAgIG1fYXJyYXlQcm90b3R5cGVUb1N0cmlu
Z1dhdGNocG9pbnQtPmluc3RhbGwodm0pOworICAgIH0KIAogICAgIHsKICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uID0gc2V0dXBBZGFwdGl2ZVdhdGNocG9pbnQodGhp
cywgbWFwSXRlcmF0b3JQcm90b3R5cGUsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwpAQCAtMTg5
NSw2ICsxOTA1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgdGhpc09iamVjdC0+bV9wYXJzZUlu
dEZ1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fcGFyc2VGbG9hdEZ1
bmN0aW9uLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fb2JqZWN0UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYXJyYXlQcm90
b1RvU3RyaW5nRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9hcnJh
eVByb3RvVmFsdWVzRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9l
dmFsRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhNzU1YzMxMTA0ZDM4OGUyNTQ4N2NmNzRmMDE2
ZjEwNzY2YWUxM2I0Li40NjJjZDhjODFhYWM4ZDkxYzM5YmNhY2QzNzg5ZTQ5NDFmNDBmZWY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAg
LTMxMyw2ICszMTMsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0IHsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVu
Y3Rpb24+IG1fcGFyc2VJbnRGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIEpTRnVuY3Rpb24+IG1fcGFyc2VGbG9hdEZ1bmN0aW9uOwogCisgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX29iamVjdFByb3RvVG9TdHJpbmdGdW5jdGlv
bjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fYXJyYXlQ
cm90b1RvU3RyaW5nRnVuY3Rpb247CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBK
U0Z1bmN0aW9uPiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fZXZhbEZ1bmN0aW9uOwpAQCAtNDc0LDExICs0
NzUsMTMgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCB7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3NldEFkZFdhdGNocG9pbnRTZXQ7
CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5U3BlY2llc1dhdGNocG9pbnRTZXQ7CiAg
ICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FycmF5Sm9pbldhdGNocG9pbnRTZXQ7CisgICAgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX2FycmF5VG9TdHJpbmdXYXRjaHBvaW50U2V0OwogICAgIElubGlu
ZVdhdGNocG9pbnRTZXQgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdh
dGNocG9pbnRTZXQ+PiBtX2FycmF5Q29uc3RydWN0b3JTcGVjaWVzV2F0Y2hwb2ludDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5s
aW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlQcm90b3R5cGVDb25zdHJ1Y3RvcldhdGNocG9pbnQ7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5UHJvdG90eXBlU3ltYm9sSXRlcmF0b3JX
YXRjaHBvaW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheVByb3RvdHlwZUpvaW5X
YXRjaHBvaW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheVByb3RvdHlwZVRvU3Ry
aW5nV2F0Y2hwb2ludDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fYXJyYXlJdGVyYXRvclBy
b3RvdHlwZU5leHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX21hcFByb3RvdHlwZVN5bWJv
bEl0ZXJhdG9yV2F0Y2hwb2ludDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fbWFwSXRlcmF0
b3JQcm90b3R5cGVOZXh0V2F0Y2hwb2ludDsKQEAgLTUwMSw2ICs1MDQsNyBAQCBjbGFzcyBKU0ds
b2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBJbmxp
bmVXYXRjaHBvaW50U2V0JiBzZXRBZGRXYXRjaHBvaW50U2V0KCkgeyByZXR1cm4gbV9zZXRBZGRX
YXRjaHBvaW50U2V0OyB9CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYXJyYXlTcGVjaWVzV2F0
Y2hwb2ludFNldCgpIHsgcmV0dXJuIG1fYXJyYXlTcGVjaWVzV2F0Y2hwb2ludFNldDsgfQogICAg
IElubGluZVdhdGNocG9pbnRTZXQmIGFycmF5Sm9pbldhdGNocG9pbnRTZXQoKSB7IHJldHVybiBt
X2FycmF5Sm9pbldhdGNocG9pbnRTZXQ7IH0KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBhcnJh
eVRvU3RyaW5nV2F0Y2hwb2ludFNldCgpIHsgcmV0dXJuIG1fYXJyYXlUb1N0cmluZ1dhdGNocG9p
bnRTZXQ7IH0KICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBudW1iZXJUb1N0cmluZ1dhdGNocG9p
bnRTZXQoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlSklUKCkp
OwpAQCAtNjMzLDYgKzYzNyw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QgewogCiAgICAgSlNGdW5jdGlvbiogZXZhbEZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9ldmFsRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlv
biogdGhyb3dUeXBlRXJyb3JGdW5jdGlvbigpIGNvbnN0OworICAgIEpTRnVuY3Rpb24qIG9iamVj
dFByb3RvVG9TdHJpbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uLmdldCh0aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlv
bi5nZXQodGhpcyk7IH0KICAgICBKU0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXQodGhpcyk7IH0K
ICAgICBKU0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb25Db25jdXJyZW50bHkoKSBj
b25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXRDb25jdXJyZW50bHko
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IDUw
YWQwYTZiYmMwNGFiNmY0ZTYwM2Y2M2UzZGE3MmU4ZmUwOTJjNDYuLjM1NjY5ZmZmOTEwNjM0NWE3
YjYzMjViZjJmYTg2MWU4MmU0Y2E4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKQEAgLTIxNDQsMzMgKzIxNDQsNDQgQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICB9CiB9CiAKLWVudW0gY2xhc3MgVHlwZUhpbnRNb2RlIHsgVGFrZXNIaW50LCBE
b2VzTm90VGFrZUhpbnQgfTsKLQotdGVtcGxhdGU8VHlwZUhpbnRNb2RlIG1vZGUgPSBUeXBlSGlu
dE1vZGU6OkRvZXNOb3RUYWtlSGludD4KK3RlbXBsYXRlPFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkg
a2V5Pgogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaXRpdmVGdW5jdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGlzIHdoZW4gd2UgaGF2ZSBmaXhlZDogcmRhcjovL3Byb2JsZW0vMzM0NTE4NDAKLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTA5LgotICAgIGNv
bnN0ZXhwciBib29sIGRlYnVnTnVsbFN0cnVjdHVyZSA9IG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpU
YWtlc0hpbnQ7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihv
YmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJlPihnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2Nv
cGUuZXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBoYXNQcm9wZXJ0eSA/IHNs
b3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
aWYgKGZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6
OlRha2VzSGludCkKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5jYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldCk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUg
Zml4ZWQ6IHJkYXI6Ly9wcm9ibGVtLzMzNDUxODQwCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcxMDkuCisgICAgICAgIGNvbnN0ZXhwciBib29s
IGRlYnVnTnVsbFN0cnVjdHVyZSA9IGtleSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1By
aW1pdGl2ZTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3Qq
PihvYmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJlPihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBoYXNQcm9wZXJ0eSA/
IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQo
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUo
Z2xvYmFsT2JqZWN0LCB2bSwgZnVuY3Rpb24sIGtleSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB9CisgICAgaWYgKGZ1
bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisK
KyAgICBpZiBjb25zdGV4cHIgKGtleSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmlu
ZykgeworICAgICAgICBpZiAoZnVuY3Rpb24gPT0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b1Rv
U3RyaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKEpTU3RyaW5nKiByZXN1bHQgPSBv
YmplY3QtPnN0cnVjdHVyZSh2bSktPm9iamVjdFRvU3RyaW5nVmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCiAgICAgYXV0byBjYWxsRGF0
YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CiAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0g
Q2FsbERhdGE6OlR5cGU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gVHlwZUhpbnRNb2Rl
OjpUYWtlc0hpbnQpCisgICAgICAgIGlmIGNvbnN0ZXhwciAoa2V5ID09IFByb3BlcnR5QWNjZXNz
Q2FjaGVLZXk6OlRvUHJpbWl0aXZlKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlN5bWJvbC50b1ByaW1pdGl2ZSBpcyBub3QgYSBmdW5jdGlvbiwgdW5k
ZWZpbmVkLCBvciBudWxsIl9zKTsKICAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwog
ICAgIH0KIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxBcmdzOwotICAgIGlmIChtb2Rl
ID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KSB7CisgICAgaWYgY29uc3RleHByIChrZXkgPT0g
UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9QcmltaXRpdmUpIHsKICAgICAgICAgSlNTdHJpbmcq
IGhpbnRTdHJpbmcgPSBudWxscHRyOwogICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKICAgICAgICAg
Y2FzZSBOb1ByZWZlcmVuY2U6CkBAIC0yMTkwLDggKzIyMDEsMTEgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWMKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
biwgY2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFT
U0VSVCghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIGlmIChyZXN1bHQuaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpEb2VzTm90VGFrZUhpbnQg
PyBKU1ZhbHVlKCkgOiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3ltYm9s
LnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCJfcyk7CisgICAgaWYgKHJlc3VsdC5pc09i
amVjdCgpKSB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoa2V5ID09IFByb3BlcnR5QWNjZXNzQ2Fj
aGVLZXk6OlRvUHJpbWl0aXZlKQorICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9QcmltaXRpdmUgcmV0dXJuZWQgYW4gb2JqZWN0
Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMjIwMSwyNyArMjIxNSwyMiBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFy
eVRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByZWZlcnJlZFByaQog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3aGF0ZXZlciBkZWZh
dWx0IHZhbHVlIG1ldGhvZHMgdGhlcmUgYXJlIG9uIG9iamVjdCdzIHByb3RvdHlwZSBjaGFpbiBh
cmUKLSAgICAvLyBiZWluZyB3YXRjaGVkLgotICAgIGZvciAoY29uc3QgSlNPYmplY3QqIG9iamVj
dCA9IHRoaXM7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zdG9yZWRQ
cm90b3R5cGVPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5z
dGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwotCiAgICAgSlNW
YWx1ZSB2YWx1ZTsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcpIHsKLSAgICAgICAgdmFs
dWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRp
dmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0
LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEVYQ0VQ
VElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZh
bHVlLmFzQ2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVl
ID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VmFsdWVP
Zj4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsK
ICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhj
ZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9Q
cmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZh
bHVlT2YsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2VsbCgpKTsK
ICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB2
YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmcsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1p
dGl2ZUZ1bmN0aW9uPFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nPihnbG9iYWxPYmpl
Y3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0g
dmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7CkBAIC0yMjQyLDcgKzIyNTEsNyBAQCBKU1ZhbHVlIEpTT2JqZWN0Ojp0b1ByaW1pdGl2
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeQogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVu
Y3Rpb248VHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQ+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJv
cGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wsIHByZWZlcnJlZFR5cGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5
OjpUb1ByaW1pdGl2ZT4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1By
aW1pdGl2ZVN5bWJvbCwgcHJlZmVycmVkVHlwZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCmluZGV4
IDQxNzBkMjQ4M2Y1ZmM4MjBlNDllYzM1ZmE4MGEwM2IyMGQ4YTVhYjEuLmQzM2I4MWZiMjM3MzI2
MGY2YmExMjdiNzY5ZTY4MDAwYjFjNzk5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIE9i
amVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogICAgIAotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNU
b1N0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIDApOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZywgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24o
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnZh
bHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVy
dHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSGFzT3duUHJvcGVydHlJbnRyaW5zaWMp
OwpAQCAtMzUwLDcgKzM1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBKU1N0
cmluZyoganNSZXN1bHQgPSBqc1N0cmluZyhnbG9iYWxPYmplY3QsIHZtLnNtYWxsU3RyaW5ncy5v
YmplY3RTdHJpbmdTdGFydCgpLCBqc1RhZywgdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZygnXScpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAg
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFs
T2JqZWN0LCB2bSwganNSZXN1bHQsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2
bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFsT2JqZWN0LCB2bSwganNSZXN1bHQsIFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFnLCBzbG90KTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzUmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCmluZGV4IDAwOWVmNThkZjIxNjk0OGNjYTJiZWQ1ODY2
YWJkODgxODEzMjVkMzMuLmRjNjMzMzJhZTg3MjA4Y2Q3NjlkOWM4Y2I3MzVkODY2NzJiNTc0ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRvU3RyaW5n
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAK
QEAgLTU3LDcgKzU3LDE5IEBAIHZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVECiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5n
VmFsdWUoKTsKKyAgICBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSA9IFByb3BlcnR5QWNjZXNz
Q2FjaGVLZXk6OlRvU3RyaW5nVGFnOworICAgIGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFnOworICAgIGVsc2UgaWYgKG1fa2V5LnVpZCgpID09
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkKKyAgICAgICAga2V5ID0gUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleTo6VG9TdHJpbmc7CisgICAgZWxzZSBpZiAobV9rZXkudWlkKCkgPT0g
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2tl
eS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbC5pbXBsKCkpOwor
ICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2ZTsKKyAgICB9
CisKKyAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoa2V5
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCmluZGV4IDM4OTlkMTZmYmI3MWYxM2ZmMDRhM2FhY2NmN2JiNDM1YTI3MzZl
MjcuLjFiYWNiM2QyZTc5ZjNhMTVjZjQyNzViNmUzMTU5MWQ1ZjA2MTgwZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC01MzEsMTIgKzUzMSwxOCBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIEpTU3RyaW5nKiBv
YmplY3RUb1N0cmluZ1ZhbHVlKCkKICAgICB7Ci0gICAgICAgIGlmICghaGFzUmFyZURhdGEoKSkK
KyAgICAgICAgSlNWYWx1ZSBjYWNoZWQgPSBjYWNoZWRTcGVjaWFsUHJvcGVydHkoUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleTo6VG9TdHJpbmdUYWcpOworICAgICAgICBpZiAoIWNhY2hlZCkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+b2JqZWN0
VG9TdHJpbmdWYWx1ZSgpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTU3RyaW5nKj4o
Y2FjaGVkKTsKICAgICB9Ci0KLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9i
YWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiB0b1N0
cmluZ1RhZ1N5bWJvbFNsb3QpOworICAgIEpTVmFsdWUgY2FjaGVkU3BlY2lhbFByb3BlcnR5KFBy
b3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXNSYXJlRGF0
YSgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHJhcmVE
YXRhKCktPm9iamVjdFRvU3RyaW5nVmFsdWUoa2V5KTsKKyAgICB9CisgICAgdm9pZCBzZXRPYmpl
Y3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBKU1ZhbHVlLCBQcm9wZXJ0eUFj
Y2Vzc0NhY2hlS2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDFjZjZm
ODdmYjkwODdkYjlhOWQ0YzRjNTBhOGViYTNjN2MwMTAxZTYuLjcwMWRjMGQxYWNkNTg3NjA2NzA2
MGE3MzUzNjZlNzliOGNmY2VmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTQyNywxMSArNDI3LDExIEBAIGlubGluZSBzaXpl
X3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQog
ICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAK
LWlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVy
dHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNl
dE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2Nh
dGVSYXJlRGF0YSh2bSk7Ci0gICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShn
bG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKKyAg
ICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9iamVjdCwgdm0sIHRo
aXMsIHZhbHVlLCBrZXksIHNsb3QpOwogfQogCiB0ZW1wbGF0ZTxTdHJ1Y3R1cmU6OlNob3VsZFBp
biBzaG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKaW5kZXggNWQ5ZWIzODAyMmYwODFmZGZh
Y2ZjMjk4YTk5NjZkNWE2MWU0YzZhNC4uZTVjYjQ2NGNlZWQzMWI3ZjdlM2Q3YTQ0M2U0OGY1YTc2
MWYzNGRmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmNwcApAQCAtNzQsMTAgKzc0LDEzIEBAIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcmV2aW91cyk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh0aGlzT2JqZWN0LT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkpOworICAgIGlmICh0aGlz
T2JqZWN0LT5tX29iamVjdFRvU3RyaW5nQ2FjaGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5czsgKytpbmRl
eCkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+b2Jq
ZWN0VG9TdHJpbmdWYWx1ZShzdGF0aWNfY2FzdDxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5PihpbmRl
eCkpKTsKKyAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWNoZWRQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBudW1iZXJPZkNhY2hlZFByb3BlcnR5TmFtZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byog
Y2FjaGVkID0gdGhpc09iamVjdC0+bV9jYWNoZWRQcm9wZXJ0eU5hbWVzW2luZGV4XS51bnZhbGlk
YXRlZEdldCgpOworICAgICAgICBhdXRvKiBjYWNoZWQgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZFBy
b3BlcnR5TmFtZXNbaW5kZXhdLmdldCgpOwogICAgICAgICBpZiAoY2FjaGVkICE9IGNhY2hlZFBy
b3BlcnR5TmFtZXNTZW50aW5lbCgpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChjYWNoZWQpOwogICAgIH0KQEAgLTk3LDMzICsxMDAsNjIgQEAgY2xhc3MgT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJs
aWMgQWRhcHQKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogbV9zdHJ1Y3R1cmVSYXJlRGF0YTsKIH07
CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwg
SlNTdHJpbmcqIHZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9sU2xv
dCkKK1Byb3BlcnR5QWNjZXNzV2F0Y2hwb2ludHM6On5Qcm9wZXJ0eUFjY2Vzc1dhdGNocG9pbnRz
KCkgPSBkZWZhdWx0OworCitPYmplY3RUb1N0cmluZ0NhY2hlJiBTdHJ1Y3R1cmVSYXJlRGF0YTo6
ZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZVNsb3coKQogewotICAgIGlmIChjYW5DYWNoZU9iamVj
dFRvU3RyaW5nVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNDb21waWxh
dGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFt
X29iamVjdFRvU3RyaW5nQ2FjaGUpOworICAgIGF1dG8gY2FjaGUgPSBtYWtlVW5pcXVlPE9iamVj
dFRvU3RyaW5nQ2FjaGU+KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gRXhwb3Nl
IHZhbGlkIHN0cnVjdCBmb3IgY29uY3VycmVudCB0aHJlYWRzIGluY2x1ZGluZyBjb25jdXJyZW50
IGNvbXBpbGVycy4KKyAgICBtX29iamVjdFRvU3RyaW5nQ2FjaGUgPSBXVEZNb3ZlKGNhY2hlKTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBTdG9yZSB0byB0aGUgZmllbGQgb2YgdGhp
cyBzdHJ1Y3Qgc2hvdWxkIGJlIHZpc2libGUgdG8gdGhlIGNvbmN1cnJlbnQgY29sbGVjdG9ycyBh
ZnRlciBzdHJ1Y3QgaXMgdmlzaWJsZS4KKyAgICByZXR1cm4gKm1fb2JqZWN0VG9TdHJpbmdDYWNo
ZS5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmdpdmVVcE9uT2Jq
ZWN0VG9TdHJpbmdDYWNoZShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSkKK3sKKyAgICBlbnN1
cmVPYmplY3RUb1N0cmluZ0NhY2hlKCkubV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5
KV0ubV92YWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2Fs
bGVlT2JqZWN0cygpKTsKK30KIAordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZVNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1
Y3R1cmUqIG93blN0cnVjdHVyZSwgSlNWYWx1ZSB2YWx1ZSwgUHJvcGVydHlBY2Nlc3NDYWNoZUtl
eSBrZXksIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGtleSkgeworICAgIGNhc2UgUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleTo6VG9TdHJpbmdUYWc6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
cm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZzoKKyAgICAgICAgdWlkID0gdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3Bl
cnR5QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFt
ZXMtPnZhbHVlT2YuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3BlcnR5QWNj
ZXNzQ2FjaGVLZXk6OlRvUHJpbWl0aXZlOgorICAgICAgICB1aWQgPSB2bS5wcm9wZXJ0eU5hbWVz
LT50b1ByaW1pdGl2ZVN5bWJvbC5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKHRvU3RyaW5n
VGFnU3ltYm9sU2xvdC5pc1ZhbHVlKCkpIHsKKyAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoZSBvd24gcHJvcGVydHkgY2FzZSBvZiBTeW1ib2wu
dG9TdHJpbmdUYWcgYmVjYXVzZSB3ZSB3b3VsZCBuZXZlciBrbm93IGlmIGEgbmV3CiAgICAgICAg
IC8vIG9iamVjdCB0cmFuc2l0aW9uaW5nIHRvIHRoZSBzYW1lIHN0cnVjdHVyZSBoYWQgdGhlIHNh
bWUgdmFsdWUgc3RvcmVkIGluIFN5bWJvbC50b1N0cmluZ1RhZy4KICAgICAgICAgLy8gQWRkaXRp
b25hbGx5LCB0aGlzIGlzIGEgc3VwZXIgdW5saWtlbHkgY2FzZSBhbnl3YXkuCi0gICAgICAgIGlm
ICghdG9TdHJpbmdUYWdTeW1ib2xTbG90LmlzQ2FjaGVhYmxlKCkgfHwgdG9TdHJpbmdUYWdTeW1i
b2xTbG90LnNsb3RCYXNlKCktPnN0cnVjdHVyZSh2bSkgPT0gb3duU3RydWN0dXJlKQorICAgICAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSB8fCBzbG90LnNsb3RCYXNlKCktPnN0cnVjdHVyZSh2
bSkgPT0gb3duU3RydWN0dXJlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0KICAgICAgICAgLy8g
VGhpcyB3aWxsIG5vdCBjcmVhdGUgYSBjb25kaXRpb24gZm9yIHRoZSBjdXJyZW50IHN0cnVjdHVy
ZSBidXQgdGhhdCBpcyBnb29kIGJlY2F1c2Ugd2Uga25vdyB0aGUgU3ltYm9sLnRvU3RyaW5nVGFn
CiAgICAgICAgIC8vIGlzIG5vdCBvbiB0aGUgb3duU3RydWN0dXJlIHNvIHdlIHdpbGwgdHJhbnNp
c2l0aW9uIGlmIG9uZSBpcyBhZGRlZCBhbmQgdGhpcyBjYWNoZSB3aWxsIG5vIGxvbmdlciBiZSB1
c2VkLgotICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgb3duU3Ry
dWN0dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KHZtLCB0
aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90LnNs
b3RCYXNlKCksIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKSk7Cisg
ICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUs
IHNsb3Quc2xvdEJhc2UoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0
cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCB1aWQpOwogICAgICAgICBBU1NFUlQoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkp
OwotICAgIH0gZWxzZSBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90LmlzVW5zZXQoKSkgeworICAg
IH0gZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAgcHJlcGFyZUNoYWluRm9yQ2Fj
aGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgbnVsbHB0cik7Ci0gICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgdGhpcywgZ2xv
YmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLmltcGwoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcyh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHVpZCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkgewotICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgpOwor
ICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nQ2FjaGUoa2V5KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMTM2LDQ3ICsxNjgsNTcgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYK
IAogICAgICAgICAgICAgLy8gVGhlIGVxdWl2YWxlbmNlIGNvbmRpdGlvbiB3b24ndCBiZSB3YXRj
aGFibGUgaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gYSByZXBsYWNlbWVudC4KICAgICAgICAgICAg
IGlmICghZXF1aXZDb25kaXRpb24uaXNXYXRjaGFibGUoKSkgewotICAgICAgICAgICAgICAgIGdp
dmVVcE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAgICAgICAgICAgICAgZ2l2ZVVw
T25PYmplY3RUb1N0cmluZ0NhY2hlKGtleSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFjb25kaXRpb24uaXNXYXRjaGFibGUoKSkg
ewotICAgICAgICAgICAgZ2l2ZVVwT25PYmplY3RUb1N0cmluZ1ZhbHVlQ2FjaGUoKTsKKyAgICAg
ICAgICAgIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdDYWNoZShrZXkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1
cmVzRW5zdXJlVmFsaWRpdHkoKSk7CisgICAgYXV0byYgY2FjaGUgPSBlbnN1cmVPYmplY3RUb1N0
cmluZ0NhY2hlKCkubV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV07CiAgICAgZm9y
IChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKICAg
ICAgICAgaWYgKGNvbmRpdGlvbi5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlKSB7Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZl
cnJlZFZhbHVlV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KGVxdWl2Q29uZGl0aW9uLCB0aGlzKTsKLSAg
ICAgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBvaW50
LT5pbnN0YWxsKHZtKTsKKyAgICAgICAgICAgIGNhY2hlLm1fcHJlc2VudFdhdGNocG9pbnQgPSBt
YWtlVW5pcXVlPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50PihlcXVpdkNvbmRpdGlvbiwgdGhpcyk7CisgICAgICAgICAgICBjYWNoZS5tX3ByZXNl
bnRXYXRjaHBvaW50LT5pbnN0YWxsKHZtKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X29iamVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0LmFkZChjb25kaXRpb24sIHRoaXMp
LT5pbnN0YWxsKHZtKTsKKyAgICAgICAgICAgIGNhY2hlLm1fbWlzc1dhdGNocG9pbnRzLmFkZChj
b25kaXRpb24sIHRoaXMpLT5pbnN0YWxsKHZtKTsKICAgICB9Ci0KLSAgICBtX29iamVjdFRvU3Ry
aW5nVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgY2FjaGUubV92YWx1ZS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJPYmplY3RU
b1N0cmluZ1ZhbHVlKCkKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0VG9TdHJp
bmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSkKIHsKLSAgICBtX29iamVjdFRvU3Ry
aW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0LmNsZWFyKCk7Ci0gICAgbV9vYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQucmVzZXQoKTsKLSAgICBpZiAoIWNhbkNhY2hl
T2JqZWN0VG9TdHJpbmdWYWx1ZSgpKQotICAgICAgICBtX29iamVjdFRvU3RyaW5nVmFsdWUuY2xl
YXIoKTsKKyAgICBhdXRvKiBvYmplY3RUb1N0cmluZ0NhY2hlID0gbV9vYmplY3RUb1N0cmluZ0Nh
Y2hlLmdldCgpOworICAgIGlmICghb2JqZWN0VG9TdHJpbmdDYWNoZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8mIGNhY2hlID0gb2JqZWN0VG9TdHJpbmdDYWNoZS0+bV9jYWNoZVtzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oa2V5KV07CisgICAgY2FjaGUubV9taXNzV2F0Y2hwb2ludHMuY2xlYXIo
KTsKKyAgICBjYWNoZS5tX3ByZXNlbnRXYXRjaHBvaW50LnJlc2V0KCk7CisgICAgaWYgKGNhY2hl
Lm1fdmFsdWUuZ2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpCisg
ICAgICAgIGNhY2hlLm1fdmFsdWUuY2xlYXIoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogewotICAgIGlmIChtX29iamVjdFRv
U3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hwb2ludCkgewotICAgICAgICBpZiAoIW1f
b2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBvaW50LT5rZXkoKS5pc1N0
aWxsTGl2ZSh2bSkpIHsKLSAgICAgICAgICAgIGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoYXV0byogd2F0
Y2hwb2ludCA6IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNocG9pbnRTZXQpIHsKLSAgICAg
ICAgaWYgKCF3YXRjaHBvaW50LT5rZXkoKS5pc1N0aWxsTGl2ZSh2bSkpIHsKLSAgICAgICAgICAg
IGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX29iamVjdFRvU3RyaW5nQ2FjaGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5czsgKytpbmRleCkgewor
ICAgICAgICAgICAgUHJvcGVydHlBY2Nlc3NDYWNoZUtleSBrZXkgPSBzdGF0aWNfY2FzdDxQcm9w
ZXJ0eUFjY2Vzc0NhY2hlS2V5PihpbmRleCk7CisgICAgICAgICAgICBhdXRvJiBjYWNoZSA9IG1f
b2JqZWN0VG9TdHJpbmdDYWNoZS0+bV9jYWNoZVtpbmRleF07CisgICAgICAgICAgICBpZiAoY2Fj
aGUubV9wcmVzZW50V2F0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIGlmICghY2FjaGUubV9w
cmVzZW50V2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZShrZXkpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKGF1dG8qIHdhdGNocG9pbnQgOiBjYWNoZS5tX21pc3NXYXRjaHBvaW50cykgeworICAg
ICAgICAgICAgICAgIGlmICghd2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZShrZXkpOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xOTQsOSArMjM2LDIwIEBAIGJvb2wgT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmlzVmFsaWQoKSBj
b25zdAogICAgIHJldHVybiBtX3N0cnVjdHVyZVJhcmVEYXRhLT5pc0xpdmUoKTsKIH0KIAotdm9p
ZCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6
aGFuZGxlRmlyZShWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKQordm9pZCBPYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYgdm0s
IGNvbnN0IEZpcmVEZXRhaWwmKQogewotICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNsZWFyT2Jq
ZWN0VG9TdHJpbmdWYWx1ZSgpOworICAgIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5ID0gUHJv
cGVydHlBY2Nlc3NDYWNoZUtleTo6VG9TdHJpbmdUYWc7CisgICAgaWYgKHRoaXMtPmtleSgpLnVp
ZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKSkKKyAgICAg
ICAga2V5ID0gUHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9TdHJpbmdUYWc7CisgICAgZWxzZSBp
ZiAodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgp
KQorICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZzsKKyAgICBl
bHNlIGlmICh0aGlzLT5rZXkoKS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmlt
cGwoKSkKKyAgICAgICAga2V5ID0gUHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VmFsdWVPZjsKKyAg
ICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHRoaXMtPmtleSgpLnVpZCgpID09IHZtLnByb3BlcnR5
TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGtleSA9IFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlRvUHJpbWl0aXZlOworICAgIH0KKyAgICBtX3N0cnVjdHVyZVJhcmVE
YXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoa2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuaAppbmRleCA4MjkzY2RjNTllZDE1N2RlY2Y2NzFmYWRmMWYxOTUyNTk2MGM0NDc0Li41ZDVk
NGQ5YjlhYjE5ZWI2NDlkNDkwY2YyN2U2NWE5ZDFmOGM0M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKQEAgLTM1LDE0ICszNSwy
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwog
Y2xhc3MgU3RydWN0dXJlOwotY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ7CiBjbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDsKK2NsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Oworc3RydWN0IE9iamVjdFRvU3RyaW5nQ2FjaGU7CiBlbnVtIGNs
YXNzIENhY2hlZFByb3BlcnR5TmFtZXNLaW5kIDogdWludDhfdCB7CiAgICAgS2V5cyA9IDAsCiAg
ICAgR2V0T3duUHJvcGVydHlOYW1lcywKIH07CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51
bWJlck9mQ2FjaGVkUHJvcGVydHlOYW1lcyA9IDI7CiAKK2VudW0gY2xhc3MgUHJvcGVydHlBY2Nl
c3NDYWNoZUtleSA6IHVpbnQ4X3QgeworICAgIFRvU3RyaW5nVGFnID0gMCwKKyAgICBUb1N0cmlu
ZywKKyAgICBWYWx1ZU9mLAorICAgIFRvUHJpbWl0aXZlLAorfTsKK3N0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbnVtYmVyT2ZQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5cyA9IDQ7CisKIGNsYXNzIFN0
cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKQEAgLTcwLDExICs3OSw4IEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVE
YXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiwg
U3RydWN0dXJlKik7CiAgICAgdm9pZCBjbGVhclByZXZpb3VzSUQoKTsKIAotICAgIEpTU3RyaW5n
KiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPYmplY3RUb1N0cmlu
Z1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIEpT
U3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Qp
OwotICAgIHZvaWQgZ2l2ZVVwT25PYmplY3RUb1N0cmluZ1ZhbHVlQ2FjaGUoKSB7IG1fb2JqZWN0
VG9TdHJpbmdWYWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG9iamVjdFRvU3RyaW5nQ2FjaGVH
aXZlVXBNYXJrZXIoKSk7IH0KLSAgICBib29sIGNhbkNhY2hlT2JqZWN0VG9TdHJpbmdWYWx1ZSgp
IHsgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS51bnZhbGlkYXRlZEdldCgpID09IG9iamVj
dFRvU3RyaW5nQ2FjaGVHaXZlVXBNYXJrZXIoKTsgfQotICAgIHN0YXRpYyBKU1N0cmluZyogb2Jq
ZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1N0
cmluZyo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9CisgICAgSlNWYWx1ZSBvYmplY3RU
b1N0cmluZ1ZhbHVlKFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkpIGNvbnN0OworICAgIHZvaWQgc2V0
T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiBiYXNl
U3RydWN0dXJlLCBKU1ZhbHVlLCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5LCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKIAogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkUHJvcGVydHlO
YW1lRW51bWVyYXRvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51
bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOwpAQCAtMTA1LDEyICsxMTEs
MTcgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICBmcmllbmQgY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7
CiAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50OwogCi0gICAgdm9pZCBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsK
LQogICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgU3RydWN0dXJlKik7CiAKKyAgICB2b2lkIGNs
ZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5KTsKKyAgICB2b2lk
IHNldE9iamVjdFRvU3RyaW5nVmFsdWVTbG93KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1
cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTVmFsdWUsIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXksIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworCisgICAgT2JqZWN0VG9TdHJpbmdDYWNoZSYgZW5zdXJlT2JqZWN0
VG9TdHJpbmdDYWNoZSgpOworICAgIE9iamVjdFRvU3RyaW5nQ2FjaGUmIGVuc3VyZU9iamVjdFRv
U3RyaW5nQ2FjaGVTbG93KCk7CisgICAgYm9vbCBjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUo
UHJvcGVydHlBY2Nlc3NDYWNoZUtleSk7CisgICAgdm9pZCBnaXZlVXBPbk9iamVjdFRvU3RyaW5n
Q2FjaGUoUHJvcGVydHlBY2Nlc3NDYWNoZUtleSk7CisKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3ByZXZpb3VzOwotICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0
cmluZ1ZhbHVlOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzb21lIHN0b3J5IGZvciBj
bGVhcmluZyB0aGVzZSBwcm9wZXJ0eSBuYW1lcyBjYWNoZXMgaW4gR0MuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjY1OQogICAgIFdyaXRlQmFycmll
cjxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+IG1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRv
cjsKQEAgLTExOCw4ICsxMjksNyBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQ
dHI8V2F0Y2hwb2ludFNldD4sIFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNo
cG9pbnRNYXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9y
ZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzOwotICAgIEJhZzxPYmplY3RUb1N0cmluZ0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludD4gbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlV2F0Y2hwb2ludFNl
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFs
dWVXYXRjaHBvaW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RUb1N0cmluZ0NhY2hlPiBt
X29iamVjdFRvU3RyaW5nQ2FjaGU7CiAgICAgQm94PElubGluZVdhdGNocG9pbnRTZXQ+IG1fcG9s
eVByb3RvV2F0Y2hwb2ludDsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG1fbWF4T2Zmc2V0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YUlubGluZXMuaAppbmRleCA5ZWZhMDkwMWVjYjc1YWVhNTAwZjdmNTliOTU0YWRlNjFlM2FhNTIx
Li43MTA2NDMwY2MxYjJjOWVmZWUyODNkZTAyYTFjZTk1YWVkMzVlMmM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaApAQCAtMzIsNiArMzIsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBQcm9w
ZXJ0eUFjY2Vzc1dhdGNocG9pbnRzIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisgICAgflByb3BlcnR5QWNjZXNzV2F0Y2hwb2ludHMoKTsKKyAgICBCYWc8T2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fbWlzc1dhdGNocG9pbnRzOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludD4gbV9wcmVzZW50V2F0Y2hwb2ludDsKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92YWx1ZTsKK307CisKK3N0cnVjdCBPYmplY3RUb1N0cmluZ0NhY2hlIHsKKyAgICBX
VEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgUHJvcGVydHlBY2Nlc3NXYXRjaHBv
aW50cyBtX2NhY2hlW251bWJlck9mUHJvcGVydHlBY2Nlc3NDYWNoZUtleXNdOworfTsKKwogaW5s
aW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgc3RydWN0dXJl
KTsKQEAgLTQyLDEzICs1NSwxOCBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xl
YXJQcmV2aW91c0lEKCkKICAgICBtX3ByZXZpb3VzLmNsZWFyKCk7CiB9CiAKLWlubGluZSBKU1N0
cmluZyogU3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUoKSBjb25zdAoraW5s
aW5lIEpTVmFsdWUgU3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUoUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleSBrZXkpIGNvbnN0CiB7Ci0gICAgYXV0byogdmFsdWUgPSBtX29iamVj
dFRvU3RyaW5nVmFsdWUudW52YWxpZGF0ZWRHZXQoKTsKLSAgICBpZiAodmFsdWUgPT0gb2JqZWN0
VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAodmFsdWUpCi0gICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1ZSk7CisgICAgYXV0byogY2Fj
aGUgPSBtX29iamVjdFRvU3RyaW5nQ2FjaGUuZ2V0KCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FjaGUtPm1fY2FjaGVb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldLm1fdmFsdWUuZ2V0KCk7CisgICAgaWYgKHZhbHVl
ID09IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICB2YWxpZGF0ZUNlbGwoYXNDZWxsKHZhbHVlKSk7CisjZW5kaWYKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTk2LDQgKzExNCwyOCBAQCBpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkUHJvcGVydHlOYW1lcyhWTSYgdm0sIENhY2hlZFByb3Bl
cnR5TmFtZQogICAgIG1fY2FjaGVkUHJvcGVydHlOYW1lc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
a2luZCldLnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0
dXJlUmFyZURhdGE6OmNhbkNhY2hlT2JqZWN0VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vzc0Nh
Y2hlS2V5IGtleSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhy
ZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGF1dG8qIGNhY2hlID0gbV9vYmplY3RUb1N0cmlu
Z0NhY2hlLmdldCgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBjYWNoZS0+bV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1
ZS5nZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKTsKK30KKworaW5s
aW5lIE9iamVjdFRvU3RyaW5nQ2FjaGUmIFN0cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVPYmplY3RU
b1N0cmluZ0NhY2hlKCkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAh
VGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGlmIChhdXRvKiBjYWNoZSA9IG1fb2JqZWN0
VG9TdHJpbmdDYWNoZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuICpjYWNoZTsKKyAgICByZXR1cm4g
ZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZVNsb3coKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0
dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwgSlNWYWx1ZSB2YWx1ZSwg
UHJvcGVydHlBY2Nlc3NDYWNoZUtleSBrZXksIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBpZiAoIWNhbkNhY2hlT2JqZWN0VG9TdHJpbmdWYWx1ZShrZXkpKQorICAgICAgICByZXR1
cm47CisgICAgcmV0dXJuIHNldE9iamVjdFRvU3RyaW5nVmFsdWVTbG93KGdsb2JhbE9iamVjdCwg
dm0sIG93blN0cnVjdHVyZSwgdmFsdWUsIGtleSwgc2xvdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407747</attachid>
            <date>2020-09-02 00:38:46 -0700</date>
            <delta_ts>2020-09-02 14:16:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200902003845.patch</filename>
            <type>text/plain</type>
            <size>36973</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NGE4MThkNDRiNjM5OTA3NGM4Y2I5MTU5ZWRkZWEyOTI2N2U1MDc5Li4wODNmMTYxOGIwZjQxNTA3
OTYwMTMyMzZmYmE0NjYwYWFiZWJmMzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphcnJheVRvU3RyaW5nV2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpvYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24gY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjYWxsVG9QcmltaXRp
dmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvUHJpbWl0aXZlIGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok9iamVj
dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1
bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFRvU3RyaW5nQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZSk6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJh
cmVEYXRhOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6
OmVuc3VyZU9iamVjdFRvU3RyaW5nQ2FjaGVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OmdpdmVVcE9uT2JqZWN0VG9TdHJpbmdDYWNoZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlU2xvdyk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAg
ICAgICAoSlNDOjpPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6aGFuZGxlRmlyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpz
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFs
dWUgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FuQ2FjaGVPYmpl
Y3RUb1N0cmluZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmVuc3Vy
ZU9iamVjdFRvU3RyaW5nQ2FjaGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6
c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZSk6CisKIDIwMjAtMDgtMzEgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzb21lIFB0clRhZyBkZWJ1Z2dpbmcgY29k
ZSBmcm9tIHJlbGVhc2UgYnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGViNWMyYzAwZGVlMDA3NjNjNjE1ZWMxOGY4YzRm
NWIyYTZhMmMyMDYuLjUyNzZlYWU0NWEwMjMzZjg2ZDQ4YjA0Y2YxMDRiNDlmNmJmYTNiNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
QEAgLTQ4MCw2ICs0ODAsNyBAQCBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TQogICAgICwgbV9zZXRB
ZGRXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKICAgICAsIG1fYXJyYXlTcGVjaWVzV2F0Y2hwb2lu
dFNldChDbGVhcldhdGNocG9pbnQpCiAgICAgLCBtX2FycmF5Sm9pbldhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKQorICAgICwgbV9hcnJheVRvU3RyaW5nV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCiAg
ICAgLCBtX251bWJlclRvU3RyaW5nV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCiAgICAgLCBtX3J1
bnRpbWVGbGFncygpCiAgICAgLCBtX3N0YWNrVHJhY2VMaW1pdChPcHRpb25zOjpkZWZhdWx0RXJy
b3JTdGFja1RyYWNlTGltaXQoKSkKQEAgLTYxMCw2ICs2MTEsMTAgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6aW5pdChWTSYgdm0pCiAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IG51bGxw
dHI7CiAgICAgSlNGdW5jdGlvbiogaGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9IG51bGxwdHI7
CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKHZtLCB0aGlz
LCAmY2FsbEZ1bmN0aW9uLCAmYXBwbHlGdW5jdGlvbiwgJmhhc0luc3RhbmNlU3ltYm9sRnVuY3Rp
b24pOworICAgIG1fb2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLmluaXRMYXRlcigKKyAgICAg
ICAgW10gKGNvbnN0IEluaXRpYWxpemVyPEpTRnVuY3Rpb24+JiBpbml0KSB7CisgICAgICAgICAg
ICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwgaW5pdC5vd25lciwgMCwgaW5p
dC52bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5zdHJpbmcoKSwgb2JqZWN0UHJvdG9GdW5jVG9T
dHJpbmcsIE5vSW50cmluc2ljKSk7CisgICAgICAgIH0pOwogICAgIG1fYXJyYXlQcm90b1RvU3Ry
aW5nRnVuY3Rpb24uaW5pdExhdGVyKAogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNG
dW5jdGlvbj4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0
ZShpbml0LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
LnN0cmluZygpLCBhcnJheVByb3RvRnVuY1RvU3RyaW5nLCBOb0ludHJpbnNpYykpOwpAQCAtMTM3
NCw2ICsxMzc5LDExIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMg
Q29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIG1fYXJyYXlQ
cm90b3R5cGVKb2luV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0UHJvcGVydHlDaGFuZ2VB
ZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+KHRoaXMsIGNvbmRpdGlvbiwg
bV9hcnJheUpvaW5XYXRjaHBvaW50U2V0KTsKICAgICAgICAgbV9hcnJheVByb3RvdHlwZUpvaW5X
YXRjaHBvaW50LT5pbnN0YWxsKHZtKTsKICAgICB9CisgICAgeworICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gPSBzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludCh0aGlzLCB0
aGlzLT5hcnJheVByb3RvdHlwZSgpLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZyk7CisgICAg
ICAgIG1fYXJyYXlQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQgPSBtYWtlVW5pcXVlPE9iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+Pih0
aGlzLCBjb25kaXRpb24sIG1fYXJyYXlUb1N0cmluZ1dhdGNocG9pbnRTZXQpOworICAgICAgICBt
X2FycmF5UHJvdG90eXBlVG9TdHJpbmdXYXRjaHBvaW50LT5pbnN0YWxsKHZtKTsKKyAgICB9CiAK
ICAgICB7CiAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IHNldHVw
QWRhcHRpdmVXYXRjaHBvaW50KHRoaXMsIG1hcEl0ZXJhdG9yUHJvdG90eXBlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uZXh0KTsKQEAgLTE4OTUsNiArMTkwNSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAg
IHRoaXNPYmplY3QtPm1fcGFyc2VJbnRGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlz
T2JqZWN0LT5tX3BhcnNlRmxvYXRGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2Jq
ZWN0LT5tX29iamVjdFByb3RvVG9TdHJpbmdGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsKICAgICB0
aGlzT2JqZWN0LT5tX2FycmF5UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwog
ICAgIHRoaXNPYmplY3QtPm1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLnZpc2l0KHZpc2l0b3Ip
OwogICAgIHRoaXNPYmplY3QtPm1fZXZhbEZ1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggYTc1NWMz
MTEwNGQzODhlMjU0ODdjZjc0ZjAxNmYxMDc2NmFlMTNiNC4uNDYyY2Q4YzgxYWFjOGQ5MWMzOWJj
YWNkMzc4OWU0OTQxZjQwZmVmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0zMTMsNiArMzEzLDcgQEAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX3BhcnNlSW50RnVuY3Rpb247CiAgICAgTGF6
eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX3BhcnNlRmxvYXRGdW5jdGlv
bjsKIAorICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9vYmpl
Y3RQcm90b1RvU3RyaW5nRnVuY3Rpb247CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0
LCBKU0Z1bmN0aW9uPiBtX2FycmF5UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uOwogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9hcnJheVByb3RvVmFsdWVzRnVuY3Rp
b247CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX2V2YWxG
dW5jdGlvbjsKQEAgLTQ3NCwxMSArNDc1LDEzIEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVi
bGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIElubGluZVdhdGNocG9pbnRTZXQg
bV9zZXRBZGRXYXRjaHBvaW50U2V0OwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hcnJheVNw
ZWNpZXNXYXRjaHBvaW50U2V0OwogICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hcnJheUpvaW5X
YXRjaHBvaW50U2V0OworICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hcnJheVRvU3RyaW5nV2F0
Y2hwb2ludFNldDsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fbnVtYmVyVG9TdHJpbmdXYXRj
aHBvaW50U2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0
aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheUNvbnN0cnVjdG9yU3Bl
Y2llc1dhdGNocG9pbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdl
QWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRTZXQ+PiBtX2FycmF5UHJvdG90eXBl
Q29uc3RydWN0b3JXYXRjaHBvaW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9hcnJheVBy
b3RvdHlwZVN5bWJvbEl0ZXJhdG9yV2F0Y2hwb2ludDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
IG1fYXJyYXlQcm90b3R5cGVKb2luV2F0Y2hwb2ludDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+
IG1fYXJyYXlQcm90b3R5cGVUb1N0cmluZ1dhdGNocG9pbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNocG9pbnRT
ZXQ+PiBtX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxP
YmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0
Pj4gbV9tYXBQcm90b3R5cGVTeW1ib2xJdGVyYXRvcldhdGNocG9pbnQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50PElubGluZVdhdGNo
cG9pbnRTZXQ+PiBtX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dFdhdGNocG9pbnQ7CkBAIC01MDEs
NiArNTA0LDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCB7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0QWRkV2F0Y2hwb2ludFNl
dCgpIHsgcmV0dXJuIG1fc2V0QWRkV2F0Y2hwb2ludFNldDsgfQogICAgIElubGluZVdhdGNocG9p
bnRTZXQmIGFycmF5U3BlY2llc1dhdGNocG9pbnRTZXQoKSB7IHJldHVybiBtX2FycmF5U3BlY2ll
c1dhdGNocG9pbnRTZXQ7IH0KICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBhcnJheUpvaW5XYXRj
aHBvaW50U2V0KCkgeyByZXR1cm4gbV9hcnJheUpvaW5XYXRjaHBvaW50U2V0OyB9CisgICAgSW5s
aW5lV2F0Y2hwb2ludFNldCYgYXJyYXlUb1N0cmluZ1dhdGNocG9pbnRTZXQoKSB7IHJldHVybiBt
X2FycmF5VG9TdHJpbmdXYXRjaHBvaW50U2V0OyB9CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYg
bnVtYmVyVG9TdHJpbmdXYXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTYzMyw2ICs2MzcsNyBAQCBjbGFzcyBKU0dsb2Jh
bE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKIAogICAgIEpTRnVu
Y3Rpb24qIGV2YWxGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbEZ1bmN0aW9uLmdldCh0
aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIHRocm93VHlwZUVycm9yRnVuY3Rpb24oKSBjb25zdDsK
KyAgICBKU0Z1bmN0aW9uKiBvYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFByb3RvVG9TdHJpbmdGdW5jdGlvbi5nZXQodGhpcyk7IH0KICAgICBKU0Z1
bmN0aW9uKiBhcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXJy
YXlQcm90b1RvU3RyaW5nRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlvbiogYXJy
YXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvVmFsdWVz
RnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlvbiogYXJyYXlQcm90b1ZhbHVlc0Z1
bmN0aW9uQ29uY3VycmVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvVmFsdWVzRnVu
Y3Rpb24uZ2V0Q29uY3VycmVudGx5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAppbmRleCA1MGFkMGE2YmJjMDRhYjZmNGU2MDNmNjNlM2RhNzJlOGZlMDky
YzQ2Li4zNTY2OWZmZjkxMDYzNDVhN2I2MzI1YmYyZmE4NjFlODJlNGNhOGE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0yMTQ0LDMzICsyMTQ0LDQ0
IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgfQogfQogCi1lbnVtIGNsYXNzIFR5cGVI
aW50TW9kZSB7IFRha2VzSGludCwgRG9lc05vdFRha2VIaW50IH07Ci0KLXRlbXBsYXRlPFR5cGVI
aW50TW9kZSBtb2RlID0gVHlwZUhpbnRNb2RlOjpEb2VzTm90VGFrZUhpbnQ+Cit0ZW1wbGF0ZTxQ
cm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleT4KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQp
OwotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUgZml4ZWQ6IHJkYXI6Ly9w
cm9ibGVtLzMzNDUxODQwCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NzEwOS4KLSAgICBjb25zdGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBt
b2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50OwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSBj
b25zdF9jYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVsbFN0
cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gaGFzUHJvcGVydHkgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2Nv
cGUuZXhjZXB0aW9uKCkpOwotICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpICYm
IG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQpCisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KGtleSk7CisgICAg
aWYgKCFmdW5jdGlvbikgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOworICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgd2hlbiB3ZSBoYXZlIGZpeGVkOiByZGFyOi8vcHJvYmxlbS8zMzQ1MTg0MAorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTA5Lgor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBrZXkgPT0gUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleTo6VG9QcmltaXRpdmU7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkg
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVs
bFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIGZ1
bmN0aW9uID0gaGFzUHJvcGVydHkgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5z
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9iamVjdCwgdm0sIGZ1bmN0aW9uLCBrZXksIHNs
b3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24o
KSk7CisgICAgfQorICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworCisgICAgaWYgY29uc3RleHByIChrZXkgPT0gUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleTo6VG9TdHJpbmcpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uID09IGdsb2Jh
bE9iamVjdC0+b2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlm
IChKU1N0cmluZyogcmVzdWx0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vYmplY3RUb1N0cmlu
Z1ZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24pOwogICAg
IGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKSB7Ci0gICAgICAgIGlm
IChtb2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQorICAgICAgICBpZiBjb25zdGV4cHIg
KGtleSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2ZSkKICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9QcmltaXRpdmUg
aXMgbm90IGEgZnVuY3Rpb24sIHVuZGVmaW5lZCwgb3IgbnVsbCJfcyk7CiAgICAgICAgIHJldHVy
biBzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBj
YWxsQXJnczsKLSAgICBpZiAobW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2VzSGludCkgeworICAg
IGlmIGNvbnN0ZXhwciAoa2V5ID09IFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvUHJpbWl0aXZl
KSB7CiAgICAgICAgIEpTU3RyaW5nKiBoaW50U3RyaW5nID0gbnVsbHB0cjsKICAgICAgICAgc3dp
dGNoIChoaW50KSB7CiAgICAgICAgIGNhc2UgTm9QcmVmZXJlbmNlOgpAQCAtMjE5MCw4ICsyMjAx
LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWl0aXZlRnVuY3Rp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxs
KGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
b2JqZWN0KSwgY2FsbEFyZ3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICBBU1NFUlQoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKTsKLSAg
ICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBtb2RlID09IFR5cGVIaW50
TW9kZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgpIDogdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5lZCBhbiBvYmplY3QiX3Mp
OworICAgIGlmIChyZXN1bHQuaXNPYmplY3QoKSkgeworICAgICAgICBpZiBjb25zdGV4cHIgKGtl
eSA9PSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2ZSkKKyAgICAgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3ltYm9sLnRvUHJpbWl0
aXZlIHJldHVybmVkIGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Cisg
ICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIyMDEsMjcgKzIyMTUsMjIgQEAgSlNW
YWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcmVmZXJyZWRQcmkKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2hhdGV2ZXIgZGVmYXVsdCB2YWx1ZSBtZXRob2RzIHRoZXJlIGFyZSBvbiBvYmpl
Y3QncyBwcm90b3R5cGUgY2hhaW4gYXJlCi0gICAgLy8gYmVpbmcgd2F0Y2hlZC4KLSAgICBmb3Ig
KGNvbnN0IEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIG9i
amVjdC0+c3RydWN0dXJlKHZtKS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVj
ZXNzYXJ5KHZtKTsKLQogICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVy
U3RyaW5nKSB7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFs
T2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CisgICAgICAg
IHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6
VG9TdHJpbmc+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcs
IGhpbnQpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBz
Y29wZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRp
dmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2Ys
IGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFByb3BlcnR5
QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVydHlO
YW1lcy0+dmFsdWVPZiwgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2VsbCgpKTsKICAgICAg
ICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCB0aGlz
LCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxs
VG9QcmltaXRpdmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpWYWx1ZU9mPihnbG9i
YWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOwogICAgICAg
ICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBzY29wZS5leGNlcHRpb24o
KSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9i
YWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKKyAgICAg
ICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5
OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
ZywgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8
IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMjI0Miw3ICsyMjUxLDcgQEAgSlNWYWx1
ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJl
ZmVycmVkUHJpbWl0aXZlVHkKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFR5cGVIaW50TW9kZTo6VGFrZXNIaW50PihnbG9i
YWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVm
ZXJyZWRUeXBlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248
UHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9QcmltaXRpdmU+KGdsb2JhbE9iamVjdCwgdGhpcywg
dm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wsIHByZWZlcnJlZFR5cGUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKHZhbHVlKQogICAgICAg
ICByZXR1cm4gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAppbmRleCA0MTcwZDI0ODNmNWZjODIwZTQ5ZWMzNWZhODBhMDNiMjBk
OGE1YWIxLi5kMzNiODFmYjIzNzMyNjBmNmJhMTI3Yjc2OWU2ODAwMGIxYzc5OTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKQEAg
LTUzLDcgKzUzLDcgQEAgdm9pZCBPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICAKLSAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZywgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZywgb2JqZWN0UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMCk7CiAgICAg
SlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmhhc093blByb3BlcnR5LCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDEsIEhh
c093blByb3BlcnR5SW50cmluc2ljKTsKQEAgLTM1MCw3ICszNTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplYwogCiAgICAgSlNTdHJpbmcqIGpzUmVzdWx0ID0ganNTdHJpbmcoZ2xvYmFsT2Jq
ZWN0LCB2bS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nU3RhcnQoKSwganNUYWcsIHZtLnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoJ10nKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmpl
Y3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9iamVjdCwgdm0sIGpzUmVzdWx0LCBzbG90KTsKKyAgICB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9i
amVjdCwgdm0sIGpzUmVzdWx0LCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZ1RhZywg
c2xvdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Jlc3VsdCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAppbmRleCAwMDll
ZjU4ZGYyMTY5NDhjY2EyYmVkNTg2NmFiZDg4MTgxMzI1ZDMzLi5kYzYzMzMyYWU4NzIwOGNkNzY5
ZDljOGNiNzM1ZDg2NjcyYjU3NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuY3BwCkBAIC01Nyw3ICs1NywxOSBAQCB2b2lkIE9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25z
dCBGaXJlRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdHJ1Y3R1cmVSYXJlRGF0
YS0+Y2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7CisgICAgUHJvcGVydHlBY2Nlc3NDYWNoZUtl
eSBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZ1RhZzsKKyAgICBpZiAobV9r
ZXkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKQor
ICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1N0cmluZ1RhZzsKKyAgICBl
bHNlIGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkp
CisgICAgICAgIGtleSA9IFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nOworICAgIGVs
c2UgaWYgKG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKQor
ICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpWYWx1ZU9mOworICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQobV9rZXkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9Qcmlt
aXRpdmVTeW1ib2wuaW1wbCgpKTsKKyAgICAgICAga2V5ID0gUHJvcGVydHlBY2Nlc3NDYWNoZUtl
eTo6VG9QcmltaXRpdmU7CisgICAgfQorCisgICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xlYXJP
YmplY3RUb1N0cmluZ1ZhbHVlKGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAzODk5ZDE2ZmJiNzFmMTNm
ZjA0YTNhYWNjZjdiYjQzNWEyNzM2ZTI3Li5lNDNjYmMxNDYyY2E0ZTQ2ZGJjZTM4OWM3MjE4MTE3
ODRmZjg1OTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApA
QCAtNTMxLDEyICs1MzEsMTggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpCiAgICAgewotICAgICAg
ICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIEpTVmFsdWUgY2FjaGVkID0gY2FjaGVkU3Bl
Y2lhbFByb3BlcnR5KFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFnKTsKKyAgICAg
ICAgaWYgKCFjYWNoZWQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuIHJhcmVEYXRhKCktPm9iamVjdFRvU3RyaW5nVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU1N0cmluZyo+KGNhY2hlZC5hc0NlbGwoKSk7CiAgICAgfQotCi0gICAgdm9p
ZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBKU1N0cmluZyog
dmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKKyAgICBK
U1ZhbHVlIGNhY2hlZFNwZWNpYWxQcm9wZXJ0eShQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSkK
KyAgICB7CisgICAgICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgIHJldHVybiByYXJlRGF0YSgpLT5vYmplY3RUb1N0cmluZ1ZhbHVl
KGtleSk7CisgICAgfQorICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9i
amVjdCosIFZNJiwgSlNWYWx1ZSwgUHJvcGVydHlBY2Nlc3NDYWNoZUtleSwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1fY2xhc3NJbmZvOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAxY2Y2Zjg3ZmI5MDg3ZGI5YTlkNGM0YzUwYThlYmEz
YzdjMDEwMWU2Li43MDFkYzBkMWFjZDU4NzYwNjcwNjBhNzM1MzY2ZTc5YjhjZmNlZmQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBA
IC00MjcsMTEgKzQyNywxMSBAQCBpbmxpbmUgc2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2Fw
YWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSkKICAgICByZXR1cm4gY3VycmVudENhcGFjaXR5
ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogfQogCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNl
dE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCBKU1N0cmluZyogdmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTeW1ib2xT
bG90KQoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleSBrZXksIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAo
IWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwotICAgIHJhcmVE
YXRhKCktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpcywgdmFs
dWUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CisgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZShnbG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwga2V5LCBzbG90KTsKIH0K
IAogdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5j
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuY3BwCmluZGV4IDVkOWViMzgwMjJmMDgxZmRmYWNmYzI5OGE5OTY2ZDVhNjFlNGM2YTQuLmU1
Y2I0NjRjZWVkMzFiN2Y3ZTNkN2E0NDNlNDhmNWE3NjFmMzRkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKQEAgLTc0LDEw
ICs3NCwxMyBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJl
dmlvdXMpOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+b2JqZWN0
VG9TdHJpbmdWYWx1ZSgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9vYmplY3RUb1N0cmluZ0Nh
Y2hlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9m
UHJvcGVydHlBY2Nlc3NDYWNoZUtleXM7ICsraW5kZXgpCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPm9iamVjdFRvU3RyaW5nVmFsdWUoc3RhdGljX2Nh
c3Q8UHJvcGVydHlBY2Nlc3NDYWNoZUtleT4oaW5kZXgpKSk7CisgICAgfQogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZDYWNoZWRQcm9wZXJ0eU5h
bWVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8qIGNhY2hlZCA9IHRoaXNPYmplY3QtPm1fY2Fj
aGVkUHJvcGVydHlOYW1lc1tpbmRleF0udW52YWxpZGF0ZWRHZXQoKTsKKyAgICAgICAgYXV0byog
Y2FjaGVkID0gdGhpc09iamVjdC0+bV9jYWNoZWRQcm9wZXJ0eU5hbWVzW2luZGV4XS5nZXQoKTsK
ICAgICAgICAgaWYgKGNhY2hlZCAhPSBjYWNoZWRQcm9wZXJ0eU5hbWVzU2VudGluZWwoKSkKICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoY2FjaGVkKTsKICAgICB9CkBAIC05
NywzMyArMTAwLDYyIEBAIGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0CiAgICAgU3RydWN0dXJlUmFy
ZURhdGEqIG1fc3RydWN0dXJlUmFyZURhdGE7CiB9OwogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRh
OjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgU3RydWN0dXJlKiBvd25TdHJ1Y3R1cmUsIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJv
cGVydHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitQcm9wZXJ0eUFjY2Vzc1dhdGNocG9p
bnRzOjp+UHJvcGVydHlBY2Nlc3NXYXRjaHBvaW50cygpID0gZGVmYXVsdDsKKworT2JqZWN0VG9T
dHJpbmdDYWNoZSYgU3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZU9iamVjdFRvU3RyaW5nQ2FjaGVT
bG93KCkKIHsKLSAgICBpZiAoY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1ZhbHVlKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjpt
YXlCZUdDVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9vYmplY3RUb1N0cmluZ0NhY2hlKTsKKyAg
ICBhdXRvIGNhY2hlID0gbWFrZVVuaXF1ZTxPYmplY3RUb1N0cmluZ0NhY2hlPigpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIEV4cG9zZSB2YWxpZCBzdHJ1Y3QgZm9yIGNvbmN1cnJl
bnQgdGhyZWFkcyBpbmNsdWRpbmcgY29uY3VycmVudCBjb21waWxlcnMuCisgICAgbV9vYmplY3RU
b1N0cmluZ0NhY2hlID0gV1RGTW92ZShjYWNoZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsgLy8gU3RvcmUgdG8gdGhlIGZpZWxkIG9mIHRoaXMgc3RydWN0IHNob3VsZCBiZSB2aXNpYmxl
IHRvIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvcnMgYWZ0ZXIgc3RydWN0IGlzIHZpc2libGUuCisg
ICAgcmV0dXJuICptX29iamVjdFRvU3RyaW5nQ2FjaGUuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjpnaXZlVXBPbk9iamVjdFRvU3RyaW5nQ2FjaGUoUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleSBrZXkpCit7CisgICAgZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZSgpLm1f
Y2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldLm1fdmFsdWUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSk7Cit9CiAKK3ZvaWQg
U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWVTbG93KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBvd25TdHJ1Y3R1cmUsIEpTVmFs
dWUgdmFsdWUsIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG51bGxwdHI7CisgICAgc3dp
dGNoIChrZXkpIHsKKyAgICBjYXNlIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3RyaW5nVGFn
OgorICAgICAgICB1aWQgPSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBs
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvcGVydHlBY2Nlc3NDYWNoZUtleTo6VG9T
dHJpbmc6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpWYWx1ZU9m
OgorICAgICAgICB1aWQgPSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2ZToK
KyAgICAgICAgdWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wuaW1wbCgp
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgIGlmICh0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNWYWx1ZSgpKSB7
CisgICAgaWYgKHNsb3QuaXNWYWx1ZSgpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0
aGUgb3duIHByb3BlcnR5IGNhc2Ugb2YgU3ltYm9sLnRvU3RyaW5nVGFnIGJlY2F1c2Ugd2Ugd291
bGQgbmV2ZXIga25vdyBpZiBhIG5ldwogICAgICAgICAvLyBvYmplY3QgdHJhbnNpdGlvbmluZyB0
byB0aGUgc2FtZSBzdHJ1Y3R1cmUgaGFkIHRoZSBzYW1lIHZhbHVlIHN0b3JlZCBpbiBTeW1ib2wu
dG9TdHJpbmdUYWcuCiAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgdGhpcyBpcyBhIHN1cGVyIHVu
bGlrZWx5IGNhc2UgYW55d2F5LgotICAgICAgICBpZiAoIXRvU3RyaW5nVGFnU3ltYm9sU2xvdC5p
c0NhY2hlYWJsZSgpIHx8IHRvU3RyaW5nVGFnU3ltYm9sU2xvdC5zbG90QmFzZSgpLT5zdHJ1Y3R1
cmUodm0pID09IG93blN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkg
fHwgc2xvdC5zbG90QmFzZSgpLT5zdHJ1Y3R1cmUodm0pID09IG93blN0cnVjdHVyZSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotCiAgICAgICAgIC8vIFRoaXMgd2lsbCBub3QgY3JlYXRlIGEgY29u
ZGl0aW9uIGZvciB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYnV0IHRoYXQgaXMgZ29vZCBiZWNhdXNl
IHdlIGtub3cgdGhlIFN5bWJvbC50b1N0cmluZ1RhZwogICAgICAgICAvLyBpcyBub3Qgb24gdGhl
IG93blN0cnVjdHVyZSBzbyB3ZSB3aWxsIHRyYW5zaXNpdGlvbiBpZiBvbmUgaXMgYWRkZWQgYW5k
IHRoaXMgY2FjaGUgd2lsbCBubyBsb25nZXIgYmUgdXNlZC4KLSAgICAgICAgcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdG9TdHJpbmdUYWdTeW1ib2xT
bG90LnNsb3RCYXNlKCkpOwotICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1
Y3R1cmUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdC5zbG90QmFzZSgpLCB2bS5wcm9wZXJ0eU5hbWVz
LT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpOworICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNo
aW5nKGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCkpOworICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwg
dWlkKTsKICAgICAgICAgQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlv
blNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKTsKLSAgICB9IGVsc2UgaWYgKHRvU3RyaW5n
VGFnU3ltYm9sU2xvdC5pc1Vuc2V0KCkpIHsKKyAgICB9IGVsc2UgaWYgKHNsb3QuaXNVbnNldCgp
KSB7CiAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1
Y3R1cmUsIG51bGxwdHIpOwotICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eU1pc3Modm0sIHRoaXMsIGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpOworICAgICAgICBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Modm0sIHRoaXMsIGds
b2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCB1aWQpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZ2l2ZVVw
T25PYmplY3RUb1N0cmluZ1ZhbHVlQ2FjaGUoKTsKKyAgICAgICAgZ2l2ZVVwT25PYmplY3RUb1N0
cmluZ0NhY2hlKGtleSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNiw0NyArMTY4
LDU3IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mCiAKICAgICAgICAgICAgIC8vIFRoZSBlcXVp
dmFsZW5jZSBjb25kaXRpb24gd29uJ3QgYmUgd2F0Y2hhYmxlIGlmIHdlIGhhdmUgYWxyZWFkeSBz
ZWVuIGEgcmVwbGFjZW1lbnQuCiAgICAgICAgICAgICBpZiAoIWVxdWl2Q29uZGl0aW9uLmlzV2F0
Y2hhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVD
YWNoZSgpOworICAgICAgICAgICAgICAgIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdDYWNoZShrZXkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmICghY29uZGl0aW9uLmlzV2F0Y2hhYmxlKCkpIHsKLSAgICAgICAgICAgIGdpdmVVcE9uT2Jq
ZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3Ry
aW5nQ2FjaGUoa2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIEFTU0VSVChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpOworICAg
IGF1dG8mIGNhY2hlID0gZW5zdXJlT2JqZWN0VG9TdHJpbmdDYWNoZSgpLm1fY2FjaGVbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGtleSldOwogICAgIGZvciAoT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
Y29uZGl0aW9uIDogY29uZGl0aW9uU2V0KSB7CiAgICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0
aW9uKCkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgewotICAgICAgICAg
ICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQgPSBtYWtl
VW5pcXVlPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50PihlcXVpdkNvbmRpdGlvbiwgdGhpcyk7Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hwb2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgICAg
ICBjYWNoZS5tX3ByZXNlbnRXYXRjaHBvaW50ID0gbWFrZVVuaXF1ZTxPYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4oZXF1aXZDb25kaXRpb24sIHRo
aXMpOworICAgICAgICAgICAgY2FjaGUubV9wcmVzZW50V2F0Y2hwb2ludC0+aW5zdGFsbCh2bSk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlV2F0
Y2hwb2ludFNldC5hZGQoY29uZGl0aW9uLCB0aGlzKS0+aW5zdGFsbCh2bSk7CisgICAgICAgICAg
ICBjYWNoZS5tX21pc3NXYXRjaHBvaW50cy5hZGQoY29uZGl0aW9uLCB0aGlzKS0+aW5zdGFsbCh2
bSk7CiAgICAgfQotCi0gICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgdGhpcywgdmFs
dWUpOworICAgIGNhY2hlLm1fdmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiB9CiAKLXZvaWQg
U3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpCit2b2lkIFN0cnVj
dHVyZVJhcmVEYXRhOjpjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoUHJvcGVydHlBY2Nlc3NDYWNo
ZUtleSBrZXkpCiB7Ci0gICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlV2F0Y2hwb2ludFNldC5j
bGVhcigpOwotICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBv
aW50LnJlc2V0KCk7Ci0gICAgaWYgKCFjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUoKSkKLSAg
ICAgICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLmNsZWFyKCk7CisgICAgYXV0byogb2JqZWN0VG9T
dHJpbmdDYWNoZSA9IG1fb2JqZWN0VG9TdHJpbmdDYWNoZS5nZXQoKTsKKyAgICBpZiAoIW9iamVj
dFRvU3RyaW5nQ2FjaGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBjYWNoZSA9IG9iamVj
dFRvU3RyaW5nQ2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldOworICAg
IGNhY2hlLm1fbWlzc1dhdGNocG9pbnRzLmNsZWFyKCk7CisgICAgY2FjaGUubV9wcmVzZW50V2F0
Y2hwb2ludC5yZXNldCgpOworICAgIGlmIChjYWNoZS5tX3ZhbHVlLmdldCgpICE9IEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKQorICAgICAgICBjYWNoZS5tX3ZhbHVlLmNsZWFy
KCk7CiB9CiAKIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJiB2bSkKIHsKLSAgICBpZiAobV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1
ZVdhdGNocG9pbnQpIHsKLSAgICAgICAgaWYgKCFtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZl
cnJlZFZhbHVlV2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7Ci0gICAgICAgICAg
ICBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBmb3IgKGF1dG8qIHdhdGNocG9pbnQgOiBtX29iamVjdFRvU3RyaW5n
QWRhcHRpdmVXYXRjaHBvaW50U2V0KSB7Ci0gICAgICAgIGlmICghd2F0Y2hwb2ludC0+a2V5KCku
aXNTdGlsbExpdmUodm0pKSB7Ci0gICAgICAgICAgICBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9vYmplY3RUb1N0cmluZ0NhY2hlKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleXM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIFByb3BlcnR5QWNjZXNz
Q2FjaGVLZXkga2V5ID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlBY2Nlc3NDYWNoZUtleT4oaW5kZXgp
OworICAgICAgICAgICAgYXV0byYgY2FjaGUgPSBtX29iamVjdFRvU3RyaW5nQ2FjaGUtPm1fY2Fj
aGVbaW5kZXhdOworICAgICAgICAgICAgaWYgKGNhY2hlLm1fcHJlc2VudFdhdGNocG9pbnQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNhY2hlLm1fcHJlc2VudFdhdGNocG9pbnQtPmtleSgpLmlz
U3RpbGxMaXZlKHZtKSkgeworICAgICAgICAgICAgICAgICAgICBjbGVhck9iamVjdFRvU3RyaW5n
VmFsdWUoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRvKiB3YXRjaHBvaW50IDog
Y2FjaGUubV9taXNzV2F0Y2hwb2ludHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdhdGNocG9p
bnQtPmtleSgpLmlzU3RpbGxMaXZlKHZtKSkgeworICAgICAgICAgICAgICAgICAgICBjbGVhck9i
amVjdFRvU3RyaW5nVmFsdWUoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTk0LDkgKzIzNiwyMCBAQCBib29sIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50Ojppc1ZhbGlkKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmVSYXJlRGF0YS0+aXNMaXZlKCk7CiB9CiAKLXZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUoVk0mLCBjb25zdCBGaXJl
RGV0YWlsJikKK3ZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikKIHsKLSAg
ICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKKyAgICBQ
cm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtleSA9IFByb3BlcnR5QWNjZXNzQ2FjaGVLZXk6OlRvU3Ry
aW5nVGFnOworICAgIGlmICh0aGlzLT5rZXkoKS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3BlcnR5QWNjZXNzQ2Fj
aGVLZXk6OlRvU3RyaW5nVGFnOworICAgIGVsc2UgaWYgKHRoaXMtPmtleSgpLnVpZCgpID09IHZt
LnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkKKyAgICAgICAga2V5ID0gUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleTo6VG9TdHJpbmc7CisgICAgZWxzZSBpZiAodGhpcy0+a2V5KCkudWlkKCkg
PT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpCisgICAgICAgIGtleSA9IFByb3Bl
cnR5QWNjZXNzQ2FjaGVLZXk6OlZhbHVlT2Y7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCh0
aGlzLT5rZXkoKS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbC5p
bXBsKCkpOworICAgICAgICBrZXkgPSBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5OjpUb1ByaW1pdGl2
ZTsKKyAgICB9CisgICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xlYXJPYmplY3RUb1N0cmluZ1Zh
bHVlKGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKaW5kZXggODI5M2NkYzU5ZWQxNTdk
ZWNmNjcxZmFkZjFmMTk1MjU5NjBjNDQ3NC4uNWQ1ZDRkOWI5YWIxOWViNjQ5ZDQ5MGNmMjdlNjVh
OWQxZjhjNDNlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCkBAIC0zNSwxNCArMzUsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIE9i
amVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OwogY2xh
c3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CitjbGFzcyBPYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDsKK3N0cnVj
dCBPYmplY3RUb1N0cmluZ0NhY2hlOwogZW51bSBjbGFzcyBDYWNoZWRQcm9wZXJ0eU5hbWVzS2lu
ZCA6IHVpbnQ4X3QgewogICAgIEtleXMgPSAwLAogICAgIEdldE93blByb3BlcnR5TmFtZXMsCiB9
Owogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkNhY2hlZFByb3BlcnR5TmFtZXMg
PSAyOwogCitlbnVtIGNsYXNzIFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkgOiB1aW50OF90IHsKKyAg
ICBUb1N0cmluZ1RhZyA9IDAsCisgICAgVG9TdHJpbmcsCisgICAgVmFsdWVPZiwKKyAgICBUb1By
aW1pdGl2ZSwKK307CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mUHJvcGVydHlB
Y2Nlc3NDYWNoZUtleXMgPSA0OworCiBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkBAIC03MCwx
MSArNzksOCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgY2xl
YXJQcmV2aW91c0lEKCk7CiAKLSAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZN
JiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBKU1N0cmluZyogdmFsdWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKLSAgICB2b2lkIGdpdmVVcE9uT2JqZWN0
VG9TdHJpbmdWYWx1ZUNhY2hlKCkgeyBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0V2l0aG91dFdy
aXRlQmFycmllcihvYmplY3RUb1N0cmluZ0NhY2hlR2l2ZVVwTWFya2VyKCkpOyB9Ci0gICAgYm9v
bCBjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUoKSB7IHJldHVybiBtX29iamVjdFRvU3RyaW5n
VmFsdWUudW52YWxpZGF0ZWRHZXQoKSA9PSBvYmplY3RUb1N0cmluZ0NhY2hlR2l2ZVVwTWFya2Vy
KCk7IH0KLSAgICBzdGF0aWMgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5nQ2FjaGVHaXZlVXBNYXJr
ZXIoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNTdHJpbmcqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDEpKTsgfQorICAgIEpTVmFsdWUgb2JqZWN0VG9TdHJpbmdWYWx1ZShQcm9wZXJ0eUFjY2Vz
c0NhY2hlS2V5KSBjb25zdDsKKyAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9i
YWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgSlNWYWx1ZSwgUHJvcGVy
dHlBY2Nlc3NDYWNoZUtleSwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKICAg
ICB2b2lkIHNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqKTsKQEAgLTEwNSwxMiArMTExLDE3IEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVE
YXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogICAgIGZyaWVuZCBjbGFzcyBPYmplY3RU
b1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDsKIAotICAgIHZv
aWQgY2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7Ci0KICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShW
TSYsIFN0cnVjdHVyZSopOwogCisgICAgdm9pZCBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoUHJv
cGVydHlBY2Nlc3NDYWNoZUtleSk7CisgICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlU2xv
dyhKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBKU1ZhbHVl
LCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKworICAgIE9i
amVjdFRvU3RyaW5nQ2FjaGUmIGVuc3VyZU9iamVjdFRvU3RyaW5nQ2FjaGUoKTsKKyAgICBPYmpl
Y3RUb1N0cmluZ0NhY2hlJiBlbnN1cmVPYmplY3RUb1N0cmluZ0NhY2hlU2xvdygpOworICAgIGJv
b2wgY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1ZhbHVlKFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkpOwor
ICAgIHZvaWQgZ2l2ZVVwT25PYmplY3RUb1N0cmluZ0NhY2hlKFByb3BlcnR5QWNjZXNzQ2FjaGVL
ZXkpOworCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKLSAgICBXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgc29tZSBzdG9yeSBmb3IgY2xlYXJpbmcgdGhlc2UgcHJvcGVydHkgbmFt
ZXMgY2FjaGVzIGluIEdDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTI2NTkKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
PiBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3I7CkBAIC0xMTgsOCArMTI5LDcgQEAgY2xh
c3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBXVEY6Oklu
dEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsK
LSAgICBCYWc8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fb2Jq
ZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNocG9pbnRTZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9i
amVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX29i
amVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hwb2ludDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8T2JqZWN0VG9TdHJpbmdDYWNoZT4gbV9vYmplY3RUb1N0cmluZ0NhY2hlOwogICAg
IEJveDxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX3BvbHlQcm90b1dhdGNocG9pbnQ7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBtX21heE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKaW5kZXggOWVmYTA5MDFl
Y2I3NWFlYTUwMGY3ZjU5Yjk1NGFkZTYxZTNhYTUyMS4uMmJlYzZjYzc5MTAyNTc0Y2ZjZTIxODQ2
NTMwMzZkY2Q2MmIyMjA5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKQEAgLTMyLDYgKzMyLDE5IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NXYXRjaHBvaW50cyB7Cisg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIH5Qcm9wZXJ0eUFjY2Vzc1dh
dGNocG9pbnRzKCk7CisgICAgQmFnPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50PiBtX21pc3NXYXRjaHBvaW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fcHJlc2VudFdh
dGNocG9pbnQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7Cit9OworCitzdHJ1
Y3QgT2JqZWN0VG9TdHJpbmdDYWNoZSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOworICAgIFByb3BlcnR5QWNjZXNzV2F0Y2hwb2ludHMgbV9jYWNoZVtudW1iZXJPZlByb3Bl
cnR5QWNjZXNzQ2FjaGVLZXlzXTsKK307CisKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRh
OjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgbV9w
cmV2aW91cy5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CkBAIC00MiwxMyArNTUsMTggQEAgaW5s
aW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlvdXNJRCgpCiAgICAgbV9wcmV2
aW91cy5jbGVhcigpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVEYXRhOjpv
YmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3QKK2lubGluZSBKU1ZhbHVlIFN0cnVjdHVyZVJhcmVE
YXRhOjpvYmplY3RUb1N0cmluZ1ZhbHVlKFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5KSBjb25z
dAogewotICAgIGF1dG8qIHZhbHVlID0gbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnVudmFsaWRhdGVk
R2V0KCk7Ci0gICAgaWYgKHZhbHVlID09IG9iamVjdFRvU3RyaW5nQ2FjaGVHaXZlVXBNYXJrZXIo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICB2YWxp
ZGF0ZUNlbGwodmFsdWUpOworICAgIGF1dG8qIGNhY2hlID0gbV9vYmplY3RUb1N0cmluZ0NhY2hl
LmdldCgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IGNhY2hlLT5tX2NhY2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkp
XS5tX3ZhbHVlLmdldCgpOworICAgIGlmICh2YWx1ZSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNh
bGxlZU9iamVjdHMoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgdmFsaWRhdGVD
ZWxsKHZhbHVlLmFzQ2VsbCgpKTsKKyNlbmRpZgogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAt
OTYsNCArMTE0LDI4IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRQ
cm9wZXJ0eU5hbWVzKFZNJiB2bSwgQ2FjaGVkUHJvcGVydHlOYW1lCiAgICAgbV9jYWNoZWRQcm9w
ZXJ0eU5hbWVzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihraW5kKV0uc2V0KHZtLCB0aGlzLCBidXR0
ZXJmbHkpOwogfQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FuQ2FjaGVPYmpl
Y3RUb1N0cmluZ1ZhbHVlKFByb3BlcnR5QWNjZXNzQ2FjaGVLZXkga2V5KQoreworICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7Cisg
ICAgYXV0byogY2FjaGUgPSBtX29iamVjdFRvU3RyaW5nQ2FjaGUuZ2V0KCk7CisgICAgaWYgKCFj
YWNoZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNhY2hlLT5tX2NhY2hlW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXS5tX3ZhbHVlLmdldCgpICE9IEpTQ2VsbDo6c2Vlbk11
bHRpcGxlQ2FsbGVlT2JqZWN0cygpOworfQorCitpbmxpbmUgT2JqZWN0VG9TdHJpbmdDYWNoZSYg
U3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZU9iamVjdFRvU3RyaW5nQ2FjaGUoKQoreworICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7
CisgICAgaWYgKGF1dG8qIGNhY2hlID0gbV9vYmplY3RUb1N0cmluZ0NhY2hlLmdldCgpKQorICAg
ICAgICByZXR1cm4gKmNhY2hlOworICAgIHJldHVybiBlbnN1cmVPYmplY3RUb1N0cmluZ0NhY2hl
U2xvdygpOworfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVy
ZSogb3duU3RydWN0dXJlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eUFjY2Vzc0NhY2hlS2V5IGtl
eSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGlmICghY2FuQ2FjaGVPYmplY3RU
b1N0cmluZ1ZhbHVlKGtleSkpCisgICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gc2V0T2JqZWN0
VG9TdHJpbmdWYWx1ZVNsb3coZ2xvYmFsT2JqZWN0LCB2bSwgb3duU3RydWN0dXJlLCB2YWx1ZSwg
a2V5LCBzbG90KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407811</attachid>
            <date>2020-09-02 14:16:53 -0700</date>
            <delta_ts>2020-09-02 15:14:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200902141652.patch</filename>
            <type>text/plain</type>
            <size>66329</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NGE4MThkNDRiNjM5OTA3NGM4Y2I5MTU5ZWRkZWEyOTI2N2U1MDc5Li5mZTJmZjk3ZDg2OTVkMTVh
ODIzNDY2YmZlNWQxOWU4YWZjNzQyMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXaGVuIHRvUHJpbWl0aXZlIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBsb29rLXVw
IHRocmVlIHByb3BlcnRpZXMgYXQgbW9zdCB0byBwZXJmb3JtIG9wZXJhdGlvbi4gQW5kIHRoZXNl
IHNwZWNpYWwgcHJvcGVydGllcyBkbyBub3QgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBhdCBhbGwu
CisgICAgICAgIFdlIGZvdW5kIHRoYXQgU3BlZWRvbWV0ZXIyL0VtYmVySlMtRGVidWctVG9kb01W
QyBpcyB1c2luZyB2ZXJ5IG11Y2ggdGltZSBmb3IgdGhpcyBwcm9wZXJ0eSBsb29rLXVwLiBXZSBz
aG91bGQgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBpbiBTdHJ1Y3R1cmVSYXJlRGF0YSwgd2hpY2gK
KyAgICAgICAgc2hvdWxkIGJlIHNpbWlsYXIgdG8gQEB0b1N0cmluZ1RhZyAmIE9iamVjdCN0b1N0
cmluZyBjYWNoaW5nIG1lY2hhbmlzbS4KKworICAgICAgICBUaGlzIHBhdGNoIGdlbmVyYWxpemVz
IEBAdG9TdHJpbmdUYWcgJiBPYmplY3QjdG9TdHJpbmcgY2FjaGluZyBtZWNoYW5pc20gYXMgU3Bl
Y2lhbFByb3BlcnR5Q2FjaGUuIEFuZCB3ZSBhY2NlbGVyYXRlIHRvU3RyaW5nIC8gdmFsdWVPZiAv
IEBAdG9QcmltaXRpdmUgbG9vay11cHMgaW4KKyAgICAgICAgdG9QcmltaXRpdmUgd2l0aCB0aGlz
IGNhY2hpbmcgbWVjaGFuaXNtLgorCisgICAgICAgIFdlIGFsc28gcmVtb3ZlZCBwcm9wZXJ0eS1j
aGFuZ2Ugd2F0Y2hpbmcgaW4gSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUuIFRoaXMgd2Fz
IG9yaWdpbmFsbHkgaW50cm9kdWNlZCB0byBpbXBsZW1lbnQgaXNTdHJpbmdQcm90b3R5cGVNZXRo
b2RTYW5lLiBCdXQgcmlnaHQgbm93LAorICAgICAgICBpdCBpcyB1c2luZyBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVFcXVpdmFsZW5jZUNvbmN1cnJlbnRseSBhbmQgd2Ugbm8gbG9uZ2Vy
IG5lZWQgdG8gd2F0Y2ggaXQgaGVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVkIFNw
ZWVkb21ldGVyMi9FbWJlckpTLURlYnVnLVRvZG9NVkMgYnkgMTAlLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKiBieXRl
Y29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRTcGVjaWFsUHJvcGVy
dHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuY3BwLgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNp
YWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaC4KKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omlu
aXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6b2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2ZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0b1ByaW1pdGl2ZSBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVTcGVjaWFsUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVTcGVjaWFsUHJvcGVydHlDYWNoZVNsb3cpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25TcGVjaWFsUHJvcGVydHlD
YWNoZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZVNwZWNpYWxQcm9w
ZXJ0eVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJDYWNoZWRT
cGVjaWFsUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9w
ZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6CisgICAgICAgIChK
U0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9w
ZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0
VG9TdHJpbmdWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFRvU3RyaW5nQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpPYmplY3RUb1N0cmluZ0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
Ojppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0VG9TdHJpbmdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y2FjaGVkU3BlY2lhbFByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlUmFyZURhdGE6OmNhbkNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUgY29uc3QpOiBE
ZWxldGVkLgorCiAyMDIwLTA4LTMxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgc29tZSBQdHJUYWcgZGVidWdnaW5nIGNvZGUgZnJvbSByZWxlYXNlIGJ1
aWxkcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzY4OTU1ZjIyZGUyZjI2Mjc4
NmU3ZTY4MTNhMjQwOGI4ODdlODlkZi4uMzYxMGMyYTJhZjcxMTI2YjlmOWI5NDlhNDcyMzBhNjRj
MDgwNWI0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4NjIsNyArMTg2Miw3
IEBACiAJCUUzOUQ0NUY1MUQzOTAwNTYwMEIzQjM3NyAvKiBJbnRlcnByZXRlcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUQ5RDg0MUQz
OTAwMDYwMDY2NzI4MiAvKiBJbnRlcnByZXRlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzlEOEIyRTIzMDIxRTI2MDAyNjU4NTIg
LyogV2FzbU9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzOUQ4QjJEMjMwMjFFMUUwMDI2NTg1MiAvKiBXYXNtT3BlcmF0aW9ucy5oICov
OyB9OwogCQlFMzlEQTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOURBNEE1MUI3RThC
N0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUUzOUVFQUYzMjI4MTI0NTAwMDg0NzRGNCAvKiBPYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5RUVBRjIyMjgxMjQ0QzAwODQ3NEY0IC8q
IE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IH07CisJCUUz
OUVFQUYzMjI4MTI0NTAwMDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzOUVFQUYyMjI4MTI0NEMwMDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJvcGVy
dHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKIAkJRTM5RkVCRTMyMzM5QzVE
OTAwQjQwQUIwIC8qIEpTQXN5bmNHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUZFQkUyMjMzOUM1RDQwMEI0MEFCMCAvKiBKU0FzeW5j
R2VuZXJhdG9yLmggKi87IH07CiAJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3Ry
ZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0EwNTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICov
OyB9OwogCQlFM0EwNTMxQzIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVNlY3Rpb25QYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTA1MzE4MjEz
NDJCNjcwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oICovOyB9OwpAQCAtNTA3NSw4ICs1
MDc1LDggQEAKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTUxQjdFOEI3QzAwODRGMzNB
IC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOUUwMzBEMjJE
OUVBM0UwMDQwOEMxOCAvKiBXZWJBc3NlbWJseS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFdl
YkFzc2VtYmx5LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzlFRUFGMTIyODEy
NDRDMDA4NDc0RjQgLyogT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzlFRUFGMjIyODEy
NDRDMDA4NDc0RjQgLyogT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM5RUVBRjEyMjgxMjQ0QzAwODQ3
NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzlFRUFG
MjIyODEyNDRDMDA4NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzlGRUJFMTIzMzlDNUQ0MDBCNDBBQjAgLyogSlNBc3luY0dlbmVyYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0FzeW5jR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM5RkVCRTIyMzM5QzVENDAwQjQwQUIwIC8qIEpTQXN5bmNHZW5lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNBc3luY0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFM0EwNTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU3RyZWFtaW5nUGFyc2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTI4LDYgKzcxMjgsOCBAQAogCQkJCUZFOERF
NTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovLAog
CQkJCTE0OEIxNDE5MjI1REQxRTkwMEQ2RTk5OCAvKiBDYWNoZWRCeXRlY29kZS5jcHAgKi8sCiAJ
CQkJMTQ0Q0EzNEYyMjFGMDM3OTAwODE3Nzg5IC8qIENhY2hlZEJ5dGVjb2RlLmggKi8sCisJCQkJ
RTM5RUVBRjEyMjgxMjQ0QzAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCisJCQkJRTM5RUVBRjIyMjgxMjQ0QzAwODQ3NEY0
IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICov
LAogCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAvKiBDYWNoZWRUeXBlcy5jcHAgKi8sCiAJ
CQkJMTQzQkUyNjUyMUM4NTc3NzAwMjBDRDE3IC8qIENhY2hlZFR5cGVzLmggKi8sCiAJCQkJMTQ4
QjE0MUIyMjVERDFFQTAwRDZFOTk4IC8qIENhY2hlUGF5bG9hZC5jcHAgKi8sCkBAIC03NjEyLDgg
Kzc2MTQsNiBAQAogCQkJCUUzQzI5NURDMUVEMkNCQUEwMEQzMDE2RiAvKiBPYmplY3RQcm9wZXJ0
eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oICovLAogCQkJCUJDMjY4MEM4MEUxNkQ0RTkwMEEw
NkU5MiAvKiBPYmplY3RQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMjY4MEM5MEUxNkQ0RTkwMEEw
NkU5MiAvKiBPYmplY3RQcm90b3R5cGUuaCAqLywKLQkJCQlFMzlFRUFGMTIyODEyNDRDMDA4NDc0
RjQgLyogT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAot
CQkJCUUzOUVFQUYyMjI4MTI0NEMwMDg0NzRGNCAvKiBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCUY2OTJBODc3MDI1NTU5N0QwMUZGNjBGNyAvKiBP
cGVyYXRpb25zLmNwcCAqLywKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0
aW9ucy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAq
LywKQEAgLTkyNjYsNiArOTI2Niw3IEBACiAJCQkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8q
IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRDQTM1
MDIyMjQxODAxMDA4MTc3ODkgLyogQ2FjaGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTM5RUVBRjMyMjgxMjQ1MDAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGMDlD
MkEyMjMxOTIzMTAwQ0Y4OEVCIC8qIENhY2hlZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDA5RUNDMTIyNUUxNzhDMDBCRURENTQgLyogQ2FjaGVQYXlsb2FkLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDA5RUNDMDIyNUUxNzgxMDBCRURENTQgLyogQ2FjaGVVcGRhdGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAxOTksNyArMTAyMDAsNiBAQAogCQkJCTBGRDNFNDBBMUI2MThCNjYwMEM4MEUx
RSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0
MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMzlFRUFGMzIyODEyNDUwMDA4NDc0RjQgLyogT2JqZWN0
VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRGNzlGNzAyMTZFQUZEMjAwMDQ2RDM5IC8qIE9wY29kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU2NDg3MkUyMTQxRDA0ODAwQUIwRDNFIC8qIE9wY29kZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGVkM2E4ZDFiNTE0Mzdi
NWRhZGNkMjk1ZjczMmMwZDlhMzNmZDA0NmUuLjQ5YTc2MWYxMmFhNTBjZjE5NDA5NmFhMDI5NGY4
YzA5MDZhNzc5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTc0MCw2ICs3NDAs
NyBAQCBydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwCiBy
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3BwCiBydW50aW1lL0NhY2hlZEJ5dGVjb2RlLmNw
cAorcnVudGltZS9DYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwCiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcAogcnVudGltZS9DYXRjaFNjb3BlLmNwcAog
cnVudGltZS9DbGFzc0luZm8uY3BwCkBAIC05MzksNyArOTQwLDYgQEAgcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwCiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAogcnVudGltZS9PYmpl
Y3RJbml0aWFsaXphdGlvblNjb3BlLmNwcAogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCi1y
dW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogcnVu
dGltZS9PcGVyYXRpb25zLmNwcAogcnVudGltZS9PcHRpb25zLmNwcAogcnVudGltZS9QcmVkaWN0
aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKaW5kZXggMzNkYjA1ZmQwMWIyN2YzNWE5NDVhY2NiZWI3
ODBhOWYwMDJlMWQzMy4uOTEzM2M4MDgyYmJkYjI3NzA2ZDU3OWY2Yzg4ZjU3Nzc2YTc0N2QyNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcApAQCAt
MjcsMTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogCiAjaW5jbHVkZSAiQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIgorI2luY2x1ZGUgIkNh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEuaCIK
ICNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIk9iamVjdFRvU3RyaW5nQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlZNLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCmluZGV4IDZjMDU3ZmQ1NWRlYzJlMzgwNTdkODk4ODdj
NGNiN2JiNDlmOGUzMGMuLjNhMjViNTA1YWJlYWUyMTY4MmJkMzM4NjZiMzI3ZjQ5MjA5Mzc4MDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaApAQCAtMTE0
LDcgKzExNCw3IEBAIGNsYXNzIFdhdGNocG9pbnRTZXQ7CiAgICAgbWFjcm8oQ29kZUJsb2NrSmV0
dGlzb25pbmcsIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCkgXAogICAgIG1hY3JvKExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlLCBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpIFwKICAgICBtYWNybyhGdW5jdGlvblJhcmVEYXRhQWxs
b2NhdGlvblByb2ZpbGVDbGVhcmluZywgRnVuY3Rpb25SYXJlRGF0YTo6QWxsb2NhdGlvblByb2Zp
bGVDbGVhcmluZ1dhdGNocG9pbnQpIFwKLSAgICBtYWNybyhPYmplY3RUb1N0cmluZ0FkYXB0aXZl
U3RydWN0dXJlLCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCkKKyAg
ICBtYWNybyhPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlLCBDYWNoZWRTcGVjaWFsUHJv
cGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoSklUKQogI2Rl
ZmluZSBKU0NfV0FUQ0hQT0lOVF9UWVBFU19XSVRIT1VUX0RGRyhtYWNybykgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDNhZDY0ZmY0ZTE1ZWQzYTI1YzgyOGYxMzk4NjQwZmYxZjA2ZmFjYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFNwZWNp
YWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKQEAgLTAsMCArMSw3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRTcGVj
aWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKworI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgU3RydWN0dXJlUmFyZURhdGEqIHN0cnVj
dHVyZVJhcmVEYXRhKQorICAgIDogV2F0Y2hwb2ludChXYXRjaHBvaW50OjpUeXBlOjpPYmplY3RU
b1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlKQorICAgICwgbV9zdHJ1Y3R1cmVSYXJlRGF0YShzdHJ1
Y3R1cmVSYXJlRGF0YSkKKyAgICAsIG1fa2V5KGtleSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChr
ZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2lu
dCgpKTsKK30KKwordm9pZCBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ6Omluc3RhbGwoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5Lmlz
V2F0Y2hhYmxlKCkpOworCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSh2bSktPmFkZFRy
YW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2bSwgY29uc3Qg
RmlyZURldGFpbCYpCit7CisgICAgaWYgKCFtX3N0cnVjdHVyZVJhcmVEYXRhLT5pc0xpdmUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29u
ZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwodm0pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSA9
IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWc7CisgICAgaWYgKG1fa2V5LnVp
ZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKSkKKyAgICAg
ICAga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZzsKKyAgICBlbHNl
IGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkpCisg
ICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc7CisgICAgZWxz
ZSBpZiAobV9rZXkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpCisg
ICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZjsKKyAgICBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvUHJp
bWl0aXZlU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUtleTo6VG9QcmltaXRpdmU7CisgICAgfQorCisgICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xl
YXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRTcGVjaWFsUHJv
cGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM0N2I0MGY1ZDA0OTMxNDE0MjI0MzY4MmU4M2ZiY2MwMzg3YzE2MmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRT
cGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaApAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIlBhY2tlZENlbGxQdHIuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFN0cnVjdHVyZVJhcmVEYXRhOworCitjbGFzcyBDYWNoZWRTcGVjaWFsUHJv
cGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2lu
dCB7CitwdWJsaWM6CisgICAgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgU3RydWN0dXJlUmFyZURh
dGEqKTsKKworICAgIHZvaWQgaW5zdGFsbChWTSYpOworCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisKKyAgICB2b2lkIGZp
cmVJbnRlcm5hbChWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
Ly8gT3duIGRlc3RydWN0b3IgbWF5IG5vdCBiZSBjYWxsZWQuIEtlZXAgbWVtYmVycyB0cml2aWFs
bHkgZGVzdHJ1Y3RpYmxlLgorICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxEKFBhY2tlZENlbGxQdHI8
U3RydWN0dXJlUmFyZURhdGE+LCBtX3N0cnVjdHVyZVJhcmVEYXRhKTsKKyAgICBKU0NfV0FUQ0hQ
T0lOVF9GSUVMRChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgbV9rZXkpOworfTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4
IGViNWMyYzAwZGVlMDA3NjNjNjE1ZWMxOGY4YzRmNWIyYTZhMmMyMDYuLjBmMzQ4MzQ2MDU1MGVi
YTYzZjNiNjhiOGY3ZDZiODQ0MDk4ZjQzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTYxMCw2ICs2MTAsMTAgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlv
biA9IG51bGxwdHI7CiAgICAgSlNGdW5jdGlvbiogaGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9
IG51bGxwdHI7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0aWVz
KHZtLCB0aGlzLCAmY2FsbEZ1bmN0aW9uLCAmYXBwbHlGdW5jdGlvbiwgJmhhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24pOworICAgIG1fb2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLmluaXRMYXRl
cigKKyAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPEpTRnVuY3Rpb24+JiBpbml0KSB7Cisg
ICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwgaW5pdC5vd25l
ciwgMCwgaW5pdC52bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5zdHJpbmcoKSwgb2JqZWN0UHJv
dG9GdW5jVG9TdHJpbmcsIE5vSW50cmluc2ljKSk7CisgICAgICAgIH0pOwogICAgIG1fYXJyYXlQ
cm90b1RvU3RyaW5nRnVuY3Rpb24uaW5pdExhdGVyKAogICAgICAgICBbXSAoY29uc3QgSW5pdGlh
bGl6ZXI8SlNGdW5jdGlvbj4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rp
b246OmNyZWF0ZShpbml0LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nLnN0cmluZygpLCBhcnJheVByb3RvRnVuY1RvU3RyaW5nLCBOb0ludHJpbnNpYykp
OwpAQCAtMTg5NSw2ICsxODk5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgdGhpc09iamVjdC0+
bV9wYXJzZUludEZ1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fcGFy
c2VGbG9hdEZ1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fb2JqZWN0
UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1f
YXJyYXlQcm90b1RvU3RyaW5nRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVj
dC0+bV9hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09i
amVjdC0+bV9ldmFsRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBhNzU1YzMxMTA0ZDM4OGUyNTQ4
N2NmNzRmMDE2ZjEwNzY2YWUxM2I0Li4zMzBlNWIwZTY3ZjZkYzI2OTFiZWQ0YmQzMTRmN2MzZDM3
ZTIzNGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTMxMyw2ICszMTMsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIEpTRnVuY3Rpb24+IG1fcGFyc2VJbnRGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fcGFyc2VGbG9hdEZ1bmN0aW9uOwogCisgICAgTGF6
eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uPiBtX29iamVjdFByb3RvVG9TdHJp
bmdGdW5jdGlvbjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+
IG1fYXJyYXlQcm90b1RvU3RyaW5nRnVuY3Rpb247CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFs
T2JqZWN0LCBKU0Z1bmN0aW9uPiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbjsKICAgICBMYXp5
UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fZXZhbEZ1bmN0aW9uOwpAQCAt
NjMzLDYgKzYzNCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QgewogCiAgICAgSlNGdW5jdGlvbiogZXZhbEZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9ldmFsRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlvbiogdGhy
b3dUeXBlRXJyb3JGdW5jdGlvbigpIGNvbnN0OworICAgIEpTRnVuY3Rpb24qIG9iamVjdFByb3Rv
VG9TdHJpbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0UHJvdG9Ub1N0cmluZ0Z1
bmN0aW9uLmdldCh0aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9Ub1N0cmluZ0Z1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi5nZXQo
dGhpcyk7IH0KICAgICBKU0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXQodGhpcyk7IH0KICAgICBK
U0Z1bmN0aW9uKiBhcnJheVByb3RvVmFsdWVzRnVuY3Rpb25Db25jdXJyZW50bHkoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi5nZXRDb25jdXJyZW50bHkoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IDUwYWQwYTZi
YmMwNGFiNmY0ZTYwM2Y2M2UzZGE3MmU4ZmUwOTJjNDYuLjkyOGVlYjJlZmQxMzQyZjkxNzE5ZTRk
N2NmNmVhZWI4MTBiZWUzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKQEAgLTIxNDQsMzMgKzIxNDQsNDYgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwK
ICAgICB9CiB9CiAKLWVudW0gY2xhc3MgVHlwZUhpbnRNb2RlIHsgVGFrZXNIaW50LCBEb2VzTm90
VGFrZUhpbnQgfTsKLQotdGVtcGxhdGU8VHlwZUhpbnRNb2RlIG1vZGUgPSBUeXBlSGludE1vZGU6
OkRvZXNOb3RUYWtlSGludD4KK3RlbXBsYXRlPENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXk+
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
aXMgd2hlbiB3ZSBoYXZlIGZpeGVkOiByZGFyOi8vcHJvYmxlbS8zMzQ1MTg0MAotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcxMDkuCi0gICAgY29uc3Rl
eHByIGJvb2wgZGVidWdOdWxsU3RydWN0dXJlID0gbW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2Vz
SGludDsKLSAgICBib29sIGhhc1Byb3BlcnR5ID0gY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVj
dCktPmdldFByb3BlcnR5U2xvdDxkZWJ1Z051bGxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5l
eGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGhhc1Byb3BlcnR5ID8gc2xvdC5n
ZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBpZiAo
ZnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSAmJiBtb2RlID09IFR5cGVIaW50TW9kZTo6VGFr
ZXNIaW50KQorICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmNh
Y2hlZFNwZWNpYWxQcm9wZXJ0eShrZXkpOworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6R2V0KTsKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gd2UgaGF2ZSBmaXhl
ZDogcmRhcjovL3Byb2JsZW0vMzM0NTE4NDAKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzEwOS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgZGVi
dWdOdWxsU3RydWN0dXJlID0ga2V5ID09IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9Qcmlt
aXRpdmU7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
b2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVsbFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIGZ1bmN0aW9uID0gaGFzUHJvcGVydHkgPyBz
bG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZVNwZWNpYWxQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHZtLCBmdW5jdGlvbiwga2V5LCBzbG90KTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIH0KKyAgICBpZiAoZnVuY3Rp
b24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAg
IC8vIEFkZCBvcHRpbWl6YXRpb25zIGZvciBmcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbnMuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA4NAorICAg
IGlmIGNvbnN0ZXhwciAoa2V5ID09IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmcp
IHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uID09IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG9Ub1N0
cmluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUtleTo6VG9TdHJpbmdUYWcpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGZ1bmN0
aW9uKTsKICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSkgewot
ICAgICAgICBpZiAobW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2VzSGludCkKKyAgICAgICAgaWYg
Y29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1ByaW1pdGl2ZSkK
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wu
dG9QcmltaXRpdmUgaXMgbm90IGEgZnVuY3Rpb24sIHVuZGVmaW5lZCwgb3IgbnVsbCJfcyk7CiAg
ICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBjYWxsQXJnczsKLSAgICBpZiAobW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2Vz
SGludCkgeworICAgIGlmIGNvbnN0ZXhwciAoa2V5ID09IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtl
eTo6VG9QcmltaXRpdmUpIHsKICAgICAgICAgSlNTdHJpbmcqIGhpbnRTdHJpbmcgPSBudWxscHRy
OwogICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKICAgICAgICAgY2FzZSBOb1ByZWZlcmVuY2U6CkBA
IC0yMTkwLDggKzIyMDMsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Q
cmltaXRpdmVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghcmVzdWx0LmlzR2V0dGVy
U2V0dGVyKCkpOwotICAgIGlmIChyZXN1bHQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1v
ZGUgPT0gVHlwZUhpbnRNb2RlOjpEb2VzTm90VGFrZUhpbnQgPyBKU1ZhbHVlKCkgOiB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3ltYm9sLnRvUHJpbWl0aXZlIHJldHVybmVk
IGFuIG9iamVjdCJfcyk7CisgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKSB7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAoa2V5ID09IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9QcmltaXRpdmUp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5lZCBhbiBvYmplY3QiX3MpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjAxLDI3
ICsyMjE3LDIyIEBAIEpTVmFsdWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJpCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdoYXRldmVyIGRlZmF1bHQgdmFsdWUgbWV0aG9kcyB0
aGVyZSBhcmUgb24gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIGFyZQotICAgIC8vIGJlaW5nIHdh
dGNoZWQuCi0gICAgZm9yIChjb25zdCBKU09iamVjdCogb2JqZWN0ID0gdGhpczsgb2JqZWN0OyBv
YmplY3QgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnN0b3JlZFByb3RvdHlwZU9iamVjdChvYmpl
Y3QpKQotICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnN0YXJ0V2F0Y2hpbmdJbnRlcm5h
bFByb3BlcnRpZXNJZk5lY2Vzc2FyeSh2bSk7Ci0KICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIGlm
IChoaW50ID09IFByZWZlclN0cmluZykgewotICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2
ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcs
IGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPENhY2hlZFNw
ZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmcsIGhpbnQpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSB8fCBzY29wZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAg
ICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFs
dWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3Bl
cnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2
ZUZ1bmN0aW9uPENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZj4oZ2xvYmFsT2JqZWN0
LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsKICAgICAgICAgRVhDRVBU
SU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFs
dWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlv
bihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOwor
ICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPENhY2hlZFNwZWNpYWxQcm9w
ZXJ0eUtleTo6VmFsdWVPZj4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZU9mLCBoaW50KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAo
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRv
UHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZywgaGludCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248
Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2Vs
bCgpKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAt
MjI0Miw3ICsyMjUzLDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJpbWl0aXZlVHkKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFR5cGVI
aW50TW9kZTo6VGFrZXNIaW50PihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMt
PnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1ByaW1p
dGl2ZT4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5
bWJvbCwgcHJlZmVycmVkVHlwZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBpZiAodmFsdWUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCmluZGV4IDQxNzBkMjQ4
M2Y1ZmM4MjBlNDllYzM1ZmE4MGEwM2IyMGQ4YTVhYjEuLjU3NzdhZmJhMjYyNzk2ODA2ZGFhZTRj
OWNlNzFlYWI1M2UwZGUyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIE9iamVjdFByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwogICAgIAotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZywgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvTG9j
YWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIG9i
amVjdFByb3RvRnVuY1ZhbHVlT2YsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCAwKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVydHksIG9iamVj
dFByb3RvRnVuY0hhc093blByb3BlcnR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwgSGFzT3duUHJvcGVydHlJbnRyaW5zaWMpOwpAQCAtMzI1
LDcgKzMyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0
dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwotICAgIGF1dG8gcmVzdWx0ID0g
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3Bl
cnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWcpOwogICAgIGlmIChyZXN1
bHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIApAQCAtMzUwLDcg
KzM1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9T
dHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBKU1N0cmluZyoganNSZXN1
bHQgPSBqc1N0cmluZyhnbG9iYWxPYmplY3QsIHZtLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmdT
dGFydCgpLCBqc1RhZywgdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZygnXScp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSh2bSktPnNldE9iamVjdFRvU3RyaW5nVmFsdWUoZ2xvYmFsT2JqZWN0LCB2bSwg
anNSZXN1bHQsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmNhY2hlU3Bl
Y2lhbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0sIGpzUmVzdWx0LCBDYWNoZWRTcGVjaWFsUHJv
cGVydHlLZXk6OlRvU3RyaW5nVGFnLCBzbG90KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzUmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDllZjU4ZGYyMTY5
NDhjY2EyYmVkNTg2NmFiZDg4MTgxMzI1ZDMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRv
U3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLQotI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6
Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXksIFN0cnVjdHVyZVJhcmVEYXRhKiBzdHJ1Y3R1cmVSYXJlRGF0
YSkKLSAgICA6IFdhdGNocG9pbnQoV2F0Y2hwb2ludDo6VHlwZTo6T2JqZWN0VG9TdHJpbmdBZGFw
dGl2ZVN0cnVjdHVyZSkKLSAgICAsIG1fc3RydWN0dXJlUmFyZURhdGEoc3RydWN0dXJlUmFyZURh
dGEpCi0gICAgLCBtX2tleShrZXkpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5n
UmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Ci19Ci0K
LXZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwo
Vk0mIHZtKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwotCi0g
ICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSh2bSktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50
KHRoaXMpOwotfQotCi12b2lkIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikKLXsKLSAgICBpZiAo
IW1fc3RydWN0dXJlUmFyZURhdGEtPmlzTGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9rZXkuaXNXYXRjaGFibGUoUHJvcGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0
eSkpIHsKLSAgICAgICAgaW5zdGFsbCh2bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlmNGY3NTA1ZTBmN2Ni
ZDFhMGQ5NWMxMThiZGM1ZGEzZTBiZWYzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0
cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uaCIKLSNpbmNsdWRlICJQYWNrZWRDZWxsUHRyLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlUmFyZURhdGEuaCIKLSNpbmNsdWRlICJXYXRjaHBvaW50LmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YTsKLQotY2xhc3MgT2JqZWN0VG9TdHJp
bmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2ludCB7
Ci1wdWJsaWM6Ci0gICAgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBTdHJ1Y3R1cmVSYXJlRGF0YSopOwotCi0g
ICAgdm9pZCBpbnN0YWxsKFZNJik7Ci0KLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KLQotICAgIHZvaWQgZmlyZUludGVybmFs
KFZNJiwgY29uc3QgRmlyZURldGFpbCYpOwotICAgIAotcHJpdmF0ZToKLSAgICAvLyBPd24gZGVz
dHJ1Y3RvciBtYXkgbm90IGJlIGNhbGxlZC4gS2VlcCBtZW1iZXJzIHRyaXZpYWxseSBkZXN0cnVj
dGlibGUuCi0gICAgSlNDX1dBVENIUE9JTlRfRklFTEQoUGFja2VkQ2VsbFB0cjxTdHJ1Y3R1cmVS
YXJlRGF0YT4sIG1fc3RydWN0dXJlUmFyZURhdGEpOwotICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxE
KE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7Ci19OwotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDM4OTlkMTZmYmI3MWYxM2ZmMDRhM2Fh
Y2NmN2JiNDM1YTI3MzZlMjcuLmZhODUyMmI5NTYyMjllOWMwMDY2MjFlMjExYjVjNGI5NWMxMTM5
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC01Mjks
MTQgKzUyOSwxMyBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAog
ICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKLSAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdW
YWx1ZSgpCisgICAgSlNWYWx1ZSBjYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5IGtleSkKICAgICB7CiAgICAgICAgIGlmICghaGFzUmFyZURhdGEoKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+b2JqZWN0
VG9TdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIHJhcmVEYXRhKCktPmNhY2hlZFNwZWNpYWxQcm9wZXJ0eShrZXkpOwogICAgIH0KLQot
ICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNT
dHJpbmcqIHZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7
CisgICAgdm9pZCBjYWNoZVNwZWNpYWxQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNW
YWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAog
ICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0lu
Zm87IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCmluZGV4IDFjZjZmODdmYjkwODdkYjlhOWQ0YzRjNTBhOGViYTNjN2MwMTAxZTYuLmVj
ODE5OTY0MmViNDg3ODEwZWMyNjBiZGZlNTIwY2FmZmM3NmI2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTQyNywxMSArNDI3
LDExIEBAIGlubGluZSBzaXplX3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3Qg
Y3VycmVudENhcGFjaXR5KQogICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVH
cm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTU3RyaW5nKiB2
YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmU6OmNhY2hlU3BlY2lhbFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5
IGtleSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghaGFzUmFyZURhdGEo
KSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgcmFyZURhdGEoKS0+c2V0T2Jq
ZWN0VG9TdHJpbmdWYWx1ZShnbG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdU
YWdTeW1ib2xTbG90KTsKKyAgICByYXJlRGF0YSgpLT5jYWNoZVNwZWNpYWxQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwga2V5LCBzbG90KTsKIH0KIAogdGVtcGxhdGU8U3Ry
dWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCmluZGV4IDVk
OWViMzgwMjJmMDgxZmRmYWNmYzI5OGE5OTY2ZDVhNjFlNGM2YTQuLjFlZGQ3MTI2MjM0MDgyNjEw
OWQ2ZGIwMmU4ZTkxZDJkMTJiMDk3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCiAKICNpbmNsdWRlICJBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiSlNJbW11dGFi
bGVCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT2JqZWN0VG9TdHJp
bmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFp
bi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCIKQEAgLTc0LDcgKzc0LDEwIEBAIHZvaWQgU3RydWN0dXJlUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcmV2aW91cyk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh0aGlzT2JqZWN0LT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkpOworICAgIGlmICh0aGlz
T2JqZWN0LT5tX3NwZWNpYWxQcm9wZXJ0eUNhY2hlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5czsgKytp
bmRleCkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+
Y2FjaGVkU3BlY2lhbFByb3BlcnR5KHN0YXRpY19jYXN0PENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtl
eT4oaW5kZXgpKSk7CisgICAgfQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2Fj
aGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtYmVyT2ZDYWNoZWRQcm9wZXJ0eU5hbWVzOyArK2luZGV4KSB7CiAgICAgICAg
IGF1dG8qIGNhY2hlZCA9IHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lc1tpbmRleF0u
dW52YWxpZGF0ZWRHZXQoKTsKQEAgLTgzLDEyICs4NiwxMiBAQCB2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgfQogfQogCi0vLyAtLS0tLS0tLS0tLSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKCkgaGVs
cGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0gQ2FjaGVk
IHNwZWNpYWwgcHJvcGVydGllcyBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0t
CiAKLWNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UgeworY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewogcHVibGljOgogICAgIHR5cGVkZWYgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSBCYXNlOwotICAgIE9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiwgU3RydWN0dXJlUmFyZURhdGEqKTsKKyAgICBDYWNoZWRTcGVjaWFs
UHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mLCBTdHJ1Y3R1cmVSYXJlRGF0YSopOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwpAQCAtOTcsMzMgKzEwMCw2MiBAQCBjbGFz
cyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdAogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiBtX3N0cnVjdHVyZVJh
cmVEYXRhOwogfTsKIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdW
YWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVyZSogb3du
U3RydWN0dXJlLCBKU1N0cmluZyogdmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdU
YWdTeW1ib2xTbG90KQorU3BlY2lhbFByb3BlcnR5Q2FjaGVFbnRyeTo6flNwZWNpYWxQcm9wZXJ0
eUNhY2hlRW50cnkoKSA9IGRlZmF1bHQ7CisKK1NwZWNpYWxQcm9wZXJ0eUNhY2hlJiBTdHJ1Y3R1
cmVSYXJlRGF0YTo6ZW5zdXJlU3BlY2lhbFByb3BlcnR5Q2FjaGVTbG93KCkKIHsKLSAgICBpZiAo
Y2FuQ2FjaGVPYmplY3RUb1N0cmluZ1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9zcGVjaWFsUHJvcGVydHlDYWNoZSk7CisgICAgYXV0byBjYWNoZSA9IG1h
a2VVbmlxdWU8U3BlY2lhbFByb3BlcnR5Q2FjaGU+KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsgLy8gRXhwb3NlIHZhbGlkIHN0cnVjdCBmb3IgY29uY3VycmVudCB0aHJlYWRzIGluY2x1
ZGluZyBjb25jdXJyZW50IGNvbXBpbGVycy4KKyAgICBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlID0g
V1RGTW92ZShjYWNoZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gU3RvcmUgdG8g
dGhlIGZpZWxkIG9mIHRoaXMgc3RydWN0IHNob3VsZCBiZSB2aXNpYmxlIHRvIHRoZSBjb25jdXJy
ZW50IGNvbGxlY3RvcnMgYWZ0ZXIgc3RydWN0IGlzIHZpc2libGUuCisgICAgcmV0dXJuICptX3Nw
ZWNpYWxQcm9wZXJ0eUNhY2hlLmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6Z2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNoZShDYWNoZWRTcGVjaWFsUHJvcGVydHlL
ZXkga2V5KQoreworICAgIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKCkubV9jYWNoZVtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpT
Q2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKK30KIAordm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6Y2FjaGVTcGVjaWFsUHJvcGVydHlTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBvd25TdHJ1Y3R1cmUsIEpTVmFsdWUgdmFsdWUsIENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXksIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGtleSkg
eworICAgIGNhc2UgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZzoKKyAgICAg
ICAgdWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc6
CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlZhbHVlT2Y6Cisg
ICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9QcmltaXRpdmU6Cisg
ICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLmltcGwoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKLSAgICBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90LmlzVmFsdWUoKSkgewot
ICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhlIG93biBwcm9wZXJ0eSBjYXNlIG9mIFN5bWJv
bC50b1N0cmluZ1RhZyBiZWNhdXNlIHdlIHdvdWxkIG5ldmVyIGtub3cgaWYgYSBuZXcKLSAgICAg
ICAgLy8gb2JqZWN0IHRyYW5zaXRpb25pbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIGhhZCB0aGUg
c2FtZSB2YWx1ZSBzdG9yZWQgaW4gU3ltYm9sLnRvU3RyaW5nVGFnLgorICAgIGlmIChzbG90Lmlz
VmFsdWUoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhlIG93biBwcm9wZXJ0eSBj
YXNlIG9mIHNwZWNpYWwgcHJvcGVydGllcyAodG9TdHJpbmcsIHZhbHVlT2YsIEBAdG9QcmltaXRp
dmUsIEBAdG9TdHJpbmdUYWcpIGJlY2F1c2Ugd2Ugd291bGQgbmV2ZXIga25vdyBpZiBhIG5ldwor
ICAgICAgICAvLyBvYmplY3QgdHJhbnNpdGlvbmluZyB0byB0aGUgc2FtZSBzdHJ1Y3R1cmUgaGFk
IHRoZSBzYW1lIHZhbHVlIHN0b3JlZCBpbiB0aGF0IHByb3BlcnR5LgogICAgICAgICAvLyBBZGRp
dGlvbmFsbHksIHRoaXMgaXMgYSBzdXBlciB1bmxpa2VseSBjYXNlIGFueXdheS4KLSAgICAgICAg
aWYgKCF0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNDYWNoZWFibGUoKSB8fCB0b1N0cmluZ1RhZ1N5
bWJvbFNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJlKHZtKSA9PSBvd25TdHJ1Y3R1cmUpCisgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpIHx8IHNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJl
KHZtKSA9PSBvd25TdHJ1Y3R1cmUpCiAgICAgICAgICAgICByZXR1cm47CiAKLQotICAgICAgICAv
LyBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RydWN0
dXJlIGJ1dCB0aGF0IGlzIGdvb2QgYmVjYXVzZSB3ZSBrbm93IHRoZSBTeW1ib2wudG9TdHJpbmdU
YWcKKyAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBjcmVhdGUgYSBjb25kaXRpb24gZm9yIHRoZSBj
dXJyZW50IHN0cnVjdHVyZSBidXQgdGhhdCBpcyBnb29kIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHBy
b3BlcnR5CiAgICAgICAgIC8vIGlzIG5vdCBvbiB0aGUgb3duU3RydWN0dXJlIHNvIHdlIHdpbGwg
dHJhbnNpc2l0aW9uIGlmIG9uZSBpcyBhZGRlZCBhbmQgdGhpcyBjYWNoZSB3aWxsIG5vIGxvbmdl
ciBiZSB1c2VkLgotICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwg
b3duU3RydWN0dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdG9TdHJpbmdUYWdTeW1ib2xT
bG90LnNsb3RCYXNlKCksIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwo
KSk7CisgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3Qs
IG93blN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCB1aWQpOwogICAgICAgICBBU1NFUlQoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0
aW9uKCkpOwotICAgIH0gZWxzZSBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90LmlzVW5zZXQoKSkg
eworICAgIH0gZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAgcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgbnVsbHB0cik7Ci0gICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgdGhp
cywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
VGFnU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUs
IHVpZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkgewotICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNo
ZSgpOworICAgICAgICBnaXZlVXBPblNwZWNpYWxQcm9wZXJ0eUNhY2hlKGtleSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTEzNiw2NyArMTY4LDg4IEBAIHZvaWQgU3RydWN0dXJlUmFy
ZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mCiAKICAgICAgICAgICAgIC8vIFRoZSBlcXVpdmFsZW5jZSBjb25kaXRpb24gd29uJ3Qg
YmUgd2F0Y2hhYmxlIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIGEgcmVwbGFjZW1lbnQuCiAgICAg
ICAgICAgICBpZiAoIWVxdWl2Q29uZGl0aW9uLmlzV2F0Y2hhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgpOworICAgICAgICAgICAgICAg
IGdpdmVVcE9uU3BlY2lhbFByb3BlcnR5Q2FjaGUoa2V5KTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIWNvbmRpdGlvbi5pc1dhdGNo
YWJsZSgpKSB7Ci0gICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgp
OworICAgICAgICAgICAgZ2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNoZShrZXkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUKGNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSk7CisgICAgYXV0byYgY2FjaGUgPSBlbnN1cmVT
cGVjaWFsUHJvcGVydHlDYWNoZSgpLm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSld
OwogICAgIGZvciAoT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDogY29uZGl0aW9u
U2V0KSB7CiAgICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0aW9uKCkua2luZCgpID09IFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgewotICAgICAgICAgICAgbV9vYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQgPSBtYWtlVW5pcXVlPE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PihlcXVpdkNvbmRpdGlvbiwg
dGhpcyk7Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVl
V2F0Y2hwb2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgICAgICBjYWNoZS5tX3ByZXNlbnRXYXRj
aHBvaW50ID0gbWFrZVVuaXF1ZTxDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KGVxdWl2Q29uZGl0aW9uLCB0aGlzKTsKKyAgICAgICAg
ICAgIGNhY2hlLm1fcHJlc2VudFdhdGNocG9pbnQtPmluc3RhbGwodm0pOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNocG9pbnRTZXQuYWRk
KGNvbmRpdGlvbiwgdGhpcyktPmluc3RhbGwodm0pOworICAgICAgICAgICAgY2FjaGUubV9taXNz
V2F0Y2hwb2ludHMuYWRkKGNvbmRpdGlvbiwgdGhpcyktPmluc3RhbGwodm0pOwogICAgIH0KLQot
ICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICBjYWNo
ZS5tX3ZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogfQogCi12b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKQordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
Y2xlYXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSkK
IHsKLSAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0LmNsZWFyKCk7Ci0g
ICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQucmVzZXQo
KTsKLSAgICBpZiAoIWNhbkNhY2hlT2JqZWN0VG9TdHJpbmdWYWx1ZSgpKQotICAgICAgICBtX29i
amVjdFRvU3RyaW5nVmFsdWUuY2xlYXIoKTsKKyAgICBhdXRvKiBvYmplY3RUb1N0cmluZ0NhY2hl
ID0gbV9zcGVjaWFsUHJvcGVydHlDYWNoZS5nZXQoKTsKKyAgICBpZiAoIW9iamVjdFRvU3RyaW5n
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBjYWNoZSA9IG9iamVjdFRvU3RyaW5n
Q2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldOworICAgIGNhY2hlLm1f
bWlzc1dhdGNocG9pbnRzLmNsZWFyKCk7CisgICAgY2FjaGUubV9wcmVzZW50V2F0Y2hwb2ludC5y
ZXNldCgpOworICAgIGlmIChjYWNoZS5tX3ZhbHVlLmdldCgpICE9IEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKQorICAgICAgICBjYWNoZS5tX3ZhbHVlLmNsZWFyKCk7CiB9CiAK
IHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkK
IHsKLSAgICBpZiAobV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9p
bnQpIHsKLSAgICAgICAgaWYgKCFtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVl
V2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7Ci0gICAgICAgICAgICBjbGVhck9i
amVjdFRvU3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBmb3IgKGF1dG8qIHdhdGNocG9pbnQgOiBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVX
YXRjaHBvaW50U2V0KSB7Ci0gICAgICAgIGlmICghd2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExp
dmUodm0pKSB7Ci0gICAgICAgICAgICBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICBpZiAobV9zcGVjaWFsUHJvcGVydHlDYWNoZSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZkNhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUtleXM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUtleSBrZXkgPSBzdGF0aWNfY2FzdDxDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk+KGluZGV4KTsK
KyAgICAgICAgICAgIGF1dG8mIGNhY2hlID0gbV9zcGVjaWFsUHJvcGVydHlDYWNoZS0+bV9jYWNo
ZVtpbmRleF07CisgICAgICAgICAgICBpZiAoY2FjaGUubV9wcmVzZW50V2F0Y2hwb2ludCkgewor
ICAgICAgICAgICAgICAgIGlmICghY2FjaGUubV9wcmVzZW50V2F0Y2hwb2ludC0+a2V5KCkuaXNT
dGlsbExpdmUodm0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5KGtleSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byogd2F0Y2hwb2ludCA6
IGNhY2hlLm1fbWlzc1dhdGNocG9pbnRzKSB7CisgICAgICAgICAgICAgICAgaWYgKCF3YXRjaHBv
aW50LT5rZXkoKS5pc1N0aWxsTGl2ZSh2bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJD
YWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQog
CiAvLyAtLS0tLS0tLS0tLS0tIE1ldGhvZHMgZm9yIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmco
KSBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tLS0tCiAKLU9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpPYmplY3RUb1N0cmlu
Z0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LCBTdHJ1Y3R1cmVSYXJlRGF0YSogc3RydWN0dXJlUmFyZURhdGEp
CitDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBTdHJ1Y3R1cmVS
YXJlRGF0YSogc3RydWN0dXJlUmFyZURhdGEpCiAgICAgOiBCYXNlKGtleSkKICAgICAsIG1fc3Ry
dWN0dXJlUmFyZURhdGEoc3RydWN0dXJlUmFyZURhdGEpCiB7CiB9CiAKLWJvb2wgT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmlzVmFsaWQoKSBj
b25zdAorYm9vbCBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ6OmlzVmFsaWQoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0cnVjdHVy
ZVJhcmVEYXRhLT5pc0xpdmUoKTsKIH0KIAotdm9pZCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYsIGNvbnN0IEZpcmVE
ZXRhaWwmKQordm9pZCBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikK
IHsKLSAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsK
KyAgICBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXkga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5OjpUb1N0cmluZ1RhZzsKKyAgICBpZiAodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKQorICAgICAgICBrZXkgPSBDYWNoZWRT
cGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nVGFnOworICAgIGVsc2UgaWYgKHRoaXMtPmtleSgp
LnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkKKyAgICAgICAga2V5
ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZzsKKyAgICBlbHNlIGlmICh0aGlz
LT5rZXkoKS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkKKyAgICAg
ICAga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpWYWx1ZU9mOworICAgIGVsc2Ugewor
ICAgICAgICBBU1NFUlQodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9Q
cmltaXRpdmVTeW1ib2wuaW1wbCgpKTsKKyAgICAgICAga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5S2V5OjpUb1ByaW1pdGl2ZTsKKyAgICB9CisgICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xl
YXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaApp
bmRleCA4MjkzY2RjNTllZDE1N2RlY2Y2NzFmYWRmMWYxOTUyNTk2MGM0NDc0Li5hOTk3YjNkMTJh
ZGVjNjE1ODBjM2JhYmRkYzQyZDdlMmQ4MTJlOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKQEAgLTM1LDE0ICszNSwyMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogY2xhc3Mg
U3RydWN0dXJlOwotY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ7Ci1jbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludDsKK2NsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludDsKK2NsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludDsKK3N0cnVjdCBTcGVjaWFsUHJvcGVydHlDYWNoZTsKIGVudW0g
Y2xhc3MgQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQgOiB1aW50OF90IHsKICAgICBLZXlzID0gMCwK
ICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzLAogfTsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bnVtYmVyT2ZDYWNoZWRQcm9wZXJ0eU5hbWVzID0gMjsKIAorZW51bSBjbGFzcyBDYWNoZWRTcGVj
aWFsUHJvcGVydHlLZXkgOiB1aW50OF90IHsKKyAgICBUb1N0cmluZ1RhZyA9IDAsCisgICAgVG9T
dHJpbmcsCisgICAgVmFsdWVPZiwKKyAgICBUb1ByaW1pdGl2ZSwKK307CitzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG51bWJlck9mQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5cyA9IDQ7CisKIGNs
YXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKQEAgLTcwLDExICs3OSw4IEBAIGNsYXNzIFN0cnVjdHVy
ZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBzZXRQcmV2aW91c0lE
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBjbGVhclByZXZpb3VzSUQoKTsKIAotICAgIEpT
U3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1
cmUsIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiB0b1N0cmluZ1RhZ1N5bWJv
bFNsb3QpOwotICAgIHZvaWQgZ2l2ZVVwT25PYmplY3RUb1N0cmluZ1ZhbHVlQ2FjaGUoKSB7IG1f
b2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG9iamVjdFRvU3RyaW5n
Q2FjaGVHaXZlVXBNYXJrZXIoKSk7IH0KLSAgICBib29sIGNhbkNhY2hlT2JqZWN0VG9TdHJpbmdW
YWx1ZSgpIHsgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS51bnZhbGlkYXRlZEdldCgpID09
IG9iamVjdFRvU3RyaW5nQ2FjaGVHaXZlVXBNYXJrZXIoKTsgfQotICAgIHN0YXRpYyBKU1N0cmlu
Zyogb2JqZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpIHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxKU1N0cmluZyo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9CisgICAgSlNWYWx1ZSBj
YWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5KSBjb25zdDsKKyAg
ICB2b2lkIGNhY2hlU3BlY2lhbFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1
cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTVmFsdWUsIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSwgY29u
c3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldENhY2hlZFByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKQEAgLTEw
MiwxNSArMTA4LDIwIEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKLSAgICBmcmll
bmQgY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OwotCi0gICAgdm9pZCBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKKyAgICBm
cmllbmQgY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50OworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ7CiAKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYs
IFN0cnVjdHVyZSopOwogCisgICAgdm9pZCBjbGVhckNhY2hlZFNwZWNpYWxQcm9wZXJ0eShDYWNo
ZWRTcGVjaWFsUHJvcGVydHlLZXkpOworICAgIHZvaWQgY2FjaGVTcGVjaWFsUHJvcGVydHlTbG93
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTVmFsdWUs
IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSwgY29uc3QgUHJvcGVydHlTbG90Jik7CisKKyAgICBT
cGVjaWFsUHJvcGVydHlDYWNoZSYgZW5zdXJlU3BlY2lhbFByb3BlcnR5Q2FjaGUoKTsKKyAgICBT
cGVjaWFsUHJvcGVydHlDYWNoZSYgZW5zdXJlU3BlY2lhbFByb3BlcnR5Q2FjaGVTbG93KCk7Cisg
ICAgYm9vbCBjYW5DYWNoZVNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXkp
OworICAgIHZvaWQgZ2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNoZShDYWNoZWRTcGVjaWFsUHJv
cGVydHlLZXkpOworCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKLSAg
ICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgc29tZSBzdG9yeSBmb3IgY2xlYXJpbmcgdGhlc2UgcHJvcGVy
dHkgbmFtZXMgY2FjaGVzIGluIEdDLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTI2NTkKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yPiBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3I7CkBAIC0xMTgsOCArMTI5LDcg
QEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBX
VEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50
U2V0czsKLSAgICBCYWc8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+
IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNocG9pbnRTZXQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
PiBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hwb2ludDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbFByb3BlcnR5Q2FjaGU+IG1fc3BlY2lhbFByb3BlcnR5Q2Fj
aGU7CiAgICAgQm94PElubGluZVdhdGNocG9pbnRTZXQ+IG1fcG9seVByb3RvV2F0Y2hwb2ludDsK
IAogICAgIFByb3BlcnR5T2Zmc2V0IG1fbWF4T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAppbmRleCA5
ZWZhMDkwMWVjYjc1YWVhNTAwZjdmNTliOTU0YWRlNjFlM2FhNTIxLi4wZDRkODI3MDk2MDQ3OGNi
NTZjYWIwOWY1MmI1YjRlZmVkYzA4NDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaApAQCAtMzIsNiArMzIs
MTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBTcGVjaWFsUHJvcGVydHlDYWNoZUVu
dHJ5IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgflNwZWNpYWxQ
cm9wZXJ0eUNhY2hlRW50cnkoKTsKKyAgICBCYWc8Q2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX21pc3NXYXRjaHBvaW50czsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50PiBtX3ByZXNlbnRXYXRjaHBvaW50OworICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX3ZhbHVlOworfTsKKworc3RydWN0IFNwZWNpYWxQcm9wZXJ0eUNhY2hlIHsKKyAgICBXVEZf
TUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgU3BlY2lhbFByb3BlcnR5Q2FjaGVFbnRy
eSBtX2NhY2hlW251bWJlck9mQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5c107Cit9OworCiBpbmxp
bmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUp
OwpAQCAtNDIsMTMgKzU1LDE4IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVh
clByZXZpb3VzSUQoKQogICAgIG1fcHJldmlvdXMuY2xlYXIoKTsKIH0KIAotaW5saW5lIEpTU3Ry
aW5nKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZSgpIGNvbnN0Citpbmxp
bmUgSlNWYWx1ZSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hl
ZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpIGNvbnN0CiB7Ci0gICAgYXV0byogdmFsdWUgPSBtX29i
amVjdFRvU3RyaW5nVmFsdWUudW52YWxpZGF0ZWRHZXQoKTsKLSAgICBpZiAodmFsdWUgPT0gb2Jq
ZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAodmFsdWUpCi0gICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1ZSk7CisgICAgYXV0byog
Y2FjaGUgPSBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLmdldCgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhY2hlLT5tX2Nh
Y2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXS5tX3ZhbHVlLmdldCgpOworICAgIGlmICh2
YWx1ZSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlLmFzQ2VsbCgpKTsKKyNlbmRp
ZgogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTYsNCArMTE0LDI4IEBAIGlubGluZSB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRQcm9wZXJ0eU5hbWVzKFZNJiB2bSwgQ2FjaGVk
UHJvcGVydHlOYW1lCiAgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVzW3N0YXRpY19jYXN0PHVuc2ln
bmVkPihraW5kKV0uc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogfQogCitpbmxpbmUgYm9vbCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6Y2FuQ2FjaGVTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5IGtleSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAh
VGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGF1dG8qIGNhY2hlID0gbV9zcGVjaWFsUHJv
cGVydHlDYWNoZS5nZXQoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gY2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldLm1f
dmFsdWUuZ2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCk7Cit9CisK
K2lubGluZSBTcGVjaWFsUHJvcGVydHlDYWNoZSYgU3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZVNw
ZWNpYWxQcm9wZXJ0eUNhY2hlKCkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGlmIChhdXRvKiBjYWNoZSA9IG1f
c3BlY2lhbFByb3BlcnR5Q2FjaGUuZ2V0KCkpCisgICAgICAgIHJldHVybiAqY2FjaGU7CisgICAg
cmV0dXJuIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlU2xvdygpOworfQorCitpbmxpbmUgdm9p
ZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVTcGVjaWFsUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwgSlNWYWx1ZSB2
YWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIGlmICghY2FuQ2FjaGVTcGVjaWFsUHJvcGVydHkoa2V5KSkKKyAgICAgICAg
cmV0dXJuOworICAgIHJldHVybiBjYWNoZVNwZWNpYWxQcm9wZXJ0eVNsb3coZ2xvYmFsT2JqZWN0
LCB2bSwgb3duU3RydWN0dXJlLCB2YWx1ZSwga2V5LCBzbG90KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDk4NWUxMzYwNjA0NWI0Y2RjNGJjNjUyYmYwMDAzMzBlMGRhMTBkNWEuLmFkNzc3ODA5
YjYwODA1OWIwOTU4ZWU1Njc3MDJmZTlmMzNkODVhZDUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMjAtMDkt
MDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBD
YWNoZSB0b1N0cmluZyAvIHZhbHVlT2YgLyBAQHRvUHJpbWl0aXZlIGZvciBtYWpvciBjYXNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mv
ZGVsZXRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAo
c2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy5TeW1ib2wudG9QcmltaXRpdmUp
OgorICAgICAgICAqIHN0cmVzcy9kZWxldGUtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qczog
QWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChvYmplY3QuX19wcm90b19fLnRv
U3RyaW5nKToKKyAgICAgICAgKiBzdHJlc3MvZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0
eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvdyk6
CisgICAgICAgIChvYmplY3QuX19wcm90b19fLnZhbHVlT2YpOgorICAgICAgICAqIHN0cmVzcy9o
aWRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoc2hv
dWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy5TeW1ib2wudG9QcmltaXRpdmUpOgor
ICAgICAgICAqIHN0cmVzcy9oaWRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanM6IEFkZGVk
LgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy50b1N0cmlu
Zyk6CisgICAgICAgICogc3RyZXNzL2hpZGUtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKG9iamVjdC5fX3Byb3RvX18udmFs
dWVPZik6CisgICAgICAgICogc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9w
ZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChvYmplY3QuX19w
cm90b19fLlN5bWJvbC50b1ByaW1pdGl2ZSk6CisgICAgICAgICogc3RyZXNzL3JlcGxhY2UtY2Fj
aGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6Cisg
ICAgICAgIChvYmplY3QuX19wcm90b19fLnRvU3RyaW5nKToKKyAgICAgICAgKiBzdHJlc3MvcmVw
bGFjZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxk
QmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy52YWx1ZU9mKToKKwogMjAyMC0wOC0zMCAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEBkZWZh
dWx0UHJvbWlzZVRoZW4gZmFzdCBwYXRoIHNob3VsZCBjaGVjayBzcGVjaWVzIGNvbnN0cnVjdG9y
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXRvLXByaW1pdGl2ZS1w
cm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXBy
b3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkMzc4N2Y2NWQxN2UzNDNkOGE1NTQwY2Y4ODM2MzM1YzJl
MjRlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXRv
LXByaW1pdGl2ZS1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9i
amVjdCA9IHsKKyAgICBfX3Byb3RvX186IHsKKyAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV06
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgIH0K
K307CisKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitzaG91bGRCZShvYmplY3QgKyA0Miwg
ODQpOworZGVsZXRlIG9iamVjdC5fX3Byb3RvX19bU3ltYm9sLnRvUHJpbWl0aXZlXTsKK3Nob3Vs
ZEJlKG9iamVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9z
dHJlc3MvZGVsZXRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNj
OGFhZmM3NGY0N2UzNjg2MjYxODQ1NzZlMGEyZTQwNzc1YmEyZgotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzCkBAIC0w
LDAgKzEsMTcgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBp
ZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFs
dWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIgb2JqZWN0ID0geworICAgIF9fcHJvdG9fXzogewor
ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICJIZXki
OworICAgICAgICB9CisgICAgfQorfTsKKworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIZXk0MmAp
Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIZXk0MmApOworZGVsZXRlIG9iamVjdC5fX3Byb3Rv
X18udG9TdHJpbmc7CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmplY3QgT2JqZWN0XTQyYCk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXZhbHVlLW9mLXByb3Bl
cnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0eS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZDg3NDg4Y2U4Njk4NTg0ZjEyNWZmOGNlODcxMmY4MjExMDExNWY3Ci0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1w
cm9wZXJ0eS5qcwpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4
cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhy
b3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7Cisg
ICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGVycm9yID0g
ZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsK
K30KKwordmFyIG9iamVjdCA9IHsKKyAgICBfX3Byb3RvX186IHsKKyAgICAgICAgdG9TdHJpbmc6
IHVuZGVmaW5lZCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIDQyOworICAgICAgICB9CisgICAgfQorfTsKKworc2hvdWxkQmUob2JqZWN0ICsgNDIs
IDg0KTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitkZWxldGUgb2JqZWN0Ll9fcHJvdG9f
Xy52YWx1ZU9mOworc2hvdWxkVGhyb3coKCkgPT4geworICAgIG9iamVjdCArIDQyOworfSwgYFR5
cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZWApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
aGlkZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvaGlk
ZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5ZWI4YjlhNzZh
YTE1OGE0M2NhNmZiNmUwY2MwOGU4ODI2NTUxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9oaWRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMKQEAgLTAsMCArMSwx
MyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Cit9CisKK3ZhciBvYmplY3QgPSB7fTsKK29iamVjdC5fX3Byb3RvX18gPSB7fTsK
K3Nob3VsZEJlKG9iamVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKK3Nob3VsZEJlKG9i
amVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKK29iamVjdC5fX3Byb3RvX19bU3ltYm9s
LnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gNDI7Cit9Oworc2hvdWxk
QmUob2JqZWN0ICsgNDIsIDg0KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2Fj
aGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXRv
LXN0cmluZy1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjYzMTg0ZjI1ODlhZGJiNDBkMWVmNzcw
ZDBlZTA0MDhmM2RlOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGlkZS1j
YWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIHNo
b3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2
YXIgb2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0ge307CitzaG91bGRCZShvYmplY3Qg
KyA0MiwgYFtvYmplY3QgT2JqZWN0XTQyYCk7CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmpl
Y3QgT2JqZWN0XTQyYCk7CitvYmplY3QuX19wcm90b19fLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkg
eworICAgIHJldHVybiAiSGV5IjsKK307CitzaG91bGRCZShvYmplY3QgKyA0MiwgYEhleTQyYCk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0
eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFkMzE3ZmE4NGVjYzkzYWEyMTQyN2RlNTFjM2U3OWIzNjBhY2FiNGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0
eS5qcwpAQCAtMCwwICsxLDE0IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9Oworb2JqZWN0
Ll9fcHJvdG9fXyA9IHt9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00
MmApOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00MmApOworb2JqZWN0
Ll9fcHJvdG9fXy50b1N0cmluZyA9IHVuZGVmaW5lZDsKK29iamVjdC5fX3Byb3RvX18udmFsdWVP
ZiA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gNDI7Cit9Oworc2hvdWxkQmUob2JqZWN0ICsg
NDIsIDg0KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXBy
aW1pdGl2ZS1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXBy
aW1pdGl2ZS1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OThkMzMwMzFjZWJkZTVjMmIxMjUxZjJl
ZDhhYjM5Mjg2YTQxMTFhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvcmVwbGFj
ZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0
aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBl
Y3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOwor
fQorCit2YXIgb2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0geworICAgIFtTeW1ib2wu
dG9QcmltaXRpdmVdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiA0MjsKKyAgICB9Cit9
Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIDg0KTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7
CitvYmplY3QuX19wcm90b19fW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgcmV0dXJuIDQ1OworfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4Nyk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMgYi9K
U1Rlc3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjRjZmQwY2ZkMzRlYWFmMDUyMDIyMTMxNzg2NjMwMDIyMGUyMThkZgotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0
eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9Oworb2JqZWN0
Ll9fcHJvdG9fXyA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1
cm4gIkhpIjsKKyAgICB9Cit9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIaTQyYCk7CitzaG91
bGRCZShvYmplY3QgKyA0MiwgYEhpNDJgKTsKK29iamVjdC5fX3Byb3RvX18udG9TdHJpbmcgPSBm
dW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICJIZXkiOworfTsKK3Nob3VsZEJlKG9iamVjdCArIDQy
LCBgSGV5NDJgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXZh
bHVlLW9mLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVwbGFjZS1jYWNoZWQtdmFsdWUt
b2YtcHJvcGVydHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmMDYxNzY5MWY1MzFhNDNmYjI4OThlNDMwNzU1
MzNhYzcyYjZmMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2Fj
aGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIg
b2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0geworICAgIHRvU3RyaW5nOiB1bmRlZmlu
ZWQsCisgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gNDI7CisgICAg
fQorfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitzaG91bGRCZShvYmplY3QgKyA0Miwg
ODQpOworb2JqZWN0Ll9fcHJvdG9fXy52YWx1ZU9mID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVy
biA0MzsKK307CitzaG91bGRCZShvYmplY3QgKyA0MiwgODUpOwo=
</data>
<flag name="review"
          id="423180"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407845</attachid>
            <date>2020-09-02 18:26:30 -0700</date>
            <delta_ts>2020-09-02 18:26:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200902182630.patch</filename>
            <type>text/plain</type>
            <size>66452</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YzgxMGU4MGU4NzEyYWRhODkxMjEyZjgzMmRmMGNmYzI0NTJmODMzLi5kOTIwYjg1MzhjOWFmZTY0
NTNmYjllZWM5M2RmNTIyMzdhM2Y2MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKwor
ICAgICAgICBXaGVuIHRvUHJpbWl0aXZlIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBsb29rLXVwIHRo
cmVlIHByb3BlcnRpZXMgYXQgbW9zdCB0byBwZXJmb3JtIG9wZXJhdGlvbi4gQW5kIHRoZXNlIHNw
ZWNpYWwgcHJvcGVydGllcyBkbyBub3QgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBhdCBhbGwuCisg
ICAgICAgIFdlIGZvdW5kIHRoYXQgU3BlZWRvbWV0ZXIyL0VtYmVySlMtRGVidWctVG9kb01WQyBp
cyB1c2luZyB2ZXJ5IG11Y2ggdGltZSBmb3IgdGhpcyBwcm9wZXJ0eSBsb29rLXVwLiBXZSBzaG91
bGQgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBpbiBTdHJ1Y3R1cmVSYXJlRGF0YSwgd2hpY2gKKyAg
ICAgICAgc2hvdWxkIGJlIHNpbWlsYXIgdG8gQEB0b1N0cmluZ1RhZyAmIE9iamVjdCN0b1N0cmlu
ZyBjYWNoaW5nIG1lY2hhbmlzbS4KKworICAgICAgICBUaGlzIHBhdGNoIGdlbmVyYWxpemVzIEBA
dG9TdHJpbmdUYWcgJiBPYmplY3QjdG9TdHJpbmcgY2FjaGluZyBtZWNoYW5pc20gYXMgU3BlY2lh
bFByb3BlcnR5Q2FjaGUuIEFuZCB3ZSBhY2NlbGVyYXRlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBA
dG9QcmltaXRpdmUgbG9vay11cHMgaW4KKyAgICAgICAgdG9QcmltaXRpdmUgd2l0aCB0aGlzIGNh
Y2hpbmcgbWVjaGFuaXNtLgorCisgICAgICAgIFdlIGFsc28gcmVtb3ZlZCBwcm9wZXJ0eS1jaGFu
Z2Ugd2F0Y2hpbmcgaW4gSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUuIFRoaXMgd2FzIG9y
aWdpbmFsbHkgaW50cm9kdWNlZCB0byBpbXBsZW1lbnQgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RT
YW5lLiBCdXQgcmlnaHQgbm93LAorICAgICAgICBpdCBpcyB1c2luZyBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVFcXVpdmFsZW5jZUNvbmN1cnJlbnRseSBhbmQgd2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8gd2F0Y2ggaXQgaGVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVkIFNwZWVk
b21ldGVyMi9FbWJlckpTLURlYnVnLVRvZG9NVkMgYnkgMTAlLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9XYXRjaHBvaW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRTcGVjaWFsUHJvcGVydHlB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwLgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaC4KKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6b2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojp0b1ByaW1pdGl2ZSBjb25zdCk6CisgICAgICAgICogcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVTcGVjaWFsUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVTcGVjaWFsUHJvcGVydHlDYWNoZVNsb3cpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNo
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZVNwZWNpYWxQcm9wZXJ0
eVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJDYWNoZWRTcGVj
aWFsUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0VG9T
dHJpbmdWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFRvU3RyaW5nQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpPYmplY3RUb1N0cmluZ0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpp
c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0VG9TdHJpbmdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVS
YXJlRGF0YTo6Y2FjaGVkU3BlY2lhbFByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlUmFyZURhdGE6OmNhbkNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUgY29uc3QpOiBEZWxl
dGVkLgorCiAyMDIwLTA5LTAxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgU2tpcCBmYXN0L2Nzcy1jdXN0b20tcGFpbnQvb3V0LW9mLW1lbW9yeS13aGlsZS1h
ZGRpbmctd29ya2xldC1tb2R1bGUuaHRtbCBpZiBHaWdhY2FnZSBpcyBub3QgZW5hYmxlZApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNjg5NTVmMjJkZTJmMjYyNzg2ZTdlNjgxM2Ey
NDA4Yjg4N2U4OWRmLi4zNjEwYzJhMmFmNzExMjZiOWY5Yjk0OWE0NzIzMGE2NGMwODA1YjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg2Miw3ICsxODYyLDcgQEAKIAkJRTM5
RDQ1RjUxRDM5MDA1NjAwQjNCMzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3
MjgyIC8qIEludGVycHJldGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUzOUQ4QjJFMjMwMjFFMjYwMDI2NTg1MiAvKiBXYXNtT3Bl
cmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM5RDhCMkQyMzAyMUUxRTAwMjY1ODUyIC8qIFdhc21PcGVyYXRpb25zLmggKi87IH07CiAJCUUz
OURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAwODRGMzNB
IC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJRTM5RUVBRjMyMjgxMjQ1MDAwODQ3NEY0IC8qIE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzlFRUFGMjIyODEyNDRDMDA4NDc0RjQgLyogT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKKwkJRTM5RUVBRjMyMjgx
MjQ1MDAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM5RUVBRjIyMjgxMjQ0QzAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyB9OwogCQlFMzlGRUJFMzIzMzlDNUQ5MDBCNDBBQjAg
LyogSlNBc3luY0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM5RkVCRTIyMzM5QzVENDAwQjQwQUIwIC8qIEpTQXN5bmNHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTA1
MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87IH07CiAJCUUz
QTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0MkI2NzAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CkBAIC01MDc1LDggKzUwNzUsOCBAQAog
CQlFMzlEQTRBNDFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNb2R1bGVSZWNvcmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlEQTRBNTFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1
bGVSZWNvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVSZWNv
cmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5RTAzMEQyMkQ5RUEzRTAwNDA4
QzE4IC8qIFdlYkFzc2VtYmx5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gV2ViQXNzZW1ibHku
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzOUVFQUYxMjI4MTI0NEMwMDg0NzRG
NCAvKiBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzOUVFQUYyMjI4MTI0NEMwMDg0NzRG
NCAvKiBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzlFRUFGMTIyODEyNDRDMDA4NDc0RjQgLyogQ2Fj
aGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzOUVFQUYyMjI4MTI0NEMw
MDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOUZFQkUxMjMz
OUM1RDQwMEI0MEFCMCAvKiBKU0FzeW5jR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXN5bmNHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlG
RUJFMjIzMzlDNUQ0MDBCNDBBQjAgLyogSlNBc3luY0dlbmVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FzeW5jR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTA1
MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMjgsNiArNzEyOCw4IEBACiAJCQkJRkU4REU1NEMyM0FDMUU4
NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8sCiAJCQkJMTQ4QjE0
MTkyMjVERDFFOTAwRDZFOTk4IC8qIENhY2hlZEJ5dGVjb2RlLmNwcCAqLywKIAkJCQkxNDRDQTM0
RjIyMUYwMzc5MDA4MTc3ODkgLyogQ2FjaGVkQnl0ZWNvZGUuaCAqLywKKwkJCQlFMzlFRUFGMTIy
ODEyNDRDMDA4NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCAqLywKKwkJCQlFMzlFRUFGMjIyODEyNDRDMDA4NDc0RjQgLyogQ2FjaGVk
U3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRE
QUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLywKIAkJCQkxNDNCRTI2
NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLywKIAkJCQkxNDhCMTQxQjIyNURE
MUVBMDBENkU5OTggLyogQ2FjaGVQYXlsb2FkLmNwcCAqLywKQEAgLTc2MTIsOCArNzYxNCw2IEBA
CiAJCQkJRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50LmggKi8sCiAJCQkJQkMyNjgwQzgwRTE2RDRFOTAwQTA2RTkyIC8qIE9i
amVjdFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMyNjgwQzkwRTE2RDRFOTAwQTA2RTkyIC8qIE9i
amVjdFByb3RvdHlwZS5oICovLAotCQkJCUUzOUVFQUYxMjI4MTI0NEMwMDg0NzRGNCAvKiBPYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCi0JCQkJRTM5RUVB
RjIyMjgxMjQ0QzAwODQ3NEY0IC8qIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmggKi8sCiAJCQkJRjY5MkE4NzcwMjU1NTk3RDAxRkY2MEY3IC8qIE9wZXJhdGlvbnMu
Y3BwICovLAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmggKi8s
CiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLApAQCAtOTI2
Niw2ICs5MjY2LDcgQEAKIAkJCQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NENBMzUwMjIyNDE4MDEw
MDgxNzc4OSAvKiBDYWNoZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUx
QkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MzlFRUFGMzIyODEyNDUwMDA4NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEYwOUMyQTIyMzE5MjMx
MDBDRjg4RUIgLyogQ2FjaGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDlFQ0MxMjI1
RTE3OEMwMEJFREQ1NCAvKiBDYWNoZVBheWxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDlF
Q0MwMjI1RTE3ODEwMEJFREQ1NCAvKiBDYWNoZVVwZGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDE5OSw3ICsxMDIwMCw2IEBACiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUUzOUVFQUYzMjI4MTI0NTAwMDg0NzRGNCAvKiBPYmplY3RUb1N0cmluZ0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4Rjcw
RTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEY3OUY3MDIxNkVBRkQyMDAwNDZEMzkgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTY0ODcyRTIxNDFEMDQ4MDBBQjBEM0UgLyogT3Bjb2RlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggZWQzYThkMWI1MTQzN2I1ZGFkY2QyOTVm
NzMyYzBkOWEzM2ZkMDQ2ZS4uNDlhNzYxZjEyYWE1MGNmMTk0MDk2YWEwMjk0ZjhjMDkwNmE3Nzk4
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzQwLDYgKzc0MCw3IEBAIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcAogcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5jcHAKIHJ1bnRpbWUvQ2FjaGVkQnl0ZWNvZGUuY3BwCitydW50aW1l
L0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCiBydW50aW1lL0Ns
YXNzSW5mby5jcHAKQEAgLTkzOSw3ICs5NDAsNiBAQCBydW50aW1lL051bWJlclByb3RvdHlwZS5j
cHAKIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCiBydW50aW1lL09iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuY3BwCiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKLXJ1bnRpbWUvT2Jq
ZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCiBydW50aW1lL09wZXJh
dGlvbnMuY3BwCiBydW50aW1lL09wdGlvbnMuY3BwCiBydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3Jl
YXRpbmdGdXp6ZXJBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9X
YXRjaHBvaW50LmNwcAppbmRleCAzM2RiMDVmZDAxYjI3ZjM1YTk0NWFjY2JlYjc4MGE5ZjAwMmUx
ZDMzLi45MTMzYzgwODJiYmRiMjc3MDZkNTc5ZjZjODhmNTc3NzZhNzQ3ZDI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCkBAIC0yNywxMiArMjcs
MTIgQEAKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAKICNpbmNsdWRlICJBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3BlY2lh
bFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25SYXJlRGF0YS5oIgogI2luY2x1ZGUg
IkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSAiVk0uaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgKaW5kZXggNmMwNTdmZDU1ZGVjMmUzODA1N2Q4OTg4N2M0Y2I3YmI0OWY4
ZTMwYy4uZGYwYWNlODBiMWI4NmY1NDVkNDNjOTU4MWI1NWU2ZjM0NDRlOTIyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCkBAIC0xMTQsNyArMTE0LDcg
QEAgY2xhc3MgV2F0Y2hwb2ludFNldDsKICAgICBtYWNybyhDb2RlQmxvY2tKZXR0aXNvbmluZywg
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KSBcCiAgICAgbWFjcm8oTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmUsIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCkgXAogICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFBbGxvY2F0aW9uUHJv
ZmlsZUNsZWFyaW5nLCBGdW5jdGlvblJhcmVEYXRhOjpBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5n
V2F0Y2hwb2ludCkgXAotICAgIG1hY3JvKE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmUs
IE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KQorICAgIG1hY3JvKENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlLCBDYWNoZWRTcGVjaWFsUHJvcGVy
dHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoSklUKQogI2RlZmlu
ZSBKU0NfV0FUQ0hQT0lOVF9UWVBFU19XSVRIT1VUX0RGRyhtYWNybykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODFkNmJlN2I5NmQ3NTZiMDRiMzhjNTU2YzhjYmE2NDcxNDVmZGE0OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFNw
ZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBTdHJ1Y3R1cmVSYXJlRGF0YSogc3Ry
dWN0dXJlUmFyZURhdGEpCisgICAgOiBXYXRjaHBvaW50KFdhdGNocG9pbnQ6OlR5cGU6OkNhY2hl
ZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlKQorICAgICwgbV9zdHJ1Y3R1cmVSYXJl
RGF0YShzdHJ1Y3R1cmVSYXJlRGF0YSkKKyAgICAsIG1fa2V5KGtleSkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50
V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSh2
bSktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2
bSwgY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgaWYgKCFtX3N0cnVjdHVyZVJhcmVEYXRhLT5p
c0xpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFBy
b3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwo
dm0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5IGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWc7CisgICAgaWYg
KG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwo
KSkKKyAgICAgICAga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZzsK
KyAgICBlbHNlIGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5p
bXBsKCkpCisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc7
CisgICAgZWxzZSBpZiAobV9rZXkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5p
bXBsKCkpCisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZjsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFt
ZXMtPnRvUHJpbWl0aXZlU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGtleSA9IENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUtleTo6VG9QcmltaXRpdmU7CisgICAgfQorCisgICAgbV9zdHJ1Y3R1cmVSYXJl
RGF0YS0+Y2xlYXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRT
cGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4YTlhMDIwY2JkOWNjMTU3NDMwYjI0Nzg4MzdmNTc2
ODJiMGVhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiUGFja2VkQ2VsbFB0ci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlUmFyZURhdGE7CisKK2NsYXNzIENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1
YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBT
dHJ1Y3R1cmVSYXJlRGF0YSopOworCisgICAgdm9pZCBpbnN0YWxsKFZNJik7CisKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0K
KworICAgIHZvaWQgZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpOworICAgIAor
cHJpdmF0ZToKKyAgICAvLyBPd24gZGVzdHJ1Y3RvciBtYXkgbm90IGJlIGNhbGxlZC4gS2VlcCBt
ZW1iZXJzIHRyaXZpYWxseSBkZXN0cnVjdGlibGUuCisgICAgSlNDX1dBVENIUE9JTlRfRklFTEQo
UGFja2VkQ2VsbFB0cjxTdHJ1Y3R1cmVSYXJlRGF0YT4sIG1fc3RydWN0dXJlUmFyZURhdGEpOwor
ICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7
Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKaW5kZXggZWI1YzJjMDBkZWUwMDc2M2M2MTVlYzE4ZjhjNGY1YjJhNmEyYzIwNi4u
MGYzNDgzNDYwNTUwZWJhNjNmM2I2OGI4ZjdkNmI4NDQwOThmNDMzNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNjEwLDYgKzYx
MCwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBKU0Z1bmN0aW9u
KiBhcHBseUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5j
dGlvblByb3BlcnRpZXModm0sIHRoaXMsICZjYWxsRnVuY3Rpb24sICZhcHBseUZ1bmN0aW9uLCAm
aGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbik7CisgICAgbV9vYmplY3RQcm90b1RvU3RyaW5nRnVu
Y3Rpb24uaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNGdW5jdGlv
bj4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0
LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLnN0cmlu
ZygpLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgTm9JbnRyaW5zaWMpKTsKKyAgICAgICAgfSk7
CiAgICAgbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi5pbml0TGF0ZXIoCiAgICAgICAgIFtd
IChjb25zdCBJbml0aWFsaXplcjxKU0Z1bmN0aW9uPiYgaW5pdCkgewogICAgICAgICAgICAgaW5p
dC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGluaXQub3duZXIsIDAsIGluaXQudm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuc3RyaW5nKCksIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcs
IE5vSW50cmluc2ljKSk7CkBAIC0xODk1LDYgKzE4OTksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAg
ICB0aGlzT2JqZWN0LT5tX3BhcnNlSW50RnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9wYXJzZUZsb2F0RnVuY3Rpb24udmlzaXQodmlzaXRvcik7CisgICAgdGhpc09i
amVjdC0+bV9vYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAg
dGhpc09iamVjdC0+bV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi52aXNpdCh2aXNpdG9y
KTsKICAgICB0aGlzT2JqZWN0LT5tX2V2YWxGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGE3NTVj
MzExMDRkMzg4ZTI1NDg3Y2Y3NGYwMTZmMTA3NjZhZTEzYjQuLjMzMGU1YjBlNjdmNmRjMjY5MWJl
ZDRiZDMxNGY3YzNkMzdlMjM0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzEzLDYgKzMxMyw3IEBAIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIExhenlQcm9wZXJ0
eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9wYXJzZUludEZ1bmN0aW9uOwogICAgIExh
enlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9wYXJzZUZsb2F0RnVuY3Rp
b247CiAKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fb2Jq
ZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVj
dCwgSlNGdW5jdGlvbj4gbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbjsKICAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0
aW9uOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9ldmFs
RnVuY3Rpb247CkBAIC02MzMsNiArNjM0LDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAKICAgICBKU0Z1bmN0aW9uKiBldmFsRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2V2YWxGdW5jdGlvbi5nZXQodGhpcyk7IH0KICAgICBK
U0Z1bmN0aW9uKiB0aHJvd1R5cGVFcnJvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgSlNGdW5jdGlv
biogb2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RQ
cm90b1RvU3RyaW5nRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlvbiogYXJyYXlQ
cm90b1RvU3RyaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9Ub1N0cmlu
Z0Z1bmN0aW9uLmdldCh0aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9WYWx1ZXNG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLmdldCh0
aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbkNvbmN1cnJl
bnRseSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLmdldENvbmN1
cnJlbnRseSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
aW5kZXggNTBhZDBhNmJiYzA0YWI2ZjRlNjAzZjYzZTNkYTcyZThmZTA5MmM0Ni4uOTI4ZWViMmVm
ZDEzNDJmOTE3MTllNGQ3Y2Y2ZWFlYjgxMGJlZTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjE0NCwzMyArMjE0NCw0NiBAQCBib29sIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIH0KIH0KIAotZW51bSBjbGFzcyBUeXBlSGludE1vZGUgeyBUYWtl
c0hpbnQsIERvZXNOb3RUYWtlSGludCB9OwotCi10ZW1wbGF0ZTxUeXBlSGludE1vZGUgbW9kZSA9
IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50PgordGVtcGxhdGU8Q2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5IGtleT4KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWl0
aXZlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUgZml4ZWQ6IHJkYXI6Ly9wcm9ibGVtLzMzNDUx
ODQwCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzEw
OS4KLSAgICBjb25zdGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBtb2RlID09IFR5cGVI
aW50TW9kZTo6VGFrZXNIaW50OwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4ob2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVsbFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gaGFzUHJv
cGVydHkgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9u
KCkpOwotICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIG1vZGUgPT0gVHlw
ZUhpbnRNb2RlOjpUYWtlc0hpbnQpCisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KGtleSk7CisgICAgaWYgKCFmdW5jdGlv
bikgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXQpOworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hl
biB3ZSBoYXZlIGZpeGVkOiByZGFyOi8vcHJvYmxlbS8zMzQ1MTg0MAorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTA5LgorICAgICAgICBjb25z
dGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5S2V5OjpUb1ByaW1pdGl2ZTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPihvYmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJl
PihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBo
YXNQcm9wZXJ0eSA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDog
anNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmNhY2hlU3BlY2lh
bFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0sIGZ1bmN0aW9uLCBrZXksIHNsb3QpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7CisgICAgfQor
ICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworCisgICAgLy8gQWRkIG9wdGltaXphdGlvbnMgZm9yIGZyZXF1ZW50bHkgY2FsbGVk
IGZ1bmN0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDg0CisgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5OjpUb1N0cmluZykgeworICAgICAgICBpZiAoZnVuY3Rpb24gPT0gZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVk
U3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxs
RGF0YSh2bSwgZnVuY3Rpb24pOwogICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpU
eXBlOjpOb25lKSB7Ci0gICAgICAgIGlmIChtb2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50
KQorICAgICAgICBpZiBjb25zdGV4cHIgKGtleSA9PSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6
OlRvUHJpbWl0aXZlKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlN5bWJvbC50b1ByaW1pdGl2ZSBpcyBub3QgYSBmdW5jdGlvbiwgdW5kZWZpbmVkLCBv
ciBudWxsIl9zKTsKICAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxBcmdzOwotICAgIGlmIChtb2RlID09IFR5cGVI
aW50TW9kZTo6VGFrZXNIaW50KSB7CisgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5S2V5OjpUb1ByaW1pdGl2ZSkgewogICAgICAgICBKU1N0cmluZyogaGludFN0
cmluZyA9IG51bGxwdHI7CiAgICAgICAgIHN3aXRjaCAoaGludCkgewogICAgICAgICBjYXNlIE5v
UHJlZmVyZW5jZToKQEAgLTIxOTAsOCArMjIwMywxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
YwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxs
RGF0YSwgY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCksIGNhbGxBcmdzKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7CiAgICAgQVNTRVJUKCFy
ZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQotICAg
ICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGludE1vZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFs
dWUoKSA6IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9Qcmlt
aXRpdmUgcmV0dXJuZWQgYW4gb2JqZWN0Il9zKTsKKyAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5
OjpUb1ByaW1pdGl2ZSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiU3ltYm9sLnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCJfcyk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTIyMDEsMjcgKzIyMTcsMjIgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1By
aW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmkKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2hhdGV2ZXIgZGVmYXVsdCB2
YWx1ZSBtZXRob2RzIHRoZXJlIGFyZSBvbiBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gYXJlCi0g
ICAgLy8gYmVpbmcgd2F0Y2hlZC4KLSAgICBmb3IgKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QgPSB0
aGlzOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+c3RvcmVkUHJvdG90
eXBlT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+c3RhcnRX
YXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsKLQogICAgIEpTVmFsdWUg
dmFsdWU7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKSB7Ci0gICAgICAgIHZhbHVlID0g
Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5h
bWVzLT50b1N0cmluZywgaGludCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVu
Y3Rpb248Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0LCB0
aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEVYQ0VQVElP
Tl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVl
LmFzQ2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwg
dGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVlID0g
Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpWYWx1ZU9m
PihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOwog
ICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBzY29wZS5leGNl
cHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKICAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZSA9IGNhbGxUb1By
aW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dmFs
dWVPZiwgaGludCk7CisgICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248Q2Fj
aGVkU3BlY2lhbFByb3BlcnR5S2V5OjpWYWx1ZU9mPihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnBy
b3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSB8fCBzY29wZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7
CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAg
dmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxsVG9Qcmlt
aXRpdmVGdW5jdGlvbjxDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nPihnbG9iYWxP
YmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAg
RVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkg
PT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gdmFsdWU7CkBAIC0yMjQyLDcgKzIyNTMsNyBAQCBKU1ZhbHVlIEpTT2JqZWN0Ojp0b1ByaW1p
dGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeQog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZl
RnVuY3Rpb248VHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQ+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0u
cHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wsIHByZWZlcnJlZFR5cGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxDYWNoZWRTcGVjaWFsUHJvcGVy
dHlLZXk6OlRvUHJpbWl0aXZlPihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMt
PnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVmZXJyZWRUeXBlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAK
aW5kZXggNDE3MGQyNDgzZjVmYzgyMGU0OWVjMzVmYTgwYTAzYjIwZDhhNWFiMS4uNTc3N2FmYmEy
NjI3OTY4MDZkYWFlNGM5Y2U3MWVhYjUzZTBkZTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZv
aWQgT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIG9iamVjdFByb3Rv
RnVuY1RvU3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgMCk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvVG9TdHJpbmdGdW5j
dGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMCk7CiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+dmFsdWVPZiwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOwogICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXNPd25Q
cm9wZXJ0eSwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAxLCBIYXNPd25Qcm9wZXJ0eUludHJp
bnNpYyk7CkBAIC0zMjUsNyArMzI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEludGVncml0
eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7Ci0gICAg
YXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5vYmplY3RUb1N0cmluZ1Zh
bHVlKCk7CisgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNo
ZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZyk7
CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogCkBAIC0zNTAsNyArMzUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogICAgIEpT
U3RyaW5nKiBqc1Jlc3VsdCA9IGpzU3RyaW5nKGdsb2JhbE9iamVjdCwgdm0uc21hbGxTdHJpbmdz
Lm9iamVjdFN0cmluZ1N0YXJ0KCksIGpzVGFnLCB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKCddJykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShnbG9i
YWxPYmplY3QsIHZtLCBqc1Jlc3VsdCwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+c3RydWN0dXJl
KHZtKS0+Y2FjaGVTcGVjaWFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB2bSwganNSZXN1bHQsIENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWcsIHNsb3QpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNSZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwOWVmNThkZjIxNjk0OGNjYTJiZWQ1ODY2YWJkODgxODEzMjVkMzMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
IgotCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVE
YXRhLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgU3RydWN0dXJlUmFyZURhdGEqIHN0
cnVjdHVyZVJhcmVEYXRhKQotICAgIDogV2F0Y2hwb2ludChXYXRjaHBvaW50OjpUeXBlOjpPYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlKQotICAgICwgbV9zdHJ1Y3R1cmVSYXJlRGF0YShz
dHJ1Y3R1cmVSYXJlRGF0YSkKLSAgICAsIG1fa2V5KGtleSkKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hw
b2ludCgpKTsKLX0KLQotdm9pZCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludDo6aW5zdGFsbChWTSYgdm0pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9rZXkuaXNXYXRj
aGFibGUoKSk7Ci0KLSAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKHZtKS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQodGhpcyk7Ci19Ci0KLXZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwm
KQotewotICAgIGlmICghbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+aXNMaXZlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2tleS5pc1dhdGNoYWJsZShQcm9wZXJ0eUNvbmRpdGlvbjo6RW5z
dXJlV2F0Y2hhYmlsaXR5KSkgewotICAgICAgICBpbnN0YWxsKHZtKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNsZWFyT2JqZWN0VG9TdHJpbmdW
YWx1ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
OWY0Zjc1MDVlMGY3Y2JkMWEwZDk1YzExOGJkYzVkYTNlMGJlZjMzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgotI2luY2x1ZGUgIlBhY2tlZENlbGxQdHIu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgotI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhOwotCi1jbGFz
cyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1Ymxp
YyBXYXRjaHBvaW50IHsKLXB1YmxpYzoKLSAgICBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIFN0cnVjdHVyZVJh
cmVEYXRhKik7Ci0KLSAgICB2b2lkIGluc3RhbGwoVk0mKTsKLQotICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQotCi0gICAgdm9p
ZCBmaXJlSW50ZXJuYWwoVk0mLCBjb25zdCBGaXJlRGV0YWlsJik7Ci0gICAgCi1wcml2YXRlOgot
ICAgIC8vIE93biBkZXN0cnVjdG9yIG1heSBub3QgYmUgY2FsbGVkLiBLZWVwIG1lbWJlcnMgdHJp
dmlhbGx5IGRlc3RydWN0aWJsZS4KLSAgICBKU0NfV0FUQ0hQT0lOVF9GSUVMRChQYWNrZWRDZWxs
UHRyPFN0cnVjdHVyZVJhcmVEYXRhPiwgbV9zdHJ1Y3R1cmVSYXJlRGF0YSk7Ci0gICAgSlNDX1dB
VENIUE9JTlRfRklFTEQoT2JqZWN0UHJvcGVydHlDb25kaXRpb24sIG1fa2V5KTsKLX07Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMzg5OWQxNmZi
YjcxZjEzZmYwNGEzYWFjY2Y3YmI0MzVhMjczNmUyNy4uZmE4NTIyYjk1NjIyOWU5YzAwNjYyMWUy
MTFiNWM0Yjk1YzExMzliZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKQEAgLTUyOSwxNCArNTI5LDEzIEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogCiAgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYs
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAotICAgIEpTU3RyaW5nKiBv
YmplY3RUb1N0cmluZ1ZhbHVlKCkKKyAgICBKU1ZhbHVlIGNhY2hlZFNwZWNpYWxQcm9wZXJ0eShD
YWNoZWRTcGVjaWFsUHJvcGVydHlLZXkga2V5KQogICAgIHsKICAgICAgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiByYXJl
RGF0YSgpLT5vYmplY3RUb1N0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KGtl
eSk7CiAgICAgfQotCi0gICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2Jq
ZWN0KiwgVk0mLCBKU1N0cmluZyogdmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdU
YWdTeW1ib2xTbG90KTsKKyAgICB2b2lkIGNhY2hlU3BlY2lhbFByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiwgVk0mLCBKU1ZhbHVlLCBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXksIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiBtX2NsYXNzSW5mbzsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMWNmNmY4N2ZiOTA4N2RiOWE5ZDRjNGM1MGE4ZWJh
M2M3YzAxMDFlNi4uZWM4MTk5NjQyZWI0ODc4MTBlYzI2MGJkZmU1MjBjYWZmYzc2YjZmYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApA
QCAtNDI3LDExICs0MjcsMTEgQEAgaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KHNpemVfdCBjdXJyZW50Q2FwYWNpdHkpCiAgICAgcmV0dXJuIGN1cnJlbnRDYXBhY2l0
eSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKIH0KIAotaW5saW5lIHZvaWQgU3RydWN0dXJlOjpz
ZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2
bSwgSlNTdHJpbmcqIHZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9s
U2xvdCkKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2FjaGVTcGVjaWFsUHJvcGVydHkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBDYWNoZWRTcGVj
aWFsUHJvcGVydHlLZXkga2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYg
KCFoYXNSYXJlRGF0YSgpKQogICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKLSAgICByYXJl
RGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGdsb2JhbE9iamVjdCwgdm0sIHRoaXMsIHZh
bHVlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpOworICAgIHJhcmVEYXRhKCktPmNhY2hlU3BlY2lh
bFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0sIHRoaXMsIHZhbHVlLCBrZXksIHNsb3QpOwogfQog
CiB0ZW1wbGF0ZTxTdHJ1Y3R1cmU6OlNob3VsZFBpbiBzaG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAKaW5kZXggNWQ5ZWIzODAyMmYwODFmZGZhY2ZjMjk4YTk5NjZkNWE2MWU0YzZhNC4uOTA5
ZWJkYmM0NGI3ZmJjNDIwMmNkNjk2N2MwOWNiZDI2NDI4Y2NjMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcApAQCAtMjcsMTIg
KzI3LDEyIEBACiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIKIAogI2luY2x1ZGUgIkFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCIKKyNpbmNsdWRlICJD
YWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRl
ICJPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgpAQCAtNzQsNyArNzQsMTAgQEAgdm9pZCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzKTsKLSAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPm9iamVjdFRvU3RyaW5nVmFsdWUoKSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPm1fc3BlY2lhbFByb3BlcnR5Q2FjaGUpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZDYWNoZWRTcGVjaWFsUHJv
cGVydHlLZXlzOyArK2luZGV4KQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZCh0aGlzT2JqZWN0LT5jYWNoZWRTcGVjaWFsUHJvcGVydHkoc3RhdGljX2Nhc3Q8Q2FjaGVkU3Bl
Y2lhbFByb3BlcnR5S2V5PihpbmRleCkpKTsKKyAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZkNhY2hlZFByb3BlcnR5TmFtZXM7ICsraW5k
ZXgpIHsKICAgICAgICAgYXV0byogY2FjaGVkID0gdGhpc09iamVjdC0+bV9jYWNoZWRQcm9wZXJ0
eU5hbWVzW2luZGV4XS51bnZhbGlkYXRlZEdldCgpOwpAQCAtODMsMTIgKzg2LDEyIEBAIHZvaWQg
U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICB9CiB9CiAKLS8vIC0tLS0tLS0tLS0tIE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcoKSBoZWxwZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCisvLyAtLS0t
LS0tLS0tLSBDYWNoZWQgc3BlY2lhbCBwcm9wZXJ0aWVzIGhlbHBlciB3YXRjaHBvaW50IGNsYXNz
ZXMgLS0tLS0tLS0tLS0KIAotY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CitjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIEJhc2U7Ci0g
ICAgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBTdHJ1Y3R1cmVSYXJlRGF0YSopOworICAg
IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIFN0cnVjdHVyZVJhcmVEYXRhKik7
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgZmluYWw7CkBAIC05NywzMyAr
MTAwLDYxIEBAIGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0CiAgICAgU3RydWN0dXJlUmFyZURhdGEq
IG1fc3RydWN0dXJlUmFyZURhdGE7CiB9OwogCi12b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRP
YmplY3RUb1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwg
U3RydWN0dXJlKiBvd25TdHJ1Y3R1cmUsIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlT
bG90JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitTcGVjaWFsUHJvcGVydHlDYWNoZUVudHJ5Ojp+
U3BlY2lhbFByb3BlcnR5Q2FjaGVFbnRyeSgpID0gZGVmYXVsdDsKKworU3BlY2lhbFByb3BlcnR5
Q2FjaGUmIFN0cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVTcGVjaWFsUHJvcGVydHlDYWNoZVNsb3co
KQogewotICAgIGlmIChjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlKTsKKyAgICBh
dXRvIGNhY2hlID0gbWFrZVVuaXF1ZTxTcGVjaWFsUHJvcGVydHlDYWNoZT4oKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBFeHBvc2UgdmFsaWQgc3RydWN0IGZvciBjb25jdXJyZW50
IHRocmVhZHMgaW5jbHVkaW5nIGNvbmN1cnJlbnQgY29tcGlsZXJzLgorICAgIG1fc3BlY2lhbFBy
b3BlcnR5Q2FjaGUgPSBXVEZNb3ZlKGNhY2hlKTsKKyAgICByZXR1cm4gKm1fc3BlY2lhbFByb3Bl
cnR5Q2FjaGUuZ2V0KCk7Cit9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpnaXZl
VXBPblNwZWNpYWxQcm9wZXJ0eUNhY2hlKENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpCit7
CisgICAgZW5zdXJlU3BlY2lhbFByb3BlcnR5Q2FjaGUoKS5tX2NhY2hlW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihrZXkpXS5tX3ZhbHVlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNDZWxsOjpzZWVu
TXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpOworfQorCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpj
YWNoZVNwZWNpYWxQcm9wZXJ0eVNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwgSlNWYWx1ZSB2YWx1ZSwgQ2FjaGVkU3BlY2lh
bFByb3BlcnR5S2V5IGtleSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBudWxscHRyOworICAgIHN3aXRjaCAoa2V5KSB7CisgICAgY2Fz
ZSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nVGFnOgorICAgICAgICB1aWQgPSB2
bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZzoKKyAgICAgICAg
dWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZjoKKyAgICAgICAgdWlk
ID0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1ByaW1pdGl2ZToKKyAgICAgICAgdWlk
ID0gdm0ucHJvcGVydHlOYW1lcy0+dG9QcmltaXRpdmVTeW1ib2wuaW1wbCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OwotICAgIGlmICh0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNWYWx1ZSgpKSB7Ci0gICAgICAgIC8v
IFdlIGRvbid0IGhhbmRsZSB0aGUgb3duIHByb3BlcnR5IGNhc2Ugb2YgU3ltYm9sLnRvU3RyaW5n
VGFnIGJlY2F1c2Ugd2Ugd291bGQgbmV2ZXIga25vdyBpZiBhIG5ldwotICAgICAgICAvLyBvYmpl
Y3QgdHJhbnNpdGlvbmluZyB0byB0aGUgc2FtZSBzdHJ1Y3R1cmUgaGFkIHRoZSBzYW1lIHZhbHVl
IHN0b3JlZCBpbiBTeW1ib2wudG9TdHJpbmdUYWcuCisgICAgaWYgKHNsb3QuaXNWYWx1ZSgpKSB7
CisgICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGUgb3duIHByb3BlcnR5IGNhc2Ugb2Ygc3Bl
Y2lhbCBwcm9wZXJ0aWVzICh0b1N0cmluZywgdmFsdWVPZiwgQEB0b1ByaW1pdGl2ZSwgQEB0b1N0
cmluZ1RhZykgYmVjYXVzZSB3ZSB3b3VsZCBuZXZlciBrbm93IGlmIGEgbmV3CisgICAgICAgIC8v
IG9iamVjdCB0cmFuc2l0aW9uaW5nIHRvIHRoZSBzYW1lIHN0cnVjdHVyZSBoYWQgdGhlIHNhbWUg
dmFsdWUgc3RvcmVkIGluIHRoYXQgcHJvcGVydHkuCiAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwg
dGhpcyBpcyBhIHN1cGVyIHVubGlrZWx5IGNhc2UgYW55d2F5LgotICAgICAgICBpZiAoIXRvU3Ry
aW5nVGFnU3ltYm9sU2xvdC5pc0NhY2hlYWJsZSgpIHx8IHRvU3RyaW5nVGFnU3ltYm9sU2xvdC5z
bG90QmFzZSgpLT5zdHJ1Y3R1cmUodm0pID09IG93blN0cnVjdHVyZSkKKyAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkgfHwgc2xvdC5zbG90QmFzZSgpLT5zdHJ1Y3R1cmUodm0pID09IG93
blN0cnVjdHVyZSkKICAgICAgICAgICAgIHJldHVybjsKIAotCi0gICAgICAgIC8vIFRoaXMgd2ls
bCBub3QgY3JlYXRlIGEgY29uZGl0aW9uIGZvciB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYnV0IHRo
YXQgaXMgZ29vZCBiZWNhdXNlIHdlIGtub3cgdGhlIFN5bWJvbC50b1N0cmluZ1RhZworICAgICAg
ICAvLyBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3Ry
dWN0dXJlIGJ1dCB0aGF0IGlzIGdvb2QgYmVjYXVzZSB3ZSBrbm93IHRoYXQgcHJvcGVydHkKICAg
ICAgICAgLy8gaXMgbm90IG9uIHRoZSBvd25TdHJ1Y3R1cmUgc28gd2Ugd2lsbCB0cmFuc2lzaXRp
b24gaWYgb25lIGlzIGFkZGVkIGFuZCB0aGlzIGNhY2hlIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQu
Ci0gICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1
cmUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdC5zbG90QmFzZSgpKTsKLSAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQodm0sIHRoaXMs
IGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJh
c2UoKSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKTsKKyAgICAg
ICAgcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCwgb3duU3RydWN0
dXJlLCBzbG90LnNsb3RCYXNlKCksIHVpZCk7CiAgICAgICAgIEFTU0VSVCghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSk7Ci0g
ICAgfSBlbHNlIGlmICh0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNVbnNldCgpKSB7CisgICAgfSBl
bHNlIGlmIChzbG90LmlzVW5zZXQoKSkgewogICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5n
KGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJlLCBudWxscHRyKTsKLSAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCB0aGlzLCBnbG9iYWxP
YmplY3QsIG93blN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wu
aW1wbCgpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdWlkKTsKICAg
ICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAg
ICAgIGdpdmVVcE9uU3BlY2lhbFByb3BlcnR5Q2FjaGUoa2V5KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTM2LDY3ICsxNjcsOTAgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0
T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYKIAog
ICAgICAgICAgICAgLy8gVGhlIGVxdWl2YWxlbmNlIGNvbmRpdGlvbiB3b24ndCBiZSB3YXRjaGFi
bGUgaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gYSByZXBsYWNlbWVudC4KICAgICAgICAgICAgIGlm
ICghZXF1aXZDb25kaXRpb24uaXNXYXRjaGFibGUoKSkgewotICAgICAgICAgICAgICAgIGdpdmVV
cE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAgICAgICAgICAgICAgZ2l2ZVVwT25T
cGVjaWFsUHJvcGVydHlDYWNoZShrZXkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghY29uZGl0aW9uLmlzV2F0Y2hhYmxlKCkpIHsK
LSAgICAgICAgICAgIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCk7CisgICAgICAg
ICAgICBnaXZlVXBPblNwZWNpYWxQcm9wZXJ0eUNhY2hlKGtleSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eSgpKTsKKyAgICBhdXRvJiBjYWNoZSA9IGVuc3VyZVNwZWNpYWxQcm9w
ZXJ0eUNhY2hlKCkubV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV07CiAgICAgZm9y
IChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBjb25kaXRpb24gOiBjb25kaXRpb25TZXQpIHsKICAg
ICAgICAgaWYgKGNvbmRpdGlvbi5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRp
b246OlByZXNlbmNlKSB7Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZl
cnJlZFZhbHVlV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KGVxdWl2Q29uZGl0aW9uLCB0aGlzKTsKLSAg
ICAgICAgICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBvaW50
LT5pbnN0YWxsKHZtKTsKKyAgICAgICAgICAgIGNhY2hlLm1fZXF1aXZhbGVuY2VXYXRjaHBvaW50
ID0gbWFrZVVuaXF1ZTxDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ+KGVxdWl2Q29uZGl0aW9uLCB0aGlzKTsKKyAgICAgICAgICAgIGNh
Y2hlLm1fZXF1aXZhbGVuY2VXYXRjaHBvaW50LT5pbnN0YWxsKHZtKTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0LmFkZChj
b25kaXRpb24sIHRoaXMpLT5pbnN0YWxsKHZtKTsKKyAgICAgICAgICAgIGNhY2hlLm1fbWlzc1dh
dGNocG9pbnRzLmFkZChjb25kaXRpb24sIHRoaXMpLT5pbnN0YWxsKHZtKTsKICAgICB9Ci0KLSAg
ICBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgY2FjaGUu
bV92YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6Y2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCkKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNs
ZWFyQ2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpCiB7
Ci0gICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlV2F0Y2hwb2ludFNldC5jbGVhcigpOwotICAg
IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRjaHBvaW50LnJlc2V0KCk7
Ci0gICAgaWYgKCFjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUoKSkKLSAgICAgICAgbV9vYmpl
Y3RUb1N0cmluZ1ZhbHVlLmNsZWFyKCk7CisgICAgYXV0byogb2JqZWN0VG9TdHJpbmdDYWNoZSA9
IG1fc3BlY2lhbFByb3BlcnR5Q2FjaGUuZ2V0KCk7CisgICAgaWYgKCFvYmplY3RUb1N0cmluZ0Nh
Y2hlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgY2FjaGUgPSBvYmplY3RUb1N0cmluZ0Nh
Y2hlLT5tX2NhY2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXTsKKyAgICBjYWNoZS5tX21p
c3NXYXRjaHBvaW50cy5jbGVhcigpOworICAgIGNhY2hlLm1fZXF1aXZhbGVuY2VXYXRjaHBvaW50
LnJlc2V0KCk7CisgICAgaWYgKGNhY2hlLm1fdmFsdWUuZ2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVs
dGlwbGVDYWxsZWVPYmplY3RzKCkpCisgICAgICAgIGNhY2hlLm1fdmFsdWUuY2xlYXIoKTsKIH0K
IAogdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogewotICAgIGlmIChtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hw
b2ludCkgewotICAgICAgICBpZiAoIW1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFs
dWVXYXRjaHBvaW50LT5rZXkoKS5pc1N0aWxsTGl2ZSh2bSkpIHsKLSAgICAgICAgICAgIGNsZWFy
T2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGZvciAoYXV0byogd2F0Y2hwb2ludCA6IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2
ZVdhdGNocG9pbnRTZXQpIHsKLSAgICAgICAgaWYgKCF3YXRjaHBvaW50LT5rZXkoKS5pc1N0aWxs
TGl2ZSh2bSkpIHsKLSAgICAgICAgICAgIGNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKG1fc3BlY2lhbFByb3BlcnR5Q2Fj
aGUpIHsKKyAgICAgICAgYXV0byBjbGVhckNhY2hlSWZJbnZhbGlkYXRlZCA9IFsmXShDYWNoZWRT
cGVjaWFsUHJvcGVydHlLZXkga2V5KSB7CisgICAgICAgICAgICBhdXRvJiBjYWNoZSA9IG1fc3Bl
Y2lhbFByb3BlcnR5Q2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSldOwor
ICAgICAgICAgICAgaWYgKGNhY2hlLm1fZXF1aXZhbGVuY2VXYXRjaHBvaW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFjYWNoZS5tX2VxdWl2YWxlbmNlV2F0Y2hwb2ludC0+a2V5KCkuaXNTdGls
bExpdmUodm0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5KGtleSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGF1dG8qIHdhdGNocG9pbnQgOiBjYWNo
ZS5tX21pc3NXYXRjaHBvaW50cykgeworICAgICAgICAgICAgICAgIGlmICghd2F0Y2hwb2ludC0+
a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyQ2FjaGVk
U3BlY2lhbFByb3BlcnR5KGtleSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZDYWNoZWRTcGVjaWFsUHJvcGVydHlL
ZXlzOyArK2luZGV4KQorICAgICAgICAgICAgY2xlYXJDYWNoZUlmSW52YWxpZGF0ZWQoc3RhdGlj
X2Nhc3Q8Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5PihpbmRleCkpOwogICAgIH0KIH0KIAogLy8g
LS0tLS0tLS0tLS0tLSBNZXRob2RzIGZvciBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKCkgaGVs
cGVyIHdhdGNocG9pbnQgY2xhc3NlcyAtLS0tLS0tLS0tLS0tLQogCi1PYmplY3RUb1N0cmluZ0Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6T2JqZWN0VG9TdHJpbmdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSwgU3RydWN0dXJlUmFyZURhdGEqIHN0cnVjdHVyZVJhcmVEYXRhKQorQ2Fj
aGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
OjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgU3RydWN0dXJlUmFyZURh
dGEqIHN0cnVjdHVyZVJhcmVEYXRhKQogICAgIDogQmFzZShrZXkpCiAgICAgLCBtX3N0cnVjdHVy
ZVJhcmVEYXRhKHN0cnVjdHVyZVJhcmVEYXRhKQogewogfQogCi1ib29sIE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojppc1ZhbGlkKCkgY29uc3QK
K2Jvb2wgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50Ojppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVSYXJl
RGF0YS0+aXNMaXZlKCk7CiB9CiAKLXZvaWQgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUoVk0mLCBjb25zdCBGaXJlRGV0YWls
JikKK3ZvaWQgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiB2bSwgY29uc3QgRmlyZURldGFpbCYpCiB7Ci0g
ICAgbV9zdHJ1Y3R1cmVSYXJlRGF0YS0+Y2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7CisgICAg
Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6
VG9TdHJpbmdUYWc7CisgICAgaWYgKHRoaXMtPmtleSgpLnVpZCgpID09IHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKSkKKyAgICAgICAga2V5ID0gQ2FjaGVkU3BlY2lh
bFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZzsKKyAgICBlbHNlIGlmICh0aGlzLT5rZXkoKS51aWQo
KSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkpCisgICAgICAgIGtleSA9IENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc7CisgICAgZWxzZSBpZiAodGhpcy0+a2V5
KCkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpCisgICAgICAgIGtl
eSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZjsKKyAgICBlbHNlIHsKKyAgICAg
ICAgQVNTRVJUKHRoaXMtPmtleSgpLnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0
aXZlU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtl
eTo6VG9QcmltaXRpdmU7CisgICAgfQorICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNsZWFyQ2Fj
aGVkU3BlY2lhbFByb3BlcnR5KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKaW5kZXgg
ODI5M2NkYzU5ZWQxNTdkZWNmNjcxZmFkZjFmMTk1MjU5NjBjNDQ3NC4uYTk5N2IzZDEyYWRlYzYx
NTgwYzNiYWJkZGM0MmQ3ZTJkODEyZTkzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCkBAIC0zNSwxNCArMzUsMjMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIFN0cnVj
dHVyZTsKLWNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50OwotY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ7CitjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ7CitjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ7CitzdHJ1Y3QgU3BlY2lhbFByb3BlcnR5Q2FjaGU7CiBlbnVtIGNsYXNz
IENhY2hlZFByb3BlcnR5TmFtZXNLaW5kIDogdWludDhfdCB7CiAgICAgS2V5cyA9IDAsCiAgICAg
R2V0T3duUHJvcGVydHlOYW1lcywKIH07CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mQ2FjaGVkUHJvcGVydHlOYW1lcyA9IDI7CiAKK2VudW0gY2xhc3MgQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5IDogdWludDhfdCB7CisgICAgVG9TdHJpbmdUYWcgPSAwLAorICAgIFRvU3RyaW5n
LAorICAgIFZhbHVlT2YsCisgICAgVG9QcmltaXRpdmUsCit9Oworc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBudW1iZXJPZkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleXMgPSA0OworCiBjbGFzcyBT
dHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CkBAIC03MCwxMSArNzksOCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJl
RGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYs
IFN0cnVjdHVyZSopOwogICAgIHZvaWQgY2xlYXJQcmV2aW91c0lEKCk7CiAKLSAgICBKU1N0cmlu
Zyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBK
U1N0cmluZyogdmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTeW1ib2xTbG90
KTsKLSAgICB2b2lkIGdpdmVVcE9uT2JqZWN0VG9TdHJpbmdWYWx1ZUNhY2hlKCkgeyBtX29iamVj
dFRvU3RyaW5nVmFsdWUuc2V0V2l0aG91dFdyaXRlQmFycmllcihvYmplY3RUb1N0cmluZ0NhY2hl
R2l2ZVVwTWFya2VyKCkpOyB9Ci0gICAgYm9vbCBjYW5DYWNoZU9iamVjdFRvU3RyaW5nVmFsdWUo
KSB7IHJldHVybiBtX29iamVjdFRvU3RyaW5nVmFsdWUudW52YWxpZGF0ZWRHZXQoKSA9PSBvYmpl
Y3RUb1N0cmluZ0NhY2hlR2l2ZVVwTWFya2VyKCk7IH0KLSAgICBzdGF0aWMgSlNTdHJpbmcqIG9i
amVjdFRvU3RyaW5nQ2FjaGVHaXZlVXBNYXJrZXIoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNT
dHJpbmcqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsgfQorICAgIEpTVmFsdWUgY2FjaGVk
U3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSkgY29uc3Q7CisgICAgdm9p
ZCBjYWNoZVNwZWNpYWxQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiBi
YXNlU3RydWN0dXJlLCBKU1ZhbHVlLCBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXksIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CkBAIC0xMDIsMTUg
KzEwOCwyMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmU7Ci0gICAgZnJpZW5kIGNs
YXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwotICAgIGZyaWVu
ZCBjbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDsKLQotICAgIHZvaWQgY2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7CisgICAgZnJpZW5k
IGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDsK
KyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50OwogCiAgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1
Y3R1cmUqKTsKIAorICAgIHZvaWQgY2xlYXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5S2V5KTsKKyAgICB2b2lkIGNhY2hlU3BlY2lhbFByb3BlcnR5U2xvdyhKU0ds
b2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBKU1ZhbHVlLCBDYWNo
ZWRTcGVjaWFsUHJvcGVydHlLZXksIGNvbnN0IFByb3BlcnR5U2xvdCYpOworCisgICAgU3BlY2lh
bFByb3BlcnR5Q2FjaGUmIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKCk7CisgICAgU3BlY2lh
bFByb3BlcnR5Q2FjaGUmIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlU2xvdygpOworICAgIGJv
b2wgY2FuQ2FjaGVTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5KTsKKyAg
ICB2b2lkIGdpdmVVcE9uU3BlY2lhbFByb3BlcnR5Q2FjaGUoQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5KTsKKwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBoYXZlIHNvbWUgc3RvcnkgZm9yIGNsZWFyaW5nIHRoZXNlIHByb3BlcnR5IG5h
bWVzIGNhY2hlcyBpbiBHQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkyNjU5CiAgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cj4gbV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpAQCAtMTE4LDggKzEyOSw3IEBAIGNs
YXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB0eXBl
ZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFJlZlB0cjxXYXRjaHBvaW50U2V0PiwgV1RGOjpJ
bnRIYXNoPFByb3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czxQcm9wZXJ0eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvcGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHM7
Ci0gICAgQmFnPE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX29i
amVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxP
YmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9v
YmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWxQcm9wZXJ0eUNhY2hlPiBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlOwog
ICAgIEJveDxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX3BvbHlQcm90b1dhdGNocG9pbnQ7CiAKICAg
ICBQcm9wZXJ0eU9mZnNldCBtX21heE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKaW5kZXggOWVmYTA5
MDFlY2I3NWFlYTUwMGY3ZjU5Yjk1NGFkZTYxZTNhYTUyMS4uNTVhMTIzMTdlYTU3YTZkMTNmOTlm
N2NmZTdmMTc4NTA1OTUyMzkwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKQEAgLTMyLDYgKzMyLDIxIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBGSVhNRTogVXNlIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGluc3RlYWQuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MTEyCitzdHJ1Y3QgU3BlY2lhbFByb3BlcnR5Q2FjaGVFbnRyeSB7CisgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIH5TcGVjaWFsUHJvcGVydHlDYWNoZUVudHJ5
KCk7CisgICAgQmFnPENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludD4gbV9taXNzV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9lcXVp
dmFsZW5jZVdhdGNocG9pbnQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7Cit9
OworCitzdHJ1Y3QgU3BlY2lhbFByb3BlcnR5Q2FjaGUgeworICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKKyAgICBTcGVjaWFsUHJvcGVydHlDYWNoZUVudHJ5IG1fY2FjaGVbbnVt
YmVyT2ZDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXlzXTsKK307CisKIGlubGluZSB2b2lkIFN0cnVj
dHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CkBAIC00MiwxMyAr
NTcsMTggQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlvdXNJRCgp
CiAgICAgbV9wcmV2aW91cy5jbGVhcigpOwogfQogCi1pbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVy
ZVJhcmVEYXRhOjpvYmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3QKK2lubGluZSBKU1ZhbHVlIFN0
cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5S2V5IGtleSkgY29uc3QKIHsKLSAgICBhdXRvKiB2YWx1ZSA9IG1fb2JqZWN0VG9TdHJpbmdW
YWx1ZS51bnZhbGlkYXRlZEdldCgpOwotICAgIGlmICh2YWx1ZSA9PSBvYmplY3RUb1N0cmluZ0Nh
Y2hlR2l2ZVVwTWFya2VyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh2YWx1
ZSkKLSAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsKKyAgICBhdXRvKiBjYWNoZSA9IG1fc3Bl
Y2lhbFByb3BlcnR5Q2FjaGUuZ2V0KCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtleSldLm1fdmFsdWUuZ2V0KCk7CisgICAgaWYgKHZhbHVlID09IEpTQ2Vs
bDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKQor
ICAgICAgICB2YWxpZGF0ZUNlbGwodmFsdWUuYXNDZWxsKCkpOworI2VuZGlmCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCkBAIC05Niw0ICsxMTYsMjggQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFy
ZURhdGE6OnNldENhY2hlZFByb3BlcnR5TmFtZXMoVk0mIHZtLCBDYWNoZWRQcm9wZXJ0eU5hbWUK
ICAgICBtX2NhY2hlZFByb3BlcnR5TmFtZXNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtpbmQpXS5z
ZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZVJhcmVE
YXRhOjpjYW5DYWNoZVNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXkga2V5
KQoreworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisgICAgYXV0byogY2FjaGUgPSBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLmdl
dCgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBj
YWNoZS0+bV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1ZS5nZXQoKSAh
PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKTsKK30KKworaW5saW5lIFNwZWNp
YWxQcm9wZXJ0eUNhY2hlJiBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlU3BlY2lhbFByb3BlcnR5
Q2FjaGUoKQoreworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6
Om1heUJlR0NUaHJlYWQoKSk7CisgICAgaWYgKGF1dG8qIGNhY2hlID0gbV9zcGVjaWFsUHJvcGVy
dHlDYWNoZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuICpjYWNoZTsKKyAgICByZXR1cm4gZW5zdXJl
U3BlY2lhbFByb3BlcnR5Q2FjaGVTbG93KCk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpjYWNoZVNwZWNpYWxQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIFN0cnVjdHVyZSogb3duU3RydWN0dXJlLCBKU1ZhbHVlIHZhbHVlLCBDYWNoZWRT
cGVjaWFsUHJvcGVydHlLZXkga2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
aWYgKCFjYW5DYWNoZVNwZWNpYWxQcm9wZXJ0eShrZXkpKQorICAgICAgICByZXR1cm47CisgICAg
cmV0dXJuIGNhY2hlU3BlY2lhbFByb3BlcnR5U2xvdyhnbG9iYWxPYmplY3QsIHZtLCBvd25TdHJ1
Y3R1cmUsIHZhbHVlLCBrZXksIHNsb3QpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzM1ZTMw
ZDNjOWI0ODBmNTVmYWJjMTdlNDQ4MzgwODgxZGQ1MGUyMi4uNDhiZDFkMjQ4ODVlZTdhM2JmMGU3
ZGIyZjAwMWU3N2Y5ZWY4OTVkOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5n
IC8gdmFsdWVPZiAvIEBAdG9QcmltaXRpdmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAqIHN0cmVzcy9kZWxldGUtY2FjaGVkLXRv
LXByaW1pdGl2ZS1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAg
ICAgIChvYmplY3QuX19wcm90b19fLlN5bWJvbC50b1ByaW1pdGl2ZSk6CisgICAgICAgICogc3Ry
ZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAg
KHNob3VsZEJlKToKKyAgICAgICAgKG9iamVjdC5fX3Byb3RvX18udG9TdHJpbmcpOgorICAgICAg
ICAqIHN0cmVzcy9kZWxldGUtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHNob3VsZFRocm93KToKKyAgICAgICAgKG9iamVj
dC5fX3Byb3RvX18udmFsdWVPZik6CisgICAgICAgICogc3RyZXNzL2hpZGUtY2FjaGVkLXRvLXBy
aW1pdGl2ZS1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
IChvYmplY3QuX19wcm90b19fLlN5bWJvbC50b1ByaW1pdGl2ZSk6CisgICAgICAgICogc3RyZXNz
L2hpZGUtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91
bGRCZSk6CisgICAgICAgIChvYmplY3QuX19wcm90b19fLnRvU3RyaW5nKToKKyAgICAgICAgKiBz
dHJlc3MvaGlkZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAo
c2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy52YWx1ZU9mKToKKyAgICAgICAg
KiBzdHJlc3MvcmVwbGFjZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzOiBBZGRlZC4K
KyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKG9iamVjdC5fX3Byb3RvX18uU3ltYm9sLnRv
UHJpbWl0aXZlKToKKyAgICAgICAgKiBzdHJlc3MvcmVwbGFjZS1jYWNoZWQtdG8tc3RyaW5nLXBy
b3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKG9iamVjdC5f
X3Byb3RvX18udG9TdHJpbmcpOgorICAgICAgICAqIHN0cmVzcy9yZXBsYWNlLWNhY2hlZC12YWx1
ZS1vZi1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChv
YmplY3QuX19wcm90b19fLnZhbHVlT2YpOgorCiAyMDIwLTA5LTAyICBDYWlvIExpbWEgIDx0aWNh
aW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbQVJNdjddIFNraXAgc3RyZXNzL2ludGwtc2Vn
bWVudGVyLmpzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXRvLXBy
aW1pdGl2ZS1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tcHJp
bWl0aXZlLXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkMzc4N2Y2NWQxN2UzNDNkOGE1NTQwY2Y4
ODM2MzM1YzJlMjRlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWxldGUt
Y2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlv
biBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30K
KwordmFyIG9iamVjdCA9IHsKKyAgICBfX3Byb3RvX186IHsKKyAgICAgICAgW1N5bWJvbC50b1By
aW1pdGl2ZV06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAg
fQorICAgIH0KK307CisKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitzaG91bGRCZShvYmpl
Y3QgKyA0MiwgODQpOworZGVsZXRlIG9iamVjdC5fX3Byb3RvX19bU3ltYm9sLnRvUHJpbWl0aXZl
XTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzIGIv
SlNUZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmNjOGFhZmM3NGY0N2UzNjg2MjYxODQ1NzZlMGEyZTQwNzc1YmEyZgotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5
LmpzCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIgb2JqZWN0ID0geworICAgIF9fcHJv
dG9fXzogeworICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuICJIZXkiOworICAgICAgICB9CisgICAgfQorfTsKKworc2hvdWxkQmUob2JqZWN0ICsgNDIs
IGBIZXk0MmApOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIZXk0MmApOworZGVsZXRlIG9iamVj
dC5fX3Byb3RvX18udG9TdHJpbmc7CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmplY3QgT2Jq
ZWN0XTQyYCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXZhbHVl
LW9mLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1w
cm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDg3NDg4Y2U4Njk4NTg0ZjEyNWZmOGNlODcxMmY4MjEx
MDExNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC12
YWx1ZS1vZi1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24g
c2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0g
ZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAg
IGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9y
TWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVy
cm9yKX1gKTsKK30KKwordmFyIG9iamVjdCA9IHsKKyAgICBfX3Byb3RvX186IHsKKyAgICAgICAg
dG9TdHJpbmc6IHVuZGVmaW5lZCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIDQyOworICAgICAgICB9CisgICAgfQorfTsKKworc2hvdWxkQmUob2Jq
ZWN0ICsgNDIsIDg0KTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitkZWxldGUgb2JqZWN0
Ll9fcHJvdG9fXy52YWx1ZU9mOworc2hvdWxkVGhyb3coKCkgPT4geworICAgIG9iamVjdCArIDQy
OworfSwgYFR5cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZWApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvaGlkZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9z
dHJlc3MvaGlkZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5
ZWI4YjlhNzZhYTE1OGE0M2NhNmZiNmUwY2MwOGU4ODI2NTUxMTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMKQEAg
LTAsMCArMSwxMyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2
YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK3ZhciBvYmplY3QgPSB7fTsKK29iamVjdC5fX3Byb3Rv
X18gPSB7fTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKK3No
b3VsZEJlKG9iamVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKK29iamVjdC5fX3Byb3Rv
X19bU3ltYm9sLnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gNDI7Cit9
Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIDg0KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2hpZGUtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUt
Y2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjYzMTg0ZjI1ODlhZGJi
NDBkMWVmNzcwZDBlZTA0MDhmM2RlOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvaGlkZS1jYWNoZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBl
eHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwp
OworfQorCit2YXIgb2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0ge307CitzaG91bGRC
ZShvYmplY3QgKyA0MiwgYFtvYmplY3QgT2JqZWN0XTQyYCk7CitzaG91bGRCZShvYmplY3QgKyA0
MiwgYFtvYmplY3QgT2JqZWN0XTQyYCk7CitvYmplY3QuX19wcm90b19fLnRvU3RyaW5nID0gZnVu
Y3Rpb24gKCkgeworICAgIHJldHVybiAiSGV5IjsKK307CitzaG91bGRCZShvYmplY3QgKyA0Miwg
YEhleTQyYCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC12YWx1ZS1v
Zi1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXZhbHVlLW9mLXByb3Bl
cnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFkMzE3ZmE4NGVjYzkzYWEyMTQyN2RlNTFjM2U3OWIzNjBhY2Fi
NGUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC12YWx1ZS1v
Zi1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDE0IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWws
IGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9
Oworb2JqZWN0Ll9fcHJvdG9fXyA9IHt9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0
IE9iamVjdF00MmApOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00MmAp
Oworb2JqZWN0Ll9fcHJvdG9fXy50b1N0cmluZyA9IHVuZGVmaW5lZDsKK29iamVjdC5fX3Byb3Rv
X18udmFsdWVPZiA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gNDI7Cit9Oworc2hvdWxkQmUo
b2JqZWN0ICsgNDIsIDg0KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2Fj
aGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2Fj
aGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OThkMzMwMzFjZWJkZTVj
MmIxMjUxZjJlZDhhYjM5Mjg2YTQxMTFhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvcmVwbGFjZS1jYWNoZWQtdG8tcHJpbWl0aXZlLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTcg
QEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFs
ICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBh
Y3R1YWwpOworfQorCit2YXIgb2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0geworICAg
IFtTeW1ib2wudG9QcmltaXRpdmVdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiA0MjsK
KyAgICB9Cit9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIDg0KTsKK3Nob3VsZEJlKG9iamVjdCAr
IDQyLCA4NCk7CitvYmplY3QuX19wcm90b19fW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSBmdW5jdGlv
biAoKSB7CisgICAgcmV0dXJuIDQ1OworfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4Nyk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1zdHJpbmctcHJvcGVy
dHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHku
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjRjZmQwY2ZkMzRlYWFmMDUyMDIyMTMxNzg2NjMwMDIyMGUyMThkZgot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXN0cmlu
Zy1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWws
IGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9
Oworb2JqZWN0Ll9fcHJvdG9fXyA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gIkhpIjsKKyAgICB9Cit9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIaTQy
YCk7CitzaG91bGRCZShvYmplY3QgKyA0MiwgYEhpNDJgKTsKK29iamVjdC5fX3Byb3RvX18udG9T
dHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICJIZXkiOworfTsKK3Nob3VsZEJlKG9i
amVjdCArIDQyLCBgSGV5NDJgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2Ut
Y2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVwbGFjZS1jYWNo
ZWQtdmFsdWUtb2YtcHJvcGVydHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmMDYxNzY5MWY1MzFhNDNmYjI4
OThlNDMwNzU1MzNhYzcyYjZmMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3Jl
cGxhY2UtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0
aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBl
Y3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOwor
fQorCit2YXIgb2JqZWN0ID0ge307CitvYmplY3QuX19wcm90b19fID0geworICAgIHRvU3RyaW5n
OiB1bmRlZmluZWQsCisgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
NDI7CisgICAgfQorfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitzaG91bGRCZShvYmpl
Y3QgKyA0MiwgODQpOworb2JqZWN0Ll9fcHJvdG9fXy52YWx1ZU9mID0gZnVuY3Rpb24gKCkgewor
ICAgIHJldHVybiA0MzsKK307CitzaG91bGRCZShvYmplY3QgKyA0MiwgODUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407871</attachid>
            <date>2020-09-02 22:52:43 -0700</date>
            <delta_ts>2020-09-02 22:52:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216061-20200902225242.patch</filename>
            <type>text/plain</type>
            <size>66471</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YzgxMGU4MGU4NzEyYWRhODkxMjEyZjgzMmRmMGNmYzI0NTJmODMzLi5kOTIwYjg1MzhjOWFmZTY0
NTNmYjllZWM5M2RmNTIyMzdhM2Y2MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMC0wOS0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIENhY2hlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBAdG9QcmltaXRp
dmUgZm9yIG1ham9yIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTYwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKwor
ICAgICAgICBXaGVuIHRvUHJpbWl0aXZlIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBsb29rLXVwIHRo
cmVlIHByb3BlcnRpZXMgYXQgbW9zdCB0byBwZXJmb3JtIG9wZXJhdGlvbi4gQW5kIHRoZXNlIHNw
ZWNpYWwgcHJvcGVydGllcyBkbyBub3QgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBhdCBhbGwuCisg
ICAgICAgIFdlIGZvdW5kIHRoYXQgU3BlZWRvbWV0ZXIyL0VtYmVySlMtRGVidWctVG9kb01WQyBp
cyB1c2luZyB2ZXJ5IG11Y2ggdGltZSBmb3IgdGhpcyBwcm9wZXJ0eSBsb29rLXVwLiBXZSBzaG91
bGQgaGF2ZSBjYWNoaW5nIG1lY2hhbmlzbSBpbiBTdHJ1Y3R1cmVSYXJlRGF0YSwgd2hpY2gKKyAg
ICAgICAgc2hvdWxkIGJlIHNpbWlsYXIgdG8gQEB0b1N0cmluZ1RhZyAmIE9iamVjdCN0b1N0cmlu
ZyBjYWNoaW5nIG1lY2hhbmlzbS4KKworICAgICAgICBUaGlzIHBhdGNoIGdlbmVyYWxpemVzIEBA
dG9TdHJpbmdUYWcgJiBPYmplY3QjdG9TdHJpbmcgY2FjaGluZyBtZWNoYW5pc20gYXMgU3BlY2lh
bFByb3BlcnR5Q2FjaGUuIEFuZCB3ZSBhY2NlbGVyYXRlIHRvU3RyaW5nIC8gdmFsdWVPZiAvIEBA
dG9QcmltaXRpdmUgbG9vay11cHMgaW4KKyAgICAgICAgdG9QcmltaXRpdmUgd2l0aCB0aGlzIGNh
Y2hpbmcgbWVjaGFuaXNtLgorCisgICAgICAgIFdlIGFsc28gcmVtb3ZlZCBwcm9wZXJ0eS1jaGFu
Z2Ugd2F0Y2hpbmcgaW4gSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUuIFRoaXMgd2FzIG9y
aWdpbmFsbHkgaW50cm9kdWNlZCB0byBpbXBsZW1lbnQgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RT
YW5lLiBCdXQgcmlnaHQgbm93LAorICAgICAgICBpdCBpcyB1c2luZyBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVFcXVpdmFsZW5jZUNvbmN1cnJlbnRseSBhbmQgd2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8gd2F0Y2ggaXQgaGVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcHJvdmVkIFNwZWVk
b21ldGVyMi9FbWJlckpTLURlYnVnLVRvZG9NVkMgYnkgMTAlLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKiBieXRlY29k
ZS9XYXRjaHBvaW50Lmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWRTcGVjaWFsUHJvcGVydHlB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwLgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaC4KKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6b2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojp0b1ByaW1pdGl2ZSBjb25zdCk6CisgICAgICAgICogcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVTcGVjaWFsUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjplbnN1cmVTcGVjaWFsUHJvcGVydHlDYWNoZVNsb3cpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNo
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZVNwZWNpYWxQcm9wZXJ0
eVNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJDYWNoZWRTcGVj
aWFsUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6
OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0VG9T
dHJpbmdWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok9iamVjdFRvU3RyaW5nQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpPYmplY3RUb1N0cmluZ0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojpp
c1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0VG9TdHJpbmdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVS
YXJlRGF0YTo6Y2FjaGVkU3BlY2lhbFByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlUmFyZURhdGE6OmNhbkNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlUmFyZURhdGE6OmVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNhY2hlU3BlY2lhbFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUgY29uc3QpOiBEZWxl
dGVkLgorCiAyMDIwLTA5LTAxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgU2tpcCBmYXN0L2Nzcy1jdXN0b20tcGFpbnQvb3V0LW9mLW1lbW9yeS13aGlsZS1h
ZGRpbmctd29ya2xldC1tb2R1bGUuaHRtbCBpZiBHaWdhY2FnZSBpcyBub3QgZW5hYmxlZApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNjg5NTVmMjJkZTJmMjYyNzg2ZTdlNjgxM2Ey
NDA4Yjg4N2U4OWRmLi4zNjEwYzJhMmFmNzExMjZiOWY5Yjk0OWE0NzIzMGE2NGMwODA1YjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg2Miw3ICsxODYyLDcgQEAKIAkJRTM5
RDQ1RjUxRDM5MDA1NjAwQjNCMzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3
MjgyIC8qIEludGVycHJldGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUzOUQ4QjJFMjMwMjFFMjYwMDI2NTg1MiAvKiBXYXNtT3Bl
cmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM5RDhCMkQyMzAyMUUxRTAwMjY1ODUyIC8qIFdhc21PcGVyYXRpb25zLmggKi87IH07CiAJCUUz
OURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAwODRGMzNB
IC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJRTM5RUVBRjMyMjgxMjQ1MDAwODQ3NEY0IC8qIE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzlFRUFGMjIyODEyNDRDMDA4NDc0RjQgLyogT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKKwkJRTM5RUVBRjMyMjgx
MjQ1MDAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM5RUVBRjIyMjgxMjQ0QzAwODQ3NEY0IC8qIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyB9OwogCQlFMzlGRUJFMzIzMzlDNUQ5MDBCNDBBQjAg
LyogSlNBc3luY0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM5RkVCRTIyMzM5QzVENDAwQjQwQUIwIC8qIEpTQXN5bmNHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTA1
MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87IH07CiAJCUUz
QTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0MkI2NzAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CkBAIC01MDc1LDggKzUwNzUsOCBAQAog
CQlFMzlEQTRBNDFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNb2R1bGVSZWNvcmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlEQTRBNTFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1
bGVSZWNvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVSZWNv
cmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5RTAzMEQyMkQ5RUEzRTAwNDA4
QzE4IC8qIFdlYkFzc2VtYmx5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gV2ViQXNzZW1ibHku
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzOUVFQUYxMjI4MTI0NEMwMDg0NzRG
NCAvKiBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzOUVFQUYyMjI4MTI0NEMwMDg0NzRG
NCAvKiBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzlFRUFGMTIyODEyNDRDMDA4NDc0RjQgLyogQ2Fj
aGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzOUVFQUYyMjI4MTI0NEMw
MDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOUZFQkUxMjMz
OUM1RDQwMEI0MEFCMCAvKiBKU0FzeW5jR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXN5bmNHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlG
RUJFMjIzMzlDNUQ0MDBCNDBBQjAgLyogSlNBc3luY0dlbmVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FzeW5jR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTA1
MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMjgsNiArNzEyOCw4IEBACiAJCQkJRkU4REU1NEMyM0FDMUU4
NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8sCiAJCQkJMTQ4QjE0
MTkyMjVERDFFOTAwRDZFOTk4IC8qIENhY2hlZEJ5dGVjb2RlLmNwcCAqLywKIAkJCQkxNDRDQTM0
RjIyMUYwMzc5MDA4MTc3ODkgLyogQ2FjaGVkQnl0ZWNvZGUuaCAqLywKKwkJCQlFMzlFRUFGMTIy
ODEyNDRDMDA4NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCAqLywKKwkJCQlFMzlFRUFGMjIyODEyNDRDMDA4NDc0RjQgLyogQ2FjaGVk
U3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRE
QUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLywKIAkJCQkxNDNCRTI2
NTIxQzg1Nzc3MDAyMENEMTcgLyogQ2FjaGVkVHlwZXMuaCAqLywKIAkJCQkxNDhCMTQxQjIyNURE
MUVBMDBENkU5OTggLyogQ2FjaGVQYXlsb2FkLmNwcCAqLywKQEAgLTc2MTIsOCArNzYxNCw2IEBA
CiAJCQkJRTNDMjk1REMxRUQyQ0JBQTAwRDMwMTZGIC8qIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50LmggKi8sCiAJCQkJQkMyNjgwQzgwRTE2RDRFOTAwQTA2RTkyIC8qIE9i
amVjdFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMyNjgwQzkwRTE2RDRFOTAwQTA2RTkyIC8qIE9i
amVjdFByb3RvdHlwZS5oICovLAotCQkJCUUzOUVFQUYxMjI4MTI0NEMwMDg0NzRGNCAvKiBPYmpl
Y3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCi0JCQkJRTM5RUVB
RjIyMjgxMjQ0QzAwODQ3NEY0IC8qIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmggKi8sCiAJCQkJRjY5MkE4NzcwMjU1NTk3RDAxRkY2MEY3IC8qIE9wZXJhdGlvbnMu
Y3BwICovLAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmggKi8s
CiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLApAQCAtOTI2
Niw2ICs5MjY2LDcgQEAKIAkJCQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NENBMzUwMjIyNDE4MDEw
MDgxNzc4OSAvKiBDYWNoZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUx
QkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MzlFRUFGMzIyODEyNDUwMDA4NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEYwOUMyQTIyMzE5MjMx
MDBDRjg4RUIgLyogQ2FjaGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDlFQ0MxMjI1
RTE3OEMwMEJFREQ1NCAvKiBDYWNoZVBheWxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDlF
Q0MwMjI1RTE3ODEwMEJFREQ1NCAvKiBDYWNoZVVwZGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDE5OSw3ICsxMDIwMCw2IEBACiAJCQkJMEZEM0U0MEExQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwQzFCNjE4QjY2
MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUUzOUVFQUYzMjI4MTI0NTAwMDg0NzRGNCAvKiBPYmplY3RUb1N0cmluZ0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNEE4Rjcw
RTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEY3OUY3MDIxNkVBRkQyMDAwNDZEMzkgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTY0ODcyRTIxNDFEMDQ4MDBBQjBEM0UgLyogT3Bjb2RlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggZWQzYThkMWI1MTQzN2I1ZGFkY2QyOTVm
NzMyYzBkOWEzM2ZkMDQ2ZS4uNDlhNzYxZjEyYWE1MGNmMTk0MDk2YWEwMjk0ZjhjMDkwNmE3Nzk4
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzQwLDYgKzc0MCw3IEBAIHJ1bnRp
bWUvQ2FjaGVQYXlsb2FkLmNwcAogcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5jcHAKIHJ1bnRpbWUvQ2FjaGVkQnl0ZWNvZGUuY3BwCitydW50aW1l
L0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCiBydW50aW1lL0Ns
YXNzSW5mby5jcHAKQEAgLTkzOSw3ICs5NDAsNiBAQCBydW50aW1lL051bWJlclByb3RvdHlwZS5j
cHAKIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCiBydW50aW1lL09iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuY3BwCiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKLXJ1bnRpbWUvT2Jq
ZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCiBydW50aW1lL09wZXJh
dGlvbnMuY3BwCiBydW50aW1lL09wdGlvbnMuY3BwCiBydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3Jl
YXRpbmdGdXp6ZXJBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9X
YXRjaHBvaW50LmNwcAppbmRleCAzM2RiMDVmZDAxYjI3ZjM1YTk0NWFjY2JlYjc4MGE5ZjAwMmUx
ZDMzLi45MTMzYzgwODJiYmRiMjc3MDZkNTc5ZjZjODhmNTc3NzZhNzQ3ZDI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCkBAIC0yNywxMiArMjcs
MTIgQEAKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAKICNpbmNsdWRlICJBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3BlY2lh
bFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25SYXJlRGF0YS5oIgogI2luY2x1ZGUg
IkhlYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSAiVk0uaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgKaW5kZXggNmMwNTdmZDU1ZGVjMmUzODA1N2Q4OTg4N2M0Y2I3YmI0OWY4
ZTMwYy4uZGYwYWNlODBiMWI4NmY1NDVkNDNjOTU4MWI1NWU2ZjM0NDRlOTIyMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCkBAIC0xMTQsNyArMTE0LDcg
QEAgY2xhc3MgV2F0Y2hwb2ludFNldDsKICAgICBtYWNybyhDb2RlQmxvY2tKZXR0aXNvbmluZywg
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KSBcCiAgICAgbWFjcm8oTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmUsIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludCkgXAogICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFBbGxvY2F0aW9uUHJv
ZmlsZUNsZWFyaW5nLCBGdW5jdGlvblJhcmVEYXRhOjpBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5n
V2F0Y2hwb2ludCkgXAotICAgIG1hY3JvKE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmUs
IE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KQorICAgIG1hY3JvKENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlLCBDYWNoZWRTcGVjaWFsUHJvcGVy
dHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoSklUKQogI2RlZmlu
ZSBKU0NfV0FUQ0hQT0lOVF9UWVBFU19XSVRIT1VUX0RGRyhtYWNybykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODFkNmJlN2I5NmQ3NTZiMDRiMzhjNTU2YzhjYmE2NDcxNDVmZGE0OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFNw
ZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorCisjaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ6OkNhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBTdHJ1Y3R1cmVSYXJlRGF0YSogc3Ry
dWN0dXJlUmFyZURhdGEpCisgICAgOiBXYXRjaHBvaW50KFdhdGNocG9pbnQ6OlR5cGU6OkNhY2hl
ZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlKQorICAgICwgbV9zdHJ1Y3R1cmVSYXJl
RGF0YShzdHJ1Y3R1cmVSYXJlRGF0YSkKKyAgICAsIG1fa2V5KGtleSkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChrZXkud2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hpbmdSZXF1aXJlc1JlcGxhY2VtZW50
V2F0Y2hwb2ludCgpKTsKK30KKwordm9pZCBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoVk0mIHZtKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fa2V5LmlzV2F0Y2hhYmxlKCkpOworCisgICAgbV9rZXkub2JqZWN0KCktPnN0cnVjdHVyZSh2
bSktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOworfQorCit2b2lkIENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2
bSwgY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgaWYgKCFtX3N0cnVjdHVyZVJhcmVEYXRhLT5p
c0xpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fa2V5LmlzV2F0Y2hhYmxlKFBy
b3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkpKSB7CisgICAgICAgIGluc3RhbGwo
dm0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5IGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWc7CisgICAgaWYg
KG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLmltcGwo
KSkKKyAgICAgICAga2V5ID0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZzsK
KyAgICBlbHNlIGlmIChtX2tleS51aWQoKSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5p
bXBsKCkpCisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmc7
CisgICAgZWxzZSBpZiAobV9rZXkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5p
bXBsKCkpCisgICAgICAgIGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZjsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fa2V5LnVpZCgpID09IHZtLnByb3BlcnR5TmFt
ZXMtPnRvUHJpbWl0aXZlU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGtleSA9IENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUtleTo6VG9QcmltaXRpdmU7CisgICAgfQorCisgICAgbV9zdHJ1Y3R1cmVSYXJl
RGF0YS0+Y2xlYXJDYWNoZWRTcGVjaWFsUHJvcGVydHkoa2V5KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRT
cGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4YTlhMDIwY2JkOWNjMTU3NDMwYjI0Nzg4MzdmNTc2
ODJiMGVhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
Ik9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCisjaW5jbHVkZSAiUGFja2VkQ2VsbFB0ci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlUmFyZURhdGE7CisKK2NsYXNzIENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1
YmxpYyBXYXRjaHBvaW50IHsKK3B1YmxpYzoKKyAgICBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBT
dHJ1Y3R1cmVSYXJlRGF0YSopOworCisgICAgdm9pZCBpbnN0YWxsKFZNJik7CisKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0K
KworICAgIHZvaWQgZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpOworICAgIAor
cHJpdmF0ZToKKyAgICAvLyBPd24gZGVzdHJ1Y3RvciBtYXkgbm90IGJlIGNhbGxlZC4gS2VlcCBt
ZW1iZXJzIHRyaXZpYWxseSBkZXN0cnVjdGlibGUuCisgICAgSlNDX1dBVENIUE9JTlRfRklFTEQo
UGFja2VkQ2VsbFB0cjxTdHJ1Y3R1cmVSYXJlRGF0YT4sIG1fc3RydWN0dXJlUmFyZURhdGEpOwor
ICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7
Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKaW5kZXggZWI1YzJjMDBkZWUwMDc2M2M2MTVlYzE4ZjhjNGY1YjJhNmEyYzIwNi4u
MGYzNDgzNDYwNTUwZWJhNjNmM2I2OGI4ZjdkNmI4NDQwOThmNDMzNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNjEwLDYgKzYx
MCwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBKU0Z1bmN0aW9u
KiBhcHBseUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5j
dGlvblByb3BlcnRpZXModm0sIHRoaXMsICZjYWxsRnVuY3Rpb24sICZhcHBseUZ1bmN0aW9uLCAm
aGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbik7CisgICAgbV9vYmplY3RQcm90b1RvU3RyaW5nRnVu
Y3Rpb24uaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNGdW5jdGlv
bj4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0
LnZtLCBpbml0Lm93bmVyLCAwLCBpbml0LnZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLnN0cmlu
ZygpLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgTm9JbnRyaW5zaWMpKTsKKyAgICAgICAgfSk7
CiAgICAgbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi5pbml0TGF0ZXIoCiAgICAgICAgIFtd
IChjb25zdCBJbml0aWFsaXplcjxKU0Z1bmN0aW9uPiYgaW5pdCkgewogICAgICAgICAgICAgaW5p
dC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGluaXQub3duZXIsIDAsIGluaXQudm0u
cHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuc3RyaW5nKCksIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcs
IE5vSW50cmluc2ljKSk7CkBAIC0xODk1LDYgKzE4OTksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAg
ICB0aGlzT2JqZWN0LT5tX3BhcnNlSW50RnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9wYXJzZUZsb2F0RnVuY3Rpb24udmlzaXQodmlzaXRvcik7CisgICAgdGhpc09i
amVjdC0+bV9vYmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24udmlzaXQodmlzaXRvcik7CiAgICAg
dGhpc09iamVjdC0+bV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbi52aXNpdCh2aXNpdG9y
KTsKICAgICB0aGlzT2JqZWN0LT5tX2V2YWxGdW5jdGlvbi52aXNpdCh2aXNpdG9yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGE3NTVj
MzExMDRkMzg4ZTI1NDg3Y2Y3NGYwMTZmMTA3NjZhZTEzYjQuLjMzMGU1YjBlNjdmNmRjMjY5MWJl
ZDRiZDMxNGY3YzNkMzdlMjM0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzEzLDYgKzMxMyw3IEBAIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIExhenlQcm9wZXJ0
eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9wYXJzZUludEZ1bmN0aW9uOwogICAgIExh
enlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9wYXJzZUZsb2F0RnVuY3Rp
b247CiAKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fb2Jq
ZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVj
dCwgSlNGdW5jdGlvbj4gbV9hcnJheVByb3RvVG9TdHJpbmdGdW5jdGlvbjsKICAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24+IG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0
aW9uOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSlNGdW5jdGlvbj4gbV9ldmFs
RnVuY3Rpb247CkBAIC02MzMsNiArNjM0LDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAKICAgICBKU0Z1bmN0aW9uKiBldmFsRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2V2YWxGdW5jdGlvbi5nZXQodGhpcyk7IH0KICAgICBK
U0Z1bmN0aW9uKiB0aHJvd1R5cGVFcnJvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgSlNGdW5jdGlv
biogb2JqZWN0UHJvdG9Ub1N0cmluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RQ
cm90b1RvU3RyaW5nRnVuY3Rpb24uZ2V0KHRoaXMpOyB9CiAgICAgSlNGdW5jdGlvbiogYXJyYXlQ
cm90b1RvU3RyaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvdG9Ub1N0cmlu
Z0Z1bmN0aW9uLmdldCh0aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9WYWx1ZXNG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLmdldCh0
aGlzKTsgfQogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbkNvbmN1cnJl
bnRseSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLmdldENvbmN1
cnJlbnRseSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
aW5kZXggNTBhZDBhNmJiYzA0YWI2ZjRlNjAzZjYzZTNkYTcyZThmZTA5MmM0Ni4uOTZlNzczYTMx
MGFkYjk3MzRlZTBhODhhNzcxODhmODg5NjQ4YmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjE0NCwzMyArMjE0NCw0NiBAQCBib29sIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIH0KIH0KIAotZW51bSBjbGFzcyBUeXBlSGludE1vZGUgeyBUYWtl
c0hpbnQsIERvZXNOb3RUYWtlSGludCB9OwotCi10ZW1wbGF0ZTxUeXBlSGludE1vZGUgbW9kZSA9
IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50PgordGVtcGxhdGU8Q2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5IGtleT4KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWl0
aXZlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUgZml4ZWQ6IHJkYXI6Ly9wcm9ibGVtLzMzNDUx
ODQwCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzEw
OS4KLSAgICBjb25zdGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBtb2RlID09IFR5cGVI
aW50TW9kZTo6VGFrZXNIaW50OwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4ob2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVsbFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gaGFzUHJv
cGVydHkgPyBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9u
KCkpOwotICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIG1vZGUgPT0gVHlw
ZUhpbnRNb2RlOjpUYWtlc0hpbnQpCisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KGtleSk7CisgICAgaWYgKCFmdW5jdGlv
bikgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXQpOworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hl
biB3ZSBoYXZlIGZpeGVkOiByZGFyOi8vcHJvYmxlbS8zMzQ1MTg0MAorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTA5LgorICAgICAgICBjb25z
dGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5S2V5OjpUb1ByaW1pdGl2ZTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPihvYmplY3QpLT5nZXRQcm9wZXJ0eVNsb3Q8ZGVidWdOdWxsU3RydWN0dXJl
PihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBo
YXNQcm9wZXJ0eSA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDog
anNVbmRlZmluZWQoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmNhY2hlU3BlY2lh
bFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0sIGZ1bmN0aW9uLCBrZXksIHNsb3QpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7CisgICAgfQor
ICAgIGlmIChmdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworCisgICAgLy8gQWRkIG9wdGltaXphdGlvbnMgZm9yIGZyZXF1ZW50bHkgY2FsbGVk
IGZ1bmN0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MDg0CisgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5
S2V5OjpUb1N0cmluZykgeworICAgICAgICBpZiAoZnVuY3Rpb24gPT0gZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVk
U3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxs
RGF0YSh2bSwgZnVuY3Rpb24pOwogICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpU
eXBlOjpOb25lKSB7Ci0gICAgICAgIGlmIChtb2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50
KQorICAgICAgICBpZiBjb25zdGV4cHIgKGtleSA9PSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6
OlRvUHJpbWl0aXZlKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlN5bWJvbC50b1ByaW1pdGl2ZSBpcyBub3QgYSBmdW5jdGlvbiwgdW5kZWZpbmVkLCBv
ciBudWxsIl9zKTsKICAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxBcmdzOwotICAgIGlmIChtb2RlID09IFR5cGVI
aW50TW9kZTo6VGFrZXNIaW50KSB7CisgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5S2V5OjpUb1ByaW1pdGl2ZSkgewogICAgICAgICBKU1N0cmluZyogaGludFN0
cmluZyA9IG51bGxwdHI7CiAgICAgICAgIHN3aXRjaCAoaGludCkgewogICAgICAgICBjYXNlIE5v
UHJlZmVyZW5jZToKQEAgLTIxOTAsOCArMjIwMywxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
YwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxs
RGF0YSwgY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCksIGNhbGxBcmdzKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7CiAgICAgQVNTRVJUKCFy
ZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQotICAg
ICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGludE1vZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFs
dWUoKSA6IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9Qcmlt
aXRpdmUgcmV0dXJuZWQgYW4gb2JqZWN0Il9zKTsKKyAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgaWYgY29uc3RleHByIChrZXkgPT0gQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5
OjpUb1ByaW1pdGl2ZSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiU3ltYm9sLnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCJfcyk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTIyMDMsMjUgKzIyMTksMjcgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1By
aW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmkKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdoYXRldmVyIGRlZmF1bHQgdmFsdWUgbWV0aG9kcyB0aGVyZSBh
cmUgb24gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIGFyZQogICAgIC8vIGJlaW5nIHdhdGNoZWQu
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgZm9yIERGRy4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MTE3CiAgICAgZm9yIChjb25zdCBK
U09iamVjdCogb2JqZWN0ID0gdGhpczsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnN0cnVjdHVy
ZSh2bSktPnN0b3JlZFByb3RvdHlwZU9iamVjdChvYmplY3QpKQogICAgICAgICBvYmplY3QtPnN0
cnVjdHVyZSh2bSktPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeSh2
bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykg
ewotICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdCwg
dGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIGhpbnQpOworICAgICAgICB2YWx1ZSA9
IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJp
bmc+KGdsb2JhbE9iamVjdCwgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcsIGhpbnQp
OwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBzY29wZS5l
eGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5j
dGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQp
OworICAgICAgICB2YWx1ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPENhY2hlZFNwZWNpYWxQ
cm9wZXJ0eUtleTo6VmFsdWVPZj4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZU9mLCBoaW50KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBp
ZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZt
LnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhpbnQpOworICAgICAgICB2YWx1ZSA9IGNhbGxUb1By
aW1pdGl2ZUZ1bmN0aW9uPENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VmFsdWVPZj4oZ2xvYmFs
T2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsKICAgICAgICAg
RVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkg
PT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFs
T2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CisgICAgICAg
IHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5
OjpUb1N0cmluZz4oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
ZywgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8
IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFzQ2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMjI0Miw3ICsyMjYwLDcgQEAgSlNWYWx1
ZSBKU09iamVjdDo6dG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJl
ZmVycmVkUHJpbWl0aXZlVHkKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uPFR5cGVIaW50TW9kZTo6VGFrZXNIaW50PihnbG9i
YWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBwcmVm
ZXJyZWRUeXBlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb248
Q2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1ByaW1pdGl2ZT4oZ2xvYmFsT2JqZWN0LCB0aGlz
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbCwgcHJlZmVycmVkVHlwZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAodmFsdWUpCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCmluZGV4IDQxNzBkMjQ4M2Y1ZmM4MjBlNDllYzM1ZmE4MGEwM2Iy
MGQ4YTVhYjEuLjU3NzdhZmJhMjYyNzk2ODA2ZGFhZTRjOWNlNzFlYWI1M2UwZGUyOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcApA
QCAtNTMsNyArNTMsNyBAQCB2b2lkIE9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIAotICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIDApOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b1RvU3RyaW5nRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxlU3RyaW5nLCBvYmplY3RQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCAwKTsKICAg
ICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+aGFzT3duUHJvcGVydHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgMSwg
SGFzT3duUHJvcGVydHlJbnRyaW5zaWMpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0
cnVjdHVyZUlEKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZt
KS0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUtleTo6VG9TdHJpbmdUYWcpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIApAQCAtMzUwLDcgKzM1MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjCiAKICAgICBKU1N0cmluZyoganNSZXN1bHQgPSBqc1N0cmluZyhnbG9iYWxPYmpl
Y3QsIHZtLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmdTdGFydCgpLCBqc1RhZywgdm0uc21hbGxT
dHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZygnXScpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldE9iamVj
dFRvU3RyaW5nVmFsdWUoZ2xvYmFsT2JqZWN0LCB2bSwganNSZXN1bHQsIHNsb3QpOworICAgIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmNhY2hlU3BlY2lhbFByb3BlcnR5KGdsb2JhbE9iamVj
dCwgdm0sIGpzUmVzdWx0LCBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nVGFnLCBz
bG90KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVzdWx0KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0VG9TdHJpbmdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDllZjU4ZGYyMTY5NDhjY2EyYmVkNTg2NmFiZDg4MTgxMzI1
ZDMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQuaCIKLQotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFN0
cnVjdHVyZVJhcmVEYXRhKiBzdHJ1Y3R1cmVSYXJlRGF0YSkKLSAgICA6IFdhdGNocG9pbnQoV2F0
Y2hwb2ludDo6VHlwZTo6T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZSkKLSAgICAsIG1f
c3RydWN0dXJlUmFyZURhdGEoc3RydWN0dXJlUmFyZURhdGEpCi0gICAgLCBtX2tleShrZXkpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2V5LndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWly
ZXNSZXBsYWNlbWVudFdhdGNocG9pbnQoKSk7Ci19Ci0KLXZvaWQgT2JqZWN0VG9TdHJpbmdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6Omluc3RhbGwoVk0mIHZtKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwotCi0gICAgbV9rZXkub2JqZWN0KCktPnN0cnVj
dHVyZSh2bSktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHRoaXMpOwotfQotCi12b2lkIE9iamVj
dFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoVk0mIHZt
LCBjb25zdCBGaXJlRGV0YWlsJikKLXsKLSAgICBpZiAoIW1fc3RydWN0dXJlUmFyZURhdGEtPmlz
TGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9rZXkuaXNXYXRjaGFibGUoUHJv
cGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKLSAgICAgICAgaW5zdGFsbCh2
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5j
bGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDlmNGY3NTA1ZTBmN2NiZDFhMGQ5NWMxMThiZGM1ZGEzZTBiZWYz
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKLSNpbmNs
dWRlICJQYWNrZWRDZWxsUHRyLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIKLSNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBTdHJ1Y3R1
cmVSYXJlRGF0YTsKLQotY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2ludCB7Ci1wdWJsaWM6Ci0gICAgT2JqZWN0VG9T
dHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mLCBTdHJ1Y3R1cmVSYXJlRGF0YSopOwotCi0gICAgdm9pZCBpbnN0YWxsKFZNJik7Ci0K
LSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9rZXk7IH0KLQotICAgIHZvaWQgZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYp
OwotICAgIAotcHJpdmF0ZToKLSAgICAvLyBPd24gZGVzdHJ1Y3RvciBtYXkgbm90IGJlIGNhbGxl
ZC4gS2VlcCBtZW1iZXJzIHRyaXZpYWxseSBkZXN0cnVjdGlibGUuCi0gICAgSlNDX1dBVENIUE9J
TlRfRklFTEQoUGFja2VkQ2VsbFB0cjxTdHJ1Y3R1cmVSYXJlRGF0YT4sIG1fc3RydWN0dXJlUmFy
ZURhdGEpOwotICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LCBtX2tleSk7Ci19OwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCmluZGV4IDM4OTlkMTZmYmI3MWYxM2ZmMDRhM2FhY2NmN2JiNDM1YTI3MzZlMjcuLmZhODUy
MmI5NTYyMjllOWMwMDY2MjFlMjExYjVjNGI5NWMxMTM5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC01MjksMTQgKzUyOSwxMyBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAKLSAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpCisgICAgSlNWYWx1ZSBjYWNo
ZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSkKICAgICB7CiAg
ICAgICAgIGlmICghaGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hl
ZFNwZWNpYWxQcm9wZXJ0eShrZXkpOwogICAgIH0KLQotICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNTdHJpbmcqIHZhbHVlLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CisgICAgdm9pZCBjYWNoZVNwZWNpYWxQ
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNWYWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3Bl
cnR5S2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDFjZjZmODdmYjkw
ODdkYjlhOWQ0YzRjNTBhOGViYTNjN2MwMTAxZTYuLmVjODE5OTY0MmViNDg3ODEwZWMyNjBiZGZl
NTIwY2FmZmM3NmI2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTQyNywxMSArNDI3LDExIEBAIGlubGluZSBzaXplX3QgbmV4
dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQogICAgIHJl
dHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgY29uc3QgUHJvcGVydHlTbG90
JiB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNhY2hlU3Bl
Y2lhbFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNWYWx1
ZSB2YWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJl
RGF0YSh2bSk7Ci0gICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShnbG9iYWxP
YmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKKyAgICByYXJl
RGF0YSgpLT5jYWNoZVNwZWNpYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1
ZSwga2V5LCBzbG90KTsKIH0KIAogdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxk
UGluLCB0eXBlbmFtZSBGdW5jPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCmluZGV4IDVkOWViMzgwMjJmMDgxZmRmYWNmYzI5OGE5
OTY2ZDVhNjFlNGM2YTQuLjkwOWViZGJjNDRiN2ZiYzQyMDJjZDY5NjdjMDljYmQyNjQyOGNjYzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRh
LmgiCiAKICNpbmNsdWRlICJBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRC
YXNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiSlNJbW11dGFibGVCdXR0ZXJmbHkuaCIKICNpbmNsdWRl
ICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCi0jaW5jbHVkZSAiT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKQEAgLTc0
LDcgKzc0LDEwIEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9w
cmV2aW91cyk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5vYmpl
Y3RUb1N0cmluZ1ZhbHVlKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX3NwZWNpYWxQcm9wZXJ0
eUNhY2hlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJl
ck9mQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5czsgKytpbmRleCkKKyAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KHN0
YXRpY19jYXN0PENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleT4oaW5kZXgpKSk7CisgICAgfQogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRv
cik7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZDYWNoZWRQ
cm9wZXJ0eU5hbWVzOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8qIGNhY2hlZCA9IHRoaXNPYmpl
Y3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lc1tpbmRleF0udW52YWxpZGF0ZWRHZXQoKTsKQEAgLTgz
LDEyICs4NiwxMiBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgfQogfQogCi0vLyAtLS0tLS0tLS0t
LSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKCkgaGVscGVyIHdhdGNocG9pbnQgY2xhc3NlcyAt
LS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0gQ2FjaGVkIHNwZWNpYWwgcHJvcGVydGllcyBoZWxw
ZXIgd2F0Y2hwb2ludCBjbGFzc2VzIC0tLS0tLS0tLS0tCiAKLWNsYXNzIE9iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgeworY2xhc3MgQ2FjaGVk
U3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50IGZp
bmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Ug
ewogcHVibGljOgogICAgIHR5cGVkZWYgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50QmFzZSBCYXNlOwotICAgIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgU3RydWN0
dXJlUmFyZURhdGEqKTsKKyAgICBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBT
dHJ1Y3R1cmVSYXJlRGF0YSopOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IGZpbmFsOwpAQCAtOTcsMzMgKzEwMCw2MSBAQCBjbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdAogICAg
IFN0cnVjdHVyZVJhcmVEYXRhKiBtX3N0cnVjdHVyZVJhcmVEYXRhOwogfTsKIAotdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVyZSogb3duU3RydWN0dXJlLCBKU1N0cmluZyogdmFs
dWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTeW1ib2xTbG90KQorU3BlY2lhbFBy
b3BlcnR5Q2FjaGVFbnRyeTo6flNwZWNpYWxQcm9wZXJ0eUNhY2hlRW50cnkoKSA9IGRlZmF1bHQ7
CisKK1NwZWNpYWxQcm9wZXJ0eUNhY2hlJiBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZW5zdXJlU3BlY2lh
bFByb3BlcnR5Q2FjaGVTbG93KCkKIHsKLSAgICBpZiAoY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1Zh
bHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9zcGVjaWFsUHJv
cGVydHlDYWNoZSk7CisgICAgYXV0byBjYWNoZSA9IG1ha2VVbmlxdWU8U3BlY2lhbFByb3BlcnR5
Q2FjaGU+KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gRXhwb3NlIHZhbGlkIHN0
cnVjdCBmb3IgY29uY3VycmVudCB0aHJlYWRzIGluY2x1ZGluZyBjb25jdXJyZW50IGNvbXBpbGVy
cy4KKyAgICBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlID0gV1RGTW92ZShjYWNoZSk7CisgICAgcmV0
dXJuICptX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLmdldCgpOworfQogCitpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6Z2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNoZShDYWNoZWRTcGVjaWFs
UHJvcGVydHlLZXkga2V5KQoreworICAgIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKCkubV9j
YWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KV0ubV92YWx1ZS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKK30KKwordm9pZCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVTcGVjaWFsUHJvcGVydHlTbG93KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBvd25TdHJ1Y3R1cmUsIEpTVmFsdWUg
dmFsdWUsIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXksIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbnVsbHB0cjsKKyAgICBzd2l0
Y2ggKGtleSkgeworICAgIGNhc2UgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1Rh
ZzoKKyAgICAgICAgdWlkID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1w
bCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6
VG9TdHJpbmc6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlZh
bHVlT2Y6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9Qcmlt
aXRpdmU6CisgICAgICAgIHVpZCA9IHZtLnByb3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9s
LmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90LmlzVmFs
dWUoKSkgewotICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhlIG93biBwcm9wZXJ0eSBjYXNl
IG9mIFN5bWJvbC50b1N0cmluZ1RhZyBiZWNhdXNlIHdlIHdvdWxkIG5ldmVyIGtub3cgaWYgYSBu
ZXcKLSAgICAgICAgLy8gb2JqZWN0IHRyYW5zaXRpb25pbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJl
IGhhZCB0aGUgc2FtZSB2YWx1ZSBzdG9yZWQgaW4gU3ltYm9sLnRvU3RyaW5nVGFnLgorICAgIGlm
IChzbG90LmlzVmFsdWUoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhlIG93biBw
cm9wZXJ0eSBjYXNlIG9mIHNwZWNpYWwgcHJvcGVydGllcyAodG9TdHJpbmcsIHZhbHVlT2YsIEBA
dG9QcmltaXRpdmUsIEBAdG9TdHJpbmdUYWcpIGJlY2F1c2Ugd2Ugd291bGQgbmV2ZXIga25vdyBp
ZiBhIG5ldworICAgICAgICAvLyBvYmplY3QgdHJhbnNpdGlvbmluZyB0byB0aGUgc2FtZSBzdHJ1
Y3R1cmUgaGFkIHRoZSBzYW1lIHZhbHVlIHN0b3JlZCBpbiB0aGF0IHByb3BlcnR5LgogICAgICAg
ICAvLyBBZGRpdGlvbmFsbHksIHRoaXMgaXMgYSBzdXBlciB1bmxpa2VseSBjYXNlIGFueXdheS4K
LSAgICAgICAgaWYgKCF0b1N0cmluZ1RhZ1N5bWJvbFNsb3QuaXNDYWNoZWFibGUoKSB8fCB0b1N0
cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKS0+c3RydWN0dXJlKHZtKSA9PSBvd25TdHJ1Y3R1
cmUpCisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpIHx8IHNsb3Quc2xvdEJhc2UoKS0+
c3RydWN0dXJlKHZtKSA9PSBvd25TdHJ1Y3R1cmUpCiAgICAgICAgICAgICByZXR1cm47CiAKLQot
ICAgICAgICAvLyBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJl
bnQgc3RydWN0dXJlIGJ1dCB0aGF0IGlzIGdvb2QgYmVjYXVzZSB3ZSBrbm93IHRoZSBTeW1ib2wu
dG9TdHJpbmdUYWcKKyAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBjcmVhdGUgYSBjb25kaXRpb24g
Zm9yIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBidXQgdGhhdCBpcyBnb29kIGJlY2F1c2Ugd2Uga25v
dyB0aGF0IHByb3BlcnR5CiAgICAgICAgIC8vIGlzIG5vdCBvbiB0aGUgb3duU3RydWN0dXJlIHNv
IHdlIHdpbGwgdHJhbnNpc2l0aW9uIGlmIG9uZSBpcyBhZGRlZCBhbmQgdGhpcyBjYWNoZSB3aWxs
IG5vIGxvbmdlciBiZSB1c2VkLgotICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2Jh
bE9iamVjdCwgb3duU3RydWN0dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKSk7
Ci0gICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdG9TdHJpbmdU
YWdTeW1ib2xTbG90LnNsb3RCYXNlKCksIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLmltcGwoKSk7CisgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCBvd25TdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KHZtLCB0aGlzLCBnbG9i
YWxPYmplY3QsIG93blN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCB1aWQpOwogICAgICAgICBB
U1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0Lmhhc09uZVNsb3RC
YXNlQ29uZGl0aW9uKCkpOwotICAgIH0gZWxzZSBpZiAodG9TdHJpbmdUYWdTeW1ib2xTbG90Lmlz
VW5zZXQoKSkgeworICAgIH0gZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAgcHJl
cGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgbnVsbHB0cik7
Ci0gICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cyh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLmltcGwoKSk7CisgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0LCBvd25T
dHJ1Y3R1cmUsIHVpZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgewotICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5n
VmFsdWVDYWNoZSgpOworICAgICAgICBnaXZlVXBPblNwZWNpYWxQcm9wZXJ0eUNhY2hlKGtleSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNiw2NyArMTY3LDkwIEBAIHZvaWQgU3Ry
dWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mCiAKICAgICAgICAgICAgIC8vIFRoZSBlcXVpdmFsZW5jZSBjb25kaXRp
b24gd29uJ3QgYmUgd2F0Y2hhYmxlIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIGEgcmVwbGFjZW1l
bnQuCiAgICAgICAgICAgICBpZiAoIWVxdWl2Q29uZGl0aW9uLmlzV2F0Y2hhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSgpOworICAgICAg
ICAgICAgICAgIGdpdmVVcE9uU3BlY2lhbFByb3BlcnR5Q2FjaGUoa2V5KTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIWNvbmRpdGlv
bi5pc1dhdGNoYWJsZSgpKSB7Ci0gICAgICAgICAgICBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFs
dWVDYWNoZSgpOworICAgICAgICAgICAgZ2l2ZVVwT25TcGVjaWFsUHJvcGVydHlDYWNoZShrZXkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUKGNv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSk7CisgICAgYXV0byYgY2FjaGUg
PSBlbnN1cmVTcGVjaWFsUHJvcGVydHlDYWNoZSgpLm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGtleSldOwogICAgIGZvciAoT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY29uZGl0aW9uIDog
Y29uZGl0aW9uU2V0KSB7CiAgICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0aW9uKCkua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgewotICAgICAgICAgICAgbV9vYmplY3RU
b1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQgPSBtYWtlVW5pcXVlPE9iamVj
dFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PihlcXVpdkNv
bmRpdGlvbiwgdGhpcyk7Ci0gICAgICAgICAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZl
cnJlZFZhbHVlV2F0Y2hwb2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgICAgICBjYWNoZS5tX2Vx
dWl2YWxlbmNlV2F0Y2hwb2ludCA9IG1ha2VVbmlxdWU8Q2FjaGVkU3BlY2lhbFByb3BlcnR5QWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PihlcXVpdkNvbmRpdGlvbiwgdGhp
cyk7CisgICAgICAgICAgICBjYWNoZS5tX2VxdWl2YWxlbmNlV2F0Y2hwb2ludC0+aW5zdGFsbCh2
bSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZl
V2F0Y2hwb2ludFNldC5hZGQoY29uZGl0aW9uLCB0aGlzKS0+aW5zdGFsbCh2bSk7CisgICAgICAg
ICAgICBjYWNoZS5tX21pc3NXYXRjaHBvaW50cy5hZGQoY29uZGl0aW9uLCB0aGlzKS0+aW5zdGFs
bCh2bSk7CiAgICAgfQotCi0gICAgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldCh2bSwgdGhpcywg
dmFsdWUpOworICAgIGNhY2hlLm1fdmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiB9CiAKLXZv
aWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyT2JqZWN0VG9TdHJpbmdWYWx1ZSgpCit2b2lkIFN0
cnVjdHVyZVJhcmVEYXRhOjpjbGVhckNhY2hlZFNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFs
UHJvcGVydHlLZXkga2V5KQogewotICAgIG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVdhdGNocG9p
bnRTZXQuY2xlYXIoKTsKLSAgICBtX29iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFZhbHVl
V2F0Y2hwb2ludC5yZXNldCgpOwotICAgIGlmICghY2FuQ2FjaGVPYmplY3RUb1N0cmluZ1ZhbHVl
KCkpCi0gICAgICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5jbGVhcigpOworICAgIGF1dG8qIG9i
amVjdFRvU3RyaW5nQ2FjaGUgPSBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLmdldCgpOworICAgIGlm
ICghb2JqZWN0VG9TdHJpbmdDYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGNhY2hl
ID0gb2JqZWN0VG9TdHJpbmdDYWNoZS0+bV9jYWNoZVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5
KV07CisgICAgY2FjaGUubV9taXNzV2F0Y2hwb2ludHMuY2xlYXIoKTsKKyAgICBjYWNoZS5tX2Vx
dWl2YWxlbmNlV2F0Y2hwb2ludC5yZXNldCgpOworICAgIGlmIChjYWNoZS5tX3ZhbHVlLmdldCgp
ICE9IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKQorICAgICAgICBjYWNoZS5t
X3ZhbHVlLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKIHsKLSAgICBpZiAobV9vYmplY3RUb1N0cmluZ0FkYXB0aXZl
SW5mZXJyZWRWYWx1ZVdhdGNocG9pbnQpIHsKLSAgICAgICAgaWYgKCFtX29iamVjdFRvU3RyaW5n
QWRhcHRpdmVJbmZlcnJlZFZhbHVlV2F0Y2hwb2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7
Ci0gICAgICAgICAgICBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGF1dG8qIHdhdGNocG9pbnQgOiBtX29i
amVjdFRvU3RyaW5nQWRhcHRpdmVXYXRjaHBvaW50U2V0KSB7Ci0gICAgICAgIGlmICghd2F0Y2hw
b2ludC0+a2V5KCkuaXNTdGlsbExpdmUodm0pKSB7Ci0gICAgICAgICAgICBjbGVhck9iamVjdFRv
U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICht
X3NwZWNpYWxQcm9wZXJ0eUNhY2hlKSB7CisgICAgICAgIGF1dG8gY2xlYXJDYWNoZUlmSW52YWxp
ZGF0ZWQgPSBbJl0oQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSkgeworICAgICAgICAgICAg
YXV0byYgY2FjaGUgPSBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLT5tX2NhY2hlW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihrZXkpXTsKKyAgICAgICAgICAgIGlmIChjYWNoZS5tX2VxdWl2YWxlbmNlV2F0
Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIGlmICghY2FjaGUubV9lcXVpdmFsZW5jZVdhdGNo
cG9pbnQtPmtleSgpLmlzU3RpbGxMaXZlKHZtKSkgeworICAgICAgICAgICAgICAgICAgICBjbGVh
ckNhY2hlZFNwZWNpYWxQcm9wZXJ0eShrZXkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRv
KiB3YXRjaHBvaW50IDogY2FjaGUubV9taXNzV2F0Y2hwb2ludHMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXdhdGNocG9pbnQtPmtleSgpLmlzU3RpbGxMaXZlKHZtKSkgeworICAgICAgICAgICAg
ICAgICAgICBjbGVhckNhY2hlZFNwZWNpYWxQcm9wZXJ0eShrZXkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mQ2Fj
aGVkU3BlY2lhbFByb3BlcnR5S2V5czsgKytpbmRleCkKKyAgICAgICAgICAgIGNsZWFyQ2FjaGVJ
ZkludmFsaWRhdGVkKHN0YXRpY19jYXN0PENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleT4oaW5kZXgp
KTsKICAgICB9CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0gTWV0aG9kcyBmb3IgT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZygpIGhlbHBlciB3YXRjaHBvaW50IGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0K
IAotT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
Ok9iamVjdFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFN0cnVjdHVyZVJhcmVEYXRhKiBzdHJ1
Y3R1cmVSYXJlRGF0YSkKK0NhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludDo6Q2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksIFN0cnVjdHVyZVJhcmVEYXRhKiBzdHJ1Y3R1cmVSYXJlRGF0YSkKICAgICA6IEJhc2Uoa2V5
KQogICAgICwgbV9zdHJ1Y3R1cmVSYXJlRGF0YShzdHJ1Y3R1cmVSYXJlRGF0YSkKIHsKIH0KIAot
Ym9vbCBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6aXNWYWxpZCgpIGNvbnN0Citib29sIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fc3RydWN0dXJlUmFyZURhdGEtPmlzTGl2ZSgpOwogfQogCi12b2lkIE9iamVjdFRvU3Ry
aW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZN
JiwgY29uc3QgRmlyZURldGFpbCYpCit2b2lkIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYgdm0sIGNvbnN0
IEZpcmVEZXRhaWwmKQogewotICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNsZWFyT2JqZWN0VG9T
dHJpbmdWYWx1ZSgpOworICAgIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkgPSBDYWNoZWRT
cGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nVGFnOworICAgIGlmICh0aGlzLT5rZXkoKS51aWQo
KSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpCisgICAgICAg
IGtleSA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWc7CisgICAgZWxzZSBp
ZiAodGhpcy0+a2V5KCkudWlkKCkgPT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgp
KQorICAgICAgICBrZXkgPSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlRvU3RyaW5nOworICAg
IGVsc2UgaWYgKHRoaXMtPmtleSgpLnVpZCgpID09IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2Yu
aW1wbCgpKQorICAgICAgICBrZXkgPSBDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXk6OlZhbHVlT2Y7
CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCh0aGlzLT5rZXkoKS51aWQoKSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbC5pbXBsKCkpOworICAgICAgICBrZXkgPSBDYWNo
ZWRTcGVjaWFsUHJvcGVydHlLZXk6OlRvUHJpbWl0aXZlOworICAgIH0KKyAgICBtX3N0cnVjdHVy
ZVJhcmVEYXRhLT5jbGVhckNhY2hlZFNwZWNpYWxQcm9wZXJ0eShrZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCmluZGV4IDgyOTNjZGM1OWVkMTU3ZGVjZjY3MWZhZGYxZjE5NTI1OTYwYzQ0
NzQuLmE5OTdiM2QxMmFkZWM2MTU4MGMzYmFiZGRjNDJkN2UyZDgxMmU5MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaApAQCAtMzUs
MTQgKzM1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDsKLWNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OworY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OworY2xhc3MgQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Oworc3RydWN0IFNwZWNpYWxQcm9wZXJ0
eUNhY2hlOwogZW51bSBjbGFzcyBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZCA6IHVpbnQ4X3Qgewog
ICAgIEtleXMgPSAwLAogICAgIEdldE93blByb3BlcnR5TmFtZXMsCiB9Owogc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkNhY2hlZFByb3BlcnR5TmFtZXMgPSAyOwogCitlbnVtIGNs
YXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSA6IHVpbnQ4X3QgeworICAgIFRvU3RyaW5nVGFn
ID0gMCwKKyAgICBUb1N0cmluZywKKyAgICBWYWx1ZU9mLAorICAgIFRvUHJpbWl0aXZlLAorfTsK
K3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZDYWNoZWRTcGVjaWFsUHJvcGVydHlL
ZXlzID0gNDsKKwogY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwpAQCAtNzAsMTEgKzc5LDggQEAg
Y2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB2b2lk
IHNldFByZXZpb3VzSUQoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGNsZWFyUHJldmlvdXNJ
RCgpOwogCi0gICAgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICB2
b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVy
ZSogYmFzZVN0cnVjdHVyZSwgSlNTdHJpbmcqIHZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHRv
U3RyaW5nVGFnU3ltYm9sU2xvdCk7Ci0gICAgdm9pZCBnaXZlVXBPbk9iamVjdFRvU3RyaW5nVmFs
dWVDYWNoZSgpIHsgbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
b2JqZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpKTsgfQotICAgIGJvb2wgY2FuQ2FjaGVP
YmplY3RUb1N0cmluZ1ZhbHVlKCkgeyByZXR1cm4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlLnVudmFs
aWRhdGVkR2V0KCkgPT0gb2JqZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpOyB9Ci0gICAg
c3RhdGljIEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ0NhY2hlR2l2ZVVwTWFya2VyKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PEpTU3RyaW5nKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0K
KyAgICBKU1ZhbHVlIGNhY2hlZFNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFsUHJvcGVydHlL
ZXkpIGNvbnN0OworICAgIHZvaWQgY2FjaGVTcGVjaWFsUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgSlNWYWx1ZSwgQ2FjaGVkU3BlY2lhbFBy
b3BlcnR5S2V5LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OwogICAgIHZvaWQg
c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciopOwpAQCAtMTAyLDE1ICsxMDgsMjAgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU3RydWN0
dXJlOwotICAgIGZyaWVuZCBjbGFzcyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludDsKLSAgICBmcmllbmQgY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ7Ci0KLSAgICB2b2lkIGNsZWFyT2JqZWN0VG9TdHJpbmdW
YWx1ZSgpOworICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFNwZWNpYWxQcm9wZXJ0
eUFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDsKIAogICAgIFN0cnVjdHVy
ZVJhcmVEYXRhKFZNJiwgU3RydWN0dXJlKik7CiAKKyAgICB2b2lkIGNsZWFyQ2FjaGVkU3BlY2lh
bFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSk7CisgICAgdm9pZCBjYWNoZVNwZWNp
YWxQcm9wZXJ0eVNsb3coSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVj
dHVyZSwgSlNWYWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5LCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKKworICAgIFNwZWNpYWxQcm9wZXJ0eUNhY2hlJiBlbnN1cmVTcGVjaWFsUHJvcGVydHlD
YWNoZSgpOworICAgIFNwZWNpYWxQcm9wZXJ0eUNhY2hlJiBlbnN1cmVTcGVjaWFsUHJvcGVydHlD
YWNoZVNsb3coKTsKKyAgICBib29sIGNhbkNhY2hlU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNp
YWxQcm9wZXJ0eUtleSk7CisgICAgdm9pZCBnaXZlVXBPblNwZWNpYWxQcm9wZXJ0eUNhY2hlKENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleSk7CisKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3ByZXZpb3VzOwotICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1Zh
bHVlOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzb21lIHN0b3J5IGZvciBjbGVhcmlu
ZyB0aGVzZSBwcm9wZXJ0eSBuYW1lcyBjYWNoZXMgaW4gR0MuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjY1OQogICAgIFdyaXRlQmFycmllcjxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I+IG1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKQEAg
LTExOCw4ICsxMjksNyBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBK
U0NlbGwgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0
Y2hwb2ludFNldD4sIFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRN
YXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNl
bWVudFdhdGNocG9pbnRTZXRzOwotICAgIEJhZzxPYmplY3RUb1N0cmluZ0FkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludD4gbV9vYmplY3RUb1N0cmluZ0FkYXB0aXZlV2F0Y2hwb2ludFNldDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ+IG1fb2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkVmFsdWVXYXRj
aHBvaW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsUHJvcGVydHlDYWNoZT4gbV9zcGVj
aWFsUHJvcGVydHlDYWNoZTsKICAgICBCb3g8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9wb2x5UHJv
dG9XYXRjaHBvaW50OwogCiAgICAgUHJvcGVydHlPZmZzZXQgbV9tYXhPZmZzZXQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5s
aW5lcy5oCmluZGV4IDllZmEwOTAxZWNiNzVhZWE1MDBmN2Y1OWI5NTRhZGU2MWUzYWE1MjEuLjU1
YTEyMzE3ZWE1N2E2ZDEzZjk5ZjdjZmU3ZjE3ODUwNTk1MjM5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5o
CkBAIC0zMiw2ICszMiwyMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gRklYTUU6IFVzZSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkLgorLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjExMgorc3RydWN0IFNwZWNpYWxQcm9wZXJ0eUNhY2hl
RW50cnkgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB+U3BlY2lh
bFByb3BlcnR5Q2FjaGVFbnRyeSgpOworICAgIEJhZzxDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fbWlzc1dhdGNocG9pbnRzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQ+IG1fZXF1aXZhbGVuY2VXYXRjaHBvaW50OworICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBtX3ZhbHVlOworfTsKKworc3RydWN0IFNwZWNpYWxQcm9wZXJ0eUNhY2hlIHsKKyAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgU3BlY2lhbFByb3BlcnR5Q2Fj
aGVFbnRyeSBtX2NhY2hlW251bWJlck9mQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5c107Cit9Owor
CiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBzdHJ1
Y3R1cmUpOwpAQCAtNDIsMTMgKzU3LDE4IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRh
OjpjbGVhclByZXZpb3VzSUQoKQogICAgIG1fcHJldmlvdXMuY2xlYXIoKTsKIH0KIAotaW5saW5l
IEpTU3RyaW5nKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2JqZWN0VG9TdHJpbmdWYWx1ZSgpIGNvbnN0
CitpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3BlY2lhbFByb3BlcnR5
KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpIGNvbnN0CiB7Ci0gICAgYXV0byogdmFsdWUg
PSBtX29iamVjdFRvU3RyaW5nVmFsdWUudW52YWxpZGF0ZWRHZXQoKTsKLSAgICBpZiAodmFsdWUg
PT0gb2JqZWN0VG9TdHJpbmdDYWNoZUdpdmVVcE1hcmtlcigpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIHZhbGlkYXRlQ2VsbCh2YWx1ZSk7CisgICAg
YXV0byogY2FjaGUgPSBtX3NwZWNpYWxQcm9wZXJ0eUNhY2hlLmdldCgpOworICAgIGlmICghY2Fj
aGUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhY2hl
LT5tX2NhY2hlW3N0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpXS5tX3ZhbHVlLmdldCgpOworICAg
IGlmICh2YWx1ZSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlLmFzQ2VsbCgpKTsK
KyNlbmRpZgogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtOTYsNCArMTE2LDI4IEBAIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRQcm9wZXJ0eU5hbWVzKFZNJiB2bSwg
Q2FjaGVkUHJvcGVydHlOYW1lCiAgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVzW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihraW5kKV0uc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogfQogCitpbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FuQ2FjaGVTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3Bl
Y2lhbFByb3BlcnR5S2V5IGtleSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGF1dG8qIGNhY2hlID0gbV9zcGVj
aWFsUHJvcGVydHlDYWNoZS5nZXQoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gY2FjaGUtPm1fY2FjaGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtl
eSldLm1fdmFsdWUuZ2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCk7
Cit9CisKK2lubGluZSBTcGVjaWFsUHJvcGVydHlDYWNoZSYgU3RydWN0dXJlUmFyZURhdGE6OmVu
c3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlKCkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIGlmIChhdXRvKiBjYWNo
ZSA9IG1fc3BlY2lhbFByb3BlcnR5Q2FjaGUuZ2V0KCkpCisgICAgICAgIHJldHVybiAqY2FjaGU7
CisgICAgcmV0dXJuIGVuc3VyZVNwZWNpYWxQcm9wZXJ0eUNhY2hlU2xvdygpOworfQorCitpbmxp
bmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVTcGVjaWFsUHJvcGVydHkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIG93blN0cnVjdHVyZSwgSlNW
YWx1ZSB2YWx1ZSwgQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5IGtleSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIGlmICghY2FuQ2FjaGVTcGVjaWFsUHJvcGVydHkoa2V5KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHJldHVybiBjYWNoZVNwZWNpYWxQcm9wZXJ0eVNsb3coZ2xvYmFs
T2JqZWN0LCB2bSwgb3duU3RydWN0dXJlLCB2YWx1ZSwga2V5LCBzbG90KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDMzNWUzMGQzYzliNDgwZjU1ZmFiYzE3ZTQ0ODM4MDg4MWRkNTBlMjIuLjQ4
YmQxZDI0ODg1ZWU3YTNiZjBlN2RiMmYwMDFlNzdmOWVmODk1ZDkgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIw
MjAtMDktMDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBDYWNoZSB0b1N0cmluZyAvIHZhbHVlT2YgLyBAQHRvUHJpbWl0aXZlIGZvciBtYWpvciBj
YXNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
MDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgKiBzdHJl
c3MvZGVsZXRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAg
ICAoc2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy5TeW1ib2wudG9QcmltaXRp
dmUpOgorICAgICAgICAqIHN0cmVzcy9kZWxldGUtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5q
czogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChvYmplY3QuX19wcm90b19f
LnRvU3RyaW5nKToKKyAgICAgICAgKiBzdHJlc3MvZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1wcm9w
ZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJv
dyk6CisgICAgICAgIChvYmplY3QuX19wcm90b19fLnZhbHVlT2YpOgorICAgICAgICAqIHN0cmVz
cy9oaWRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAo
c2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy5TeW1ib2wudG9QcmltaXRpdmUp
OgorICAgICAgICAqIHN0cmVzcy9oaWRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanM6IEFk
ZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy50b1N0
cmluZyk6CisgICAgICAgICogc3RyZXNzL2hpZGUtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5Lmpz
OiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKG9iamVjdC5fX3Byb3RvX18u
dmFsdWVPZik6CisgICAgICAgICogc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXByaW1pdGl2ZS1w
cm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChvYmplY3Qu
X19wcm90b19fLlN5bWJvbC50b1ByaW1pdGl2ZSk6CisgICAgICAgICogc3RyZXNzL3JlcGxhY2Ut
Y2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6
CisgICAgICAgIChvYmplY3QuX19wcm90b19fLnRvU3RyaW5nKToKKyAgICAgICAgKiBzdHJlc3Mv
cmVwbGFjZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoc2hv
dWxkQmUpOgorICAgICAgICAob2JqZWN0Ll9fcHJvdG9fXy52YWx1ZU9mKToKKwogMjAyMC0wOS0w
MiAgQ2FpbyBMaW1hICA8dGljYWlvbGltYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0FSTXY3XSBT
a2lwIHN0cmVzcy9pbnRsLXNlZ21lbnRlci5qcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
ZGVsZXRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9k
ZWxldGUtY2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDM3ODdm
NjVkMTdlMzQzZDhhNTU0MGNmODgzNjMzNWMyZTI0ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvZGVsZXRlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMKQEAgLTAs
MCArMSwxNyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1
ZTogJyArIGFjdHVhbCk7Cit9CisKK3ZhciBvYmplY3QgPSB7CisgICAgX19wcm90b19fOiB7Cisg
ICAgICAgIFtTeW1ib2wudG9QcmltaXRpdmVdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gNDI7CisgICAgICAgIH0KKyAgICB9Cit9OworCitzaG91bGRCZShvYmplY3QgKyA0Miwg
ODQpOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIDg0KTsKK2RlbGV0ZSBvYmplY3QuX19wcm90b19f
W1N5bWJvbC50b1ByaW1pdGl2ZV07CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmplY3QgT2Jq
ZWN0XTQyYCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVkLXRvLXN0
cmluZy1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1jYWNoZWQtdG8tc3RyaW5n
LXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzhhYWZjNzRmNDdlMzY4NjI2MTg0NTc2ZTBhMmU0
MDc3NWJhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtY2FjaGVk
LXRvLXN0cmluZy1wcm9wZXJ0eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9i
amVjdCA9IHsKKyAgICBfX3Byb3RvX186IHsKKyAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiAiSGV5IjsKKyAgICAgICAgfQorICAgIH0KK307CisKK3No
b3VsZEJlKG9iamVjdCArIDQyLCBgSGV5NDJgKTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCBgSGV5
NDJgKTsKK2RlbGV0ZSBvYmplY3QuX19wcm90b19fLnRvU3RyaW5nOworc2hvdWxkQmUob2JqZWN0
ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00MmApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
ZGVsZXRlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0
ZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQ4NzQ4OGNlODY5ODU4
NGYxMjVmZjhjZTg3MTJmODIxMTAxMTVmNwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2RlbGV0ZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanMKQEAgLTAsMCArMSwzNSBAQAor
ZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVh
bCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAg
IHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJv
d24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJv
d24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJp
bmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFk
IGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKK3ZhciBvYmplY3QgPSB7CisgICAgX19w
cm90b19fOiB7CisgICAgICAgIHRvU3RyaW5nOiB1bmRlZmluZWQsCisgICAgICAgIHZhbHVlT2Y6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgIH0K
K307CisKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CitzaG91bGRCZShvYmplY3QgKyA0Miwg
ODQpOworZGVsZXRlIG9iamVjdC5fX3Byb3RvX18udmFsdWVPZjsKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICBvYmplY3QgKyA0MjsKK30sIGBUeXBlRXJyb3I6IE5vIGRlZmF1bHQgdmFsdWVgKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9w
ZXJ0eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43OWViOGI5YTc2YWExNThhNDNjYTZmYjZlMGNjMDhlODgyNjU1MTE4
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGlkZS1jYWNoZWQtdG8tcHJpbWl0
aXZlLXByb3BlcnR5LmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVh
bCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIgb2JqZWN0ID0g
e307CitvYmplY3QuX19wcm90b19fID0ge307CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmpl
Y3QgT2JqZWN0XTQyYCk7CitzaG91bGRCZShvYmplY3QgKyA0MiwgYFtvYmplY3QgT2JqZWN0XTQy
YCk7CitvYmplY3QuX19wcm90b19fW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSBmdW5jdGlvbiAoKSB7
CisgICAgcmV0dXJuIDQyOworfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMgYi9K
U1Rlc3RzL3N0cmVzcy9oaWRlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmI2MzE4NGYyNTg5YWRiYjQwZDFlZjc3MGQwZWUwNDA4ZjNkZTljOQotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2hpZGUtY2FjaGVkLXRvLXN0cmluZy1wcm9wZXJ0eS5qcwpA
QCAtMCwwICsxLDEzIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7Cisg
ICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFk
IHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9Oworb2JqZWN0Ll9fcHJv
dG9fXyA9IHt9Oworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00MmApOwor
c2hvdWxkQmUob2JqZWN0ICsgNDIsIGBbb2JqZWN0IE9iamVjdF00MmApOworb2JqZWN0Ll9fcHJv
dG9fXy50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gIkhleSI7Cit9Oworc2hv
dWxkQmUob2JqZWN0ICsgNDIsIGBIZXk0MmApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
aGlkZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9oaWRlLWNh
Y2hlZC12YWx1ZS1vZi1wcm9wZXJ0eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDMxN2ZhODRlY2M5M2FhMjE0
MjdkZTUxYzNlNzliMzYwYWNhYjRlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
aGlkZS1jYWNoZWQtdmFsdWUtb2YtcHJvcGVydHkuanMKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rp
b24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVj
dGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9
CisKK3ZhciBvYmplY3QgPSB7fTsKK29iamVjdC5fX3Byb3RvX18gPSB7fTsKK3Nob3VsZEJlKG9i
amVjdCArIDQyLCBgW29iamVjdCBPYmplY3RdNDJgKTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCBg
W29iamVjdCBPYmplY3RdNDJgKTsKK29iamVjdC5fX3Byb3RvX18udG9TdHJpbmcgPSB1bmRlZmlu
ZWQ7CitvYmplY3QuX19wcm90b19fLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJu
IDQyOworfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9yZXBsYWNlLWNhY2hlZC10by1wcmltaXRpdmUtcHJvcGVydHkuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODk4ZDMzMDMxY2ViZGU1YzJiMTI1MWYyZWQ4YWIzOTI4NmE0MTExYQotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlcGxhY2UtY2FjaGVkLXRvLXByaW1pdGl2ZS1wcm9wZXJ0
eS5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9Oworb2JqZWN0
Ll9fcHJvdG9fXyA9IHsKKyAgICBbU3ltYm9sLnRvUHJpbWl0aXZlXTogZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gNDI7CisgICAgfQorfTsKK3Nob3VsZEJlKG9iamVjdCArIDQyLCA4NCk7
CitzaG91bGRCZShvYmplY3QgKyA0MiwgODQpOworb2JqZWN0Ll9fcHJvdG9fX1tTeW1ib2wudG9Q
cmltaXRpdmVdID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiA0NTsKK307CitzaG91bGRCZShv
YmplY3QgKyA0MiwgODcpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVwbGFjZS1jYWNo
ZWQtdG8tc3RyaW5nLXByb3BlcnR5LmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVwbGFjZS1jYWNoZWQt
dG8tc3RyaW5nLXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0Y2ZkMGNmZDM0ZWFhZjA1MjAyMjEz
MTc4NjYzMDAyMjBlMjE4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9yZXBs
YWNlLWNhY2hlZC10by1zdHJpbmctcHJvcGVydHkuanMKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rp
b24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVj
dGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9
CisKK3ZhciBvYmplY3QgPSB7fTsKK29iamVjdC5fX3Byb3RvX18gPSB7CisgICAgdG9TdHJpbmc6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICJIaSI7CisgICAgfQorfTsKK3Nob3VsZEJl
KG9iamVjdCArIDQyLCBgSGk0MmApOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIGBIaTQyYCk7Citv
YmplY3QuX19wcm90b19fLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAiSGV5
IjsKK307CitzaG91bGRCZShvYmplY3QgKyA0MiwgYEhleTQyYCk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0eS5qcyBiL0pTVGVzdHMv
c3RyZXNzL3JlcGxhY2UtY2FjaGVkLXZhbHVlLW9mLXByb3BlcnR5LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2
ZjA2MTc2OTFmNTMxYTQzZmIyODk4ZTQzMDc1NTMzYWM3MmI2ZjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3N0cmVzcy9yZXBsYWNlLWNhY2hlZC12YWx1ZS1vZi1wcm9wZXJ0eS5qcwpAQCAt
MCwwICsxLDE4IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAg
aWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZh
bHVlOiAnICsgYWN0dWFsKTsKK30KKwordmFyIG9iamVjdCA9IHt9Oworb2JqZWN0Ll9fcHJvdG9f
XyA9IHsKKyAgICB0b1N0cmluZzogdW5kZWZpbmVkLAorICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgcmV0dXJuIDQyOworICAgIH0KK307CitzaG91bGRCZShvYmplY3QgKyA0Miwg
ODQpOworc2hvdWxkQmUob2JqZWN0ICsgNDIsIDg0KTsKK29iamVjdC5fX3Byb3RvX18udmFsdWVP
ZiA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gNDM7Cit9Oworc2hvdWxkQmUob2JqZWN0ICsg
NDIsIDg1KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>