<?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>88275</bug_id>
          
          <creation_ts>2012-06-04 18:27:07 -0700</creation_ts>
          <short_desc>[Forms] Introduce InputNumber type as an alias of double for replacing it to Decimal</short_desc>
          <delta_ts>2012-06-06 17:45:40 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80009</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>641087</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-04 18:27:07 -0700</bug_when>
    <thetext>To reduce size of patch, we would like to introduce new type &quot;InputNumber&quot; type as an alias of double which will be replaced with &quot;Decimal&quot;.

This bug is a part of bug 80009.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641247</commentid>
    <comment_count>1</comment_count>
      <attachid>145711</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-05 00:31:53 -0700</bug_when>
    <thetext>Created attachment 145711
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641250</commentid>
    <comment_count>2</comment_count>
      <attachid>145711</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-05 00:39:14 -0700</bug_when>
    <thetext>Comment on attachment 145711
Patch 1

* Build locally with enabling all input types.
* EWS bots are too busy.

Could you review this patch?
Thanks in advance.

P.S.
It seems this patch is too big, however, replacing InputType to Decimal patch will be smaller. I expect to touch following files only:

1. Decimal.cpp - for convertDoubleToInputType, convertInputTypeToDouble
2. Decimal.h - for convertDoubleToInputType, convertInputTypeToDouble
3. InputType.cpp - for applyStep and stepFromRenderer
4. InputType.h - for removing parseNumberWithDecimalPlaces
2. NumberInputType.cpp - for removing parseNumberWithDecimalPlaces and changing sizeShouldIncludeDecoration.
3. StepRange.cpp - for alignValueForStep, parseStep and stepMismatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641343</commentid>
    <comment_count>3</comment_count>
      <attachid>145711</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-05 02:25:15 -0700</bug_when>
    <thetext>Comment on attachment 145711
Patch 1

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

&gt; Source/WebCore/html/BaseDateAndTimeInputType.cpp:60
&gt; -    element()-&gt;setValue(serializeWithMilliseconds(value));
&gt; +    element()-&gt;setValue(serializeWithMilliseconds(convertDoubleToInputNumber(value)));

serializeWithMilliseconds() should take a double argument because it has strong relationship with DateComponents, and the number type and the range type don&apos;t have it.

&gt; Source/WebCore/html/BaseDateAndTimeInputType.cpp:115
&gt; +        return numeric_limits&lt;InputNumber&gt;::quiet_NaN();

This should be DateComponents::invalidMilliseconds().

&gt; Source/WebCore/html/BaseDateAndTimeInputType.cpp:140
&gt; -String BaseDateAndTimeInputType::serialize(double value) const
&gt; +String BaseDateAndTimeInputType::serialize(const InputNumber&amp; value) const
&gt;  {
&gt;      if (!isfinite(value))
&gt;          return String();

should add convertInputNumberToDouble() for setMillisecondToDateComponents() below.

&gt; Source/WebCore/html/BaseDateAndTimeInputType.cpp:159
&gt; -String BaseDateAndTimeInputType::serializeWithMilliseconds(double value) const
&gt; +String BaseDateAndTimeInputType::serializeWithMilliseconds(const InputNumber&amp; value) const

should revert.

&gt; Source/WebCore/html/BaseDateAndTimeInputType.cpp:188
&gt; -    return serializeWithMilliseconds(parsedValue);
&gt; +    return serializeWithMilliseconds(convertDoubleToInputNumber(parsedValue));

ditto.

&gt; Source/WebCore/html/BaseDateAndTimeInputType.h:51
&gt; -    virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
&gt; +    virtual bool setMillisecondToDateComponents(const InputNumber&amp;, DateComponents*) const = 0;

Same comment as serializeWithMilliseconds().  setMillisecondToDateComponents() should take a double argument.

&gt; Source/WebCore/html/DateInputType.cpp:93
&gt; -bool DateInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
&gt; +bool DateInputType::setMillisecondToDateComponents(const InputNumber&amp; value, DateComponents* date) const
&gt;  {
&gt;      ASSERT(date);
&gt; -    return date-&gt;setMillisecondsSinceEpochForDate(value);
&gt; +    return date-&gt;setMillisecondsSinceEpochForDate(convertInputNumberToDouble(value));

should revert

&gt; Source/WebCore/html/DateInputType.h:53
&gt; -    virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
&gt; +    virtual bool setMillisecondToDateComponents(const InputNumber&amp;, DateComponents*) const OVERRIDE;

should revert.

&gt; Source/WebCore/html/DateTimeInputType.cpp:91
&gt; -bool DateTimeInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
&gt; +bool DateTimeInputType::setMillisecondToDateComponents(const InputNumber&amp; value, DateComponents* date) const
&gt;  {
&gt;      ASSERT(date);
&gt; -    return date-&gt;setMillisecondsSinceEpochForDateTime(value);
&gt; +    return date-&gt;setMillisecondsSinceEpochForDateTime(convertInputNumberToDouble(value));

should revert

&gt; Source/WebCore/html/DateTimeInputType.h:51
&gt; -    virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
&gt; +    virtual bool setMillisecondToDateComponents(const InputNumber&amp;, DateComponents*) const OVERRIDE;

should revert

&gt; Source/WebCore/html/DateTimeLocalInputType.cpp:97
&gt; -bool DateTimeLocalInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
&gt; +bool DateTimeLocalInputType::setMillisecondToDateComponents(const InputNumber&amp; value, DateComponents* date) const
&gt;  {
&gt;      ASSERT(date);
&gt; -    return date-&gt;setMillisecondsSinceEpochForDateTimeLocal(value);
&gt; +    return date-&gt;setMillisecondsSinceEpochForDateTimeLocal(convertInputNumberToDouble(value));

should revert

&gt; Source/WebCore/html/DateTimeLocalInputType.h:52
&gt; -    virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
&gt; +    virtual bool setMillisecondToDateComponents(const InputNumber&amp;, DateComponents*) const OVERRIDE;

should revert

&gt; Source/WebCore/html/InputType.cpp:924
&gt;  
&gt; -    element()-&gt;setValueAsNumber(newValue, ec, eventBehavior);
&gt; +    element()-&gt;setValueAsInputNumber(newValue, ec, eventBehavior);
&gt;  

We can call InputType::setValueAsInputNumber() directly, and can remove HTMLInputElement::setValueAsInputNumber().

&gt; Source/WebCore/html/NumberInputType.cpp:102
&gt; +    const InputNumber floatMax = convertDoubleToInputNumber(numeric_limits&lt;float&gt;::max());

Please add a FIXME comment that we need to change this doubleMax in the future.

&gt; Source/WebCore/html/StepRange.h:33
&gt; +// FIXME: type InputNumber will be replaced with Decimal.

A sentence should be started with a capital letter. type -&gt; Type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641368</commentid>
    <comment_count>4</comment_count>
      <attachid>145744</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-05 03:15:35 -0700</bug_when>
    <thetext>Created attachment 145744
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641369</commentid>
    <comment_count>5</comment_count>
      <attachid>145744</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-05 03:21:16 -0700</bug_when>
    <thetext>Comment on attachment 145744
Patch 2

* Build with all input types.
* Revert serializeWithMilliseconds and setMillisecondToDateComponents
** size of patch is decreased by 8K.
* Changed as review comments
* EWS bots are too busy...

Could you review again?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641393</commentid>
    <comment_count>6</comment_count>
      <attachid>145744</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-05 04:02:37 -0700</bug_when>
    <thetext>Comment on attachment 145744
Patch 2

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642050</commentid>
    <comment_count>7</comment_count>
      <attachid>145744</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 17:40:12 -0700</bug_when>
    <thetext>Comment on attachment 145744
Patch 2

Clearing flags on attachment: 145744

Committed r119540: &lt;http://trac.webkit.org/changeset/119540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642051</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 17:40:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642779</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-06 14:00:09 -0700</bug_when>
    <thetext>It appears that this patch increased the binary size significantly:
http://build.chromium.org/f/chromium/perf/linux-release-64/sizes/report.html?history=150&amp;rev=140809

Blame list: http://trac.webkit.org/log/?verbose=on&amp;rev=119550&amp;stop_rev=119536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642789</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-06 14:05:33 -0700</bug_when>
    <thetext>Actually, this could be due to the libjingle change: http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&amp;mode=html&amp;range=140704:140708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643015</commentid>
    <comment_count>11</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-06 17:45:40 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; It appears that this patch increased the binary size significantly:
&gt; http://build.chromium.org/f/chromium/perf/linux-release-64/sizes/report.html?history=150&amp;rev=140809
&gt; 
&gt; Blame list: http://trac.webkit.org/log/?verbose=on&amp;rev=119550&amp;stop_rev=119536

(In reply to comment #10)
&gt; Actually, this could be due to the libjingle change: http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&amp;mode=html&amp;range=140704:140708

I don&apos;t think the patch in this bug caused the significant size change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145711</attachid>
            <date>2012-06-05 00:31:53 -0700</date>
            <delta_ts>2012-06-05 03:15:30 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-88275-20120605163152.patch</filename>
            <type>text/plain</type>
            <size>79553</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE5ZjA3NmY5YjFiODZh
NmZmN2MwMjFkNTU3OGIwY2E3MTY3OWI5Mi4uMGYwM2E2MzBiYjE3MDI5MWY3ZGNiNmNjZTNjZjlh
NTllZTUyOTI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NSBAQAorMjAxMi0wNi0wNCAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIElucHV0TnVtYmVyIHR5cGUgYXMgYW4gYWxpYXMgb2YgZG91YmxlIGZvciByZXBsYWNp
bmcgaXQgdG8gRGVjaW1hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODgyNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZWQgSW5wdXROdW1iZXIgdHlwZSBhcyBhbGlhcyBv
ZiBkb3VibGUgdG8gYmUKKyAgICAgICAgcmVwbGFjZWQgdG8gRGVjaW1hbCBhbmQgY29udmVydERv
dWJsZVRvSW5wdXROdW1iZXIgYW5kIAorICAgICAgICBjb252ZXJ0VG9JbnB1dE51bWJlclRvRG91
YmxlIGZvciByZWR1Y2luZyBzaXplIG9mIHBhdGNoIHdoZW4gd2UKKyAgICAgICAgaW50cm9kdWNl
IERlY2ltYWwgdHlwZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIG5ldyB2YWlyYWJsZXMg
dG8gdXNlIGNvbnN0IHZhcmlhYmxlIHRvIHJlZHVjZQorICAgICAgICBjb3B5IG9wZXJhdGlvbiB3
aGVuIGludHJvZHVjaW5nIERlY2ltYWwgdHlwZS4KKworICAgICAgICBJbiB0aGUgaW1wbGVtZW50
YXRpb24sIHdlIHVzZSBJbnB1dE51bWJlciwgd2lsbCBiZSBEZWNpbWFsLCBob3dldmVyIHNvbWUg
bWV0aG9kcyBpbiBJREwKKyAgICAgICAgdXNlIGRvdWJsZS4gVG8gY2xhcmlmeSBpbnRlcm5hbCB1
c2FnZSBvZiB2YWx1ZSBhbmQgZXh0ZXJuYWwgdXNhZ2UsIHRoaXQgcGF0Y2ggcmVuYW1lZAorICAg
ICAgICBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisgICAgICAgIC0gcGFyc2VUb0RvdWJsZSA9PiBw
YXJzZU51bWJlcgorICAgICAgICAtIHNldFZhbHVlQXNOdW1iZXIgPT4gc2V0VmFsdWVBc0RvdWJs
ZSBhbmQgc2V0VmFsdWVBc0lucHV0TnVtYmVyCisgICAgICAgIC0gdmFsdWVBc051bWJlciA9PiB2
YWx1ZUFzRG91YmxlCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHBhcnQgb2YgaW50cm9kdWNp
bmcgRGVjaW1hbCwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMDA5
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2
aW9yLgorCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2YWx1ZUFzRGF0ZSk6IFJl
cGxhY2VkIHBhcnNlVG9OdW1iZXIoKSB0byB2YWx1ZUFzRG91YmxlKCkKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0VmFsdWVBc0RhdGUpOiBJbnNlcnRlZCBj
b252ZXJ0RG91YmxlVG9JbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6IFVzZSBuZXcgZnVuY3Rpb24gcGFyc2VUb0Rv
dWJsZSgpLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRW
YWx1ZUFzSW5wdXROdW1iZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKTogQ2hhbmdlZCByZXR1cm4gdHlw
ZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6cGFyc2VUb051bWJlcik6IFRoaXMgaXMgcmVwbGFjZW1lbnQgb2YgcGFyc2VUb0RvdWJs
ZSgpLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpwYXJzZVRv
RG91YmxlKTogQWRkZWQgZm9yIHZhbHVlQXNEYXRlIGFuZCB2YWx1ZUFzRG91YmxlLgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemUpOiBDaGFuZ2Vk
IHBhcmFtZXRlciB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoQ29tcG9uZW50cyk6IFJlcGxhY2UgZG91
YmxlIHRvIElucHV0TnVtYmVyIGZvciBnZXRBbGxvd2RTdGVwLgorICAgICAgICAoV2ViQ29yZTo6
QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKTogQ2hh
bmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUpOiBJbnNlcnRl
ZCBjb252ZXJ0RG91YmxlVG9EZWNpbWFsIGZvciBzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzLgor
ICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmg6CisgICAgICAgIChCYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGUpOgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBs
YWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpEYXRlSW5wdXRU
eXBlOjpzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMpOiBDaGFuZ2VkIHBhcmFtZXRlciB0
eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5oOgorICAg
ICAgICAoRGF0ZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUlucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9y
U3RlcFVwKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3Vi
bGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUlucHV0VHlwZTo6
c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0
byBJbnB1dE51bWJlci4KKyAgICAgICAgKiBodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmg6CisgICAg
ICAgIChEYXRlVGltZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNy
ZWF0ZVN0ZXBSYW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OnNldE1pbGxpc2Vjb25kVG9EYXRlQ29t
cG9uZW50cyk6IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAg
ICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmg6CisgICAgICAgIChEYXRlVGltZUxvY2Fs
SW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcCk6IENoYW5n
ZWQgcGFyYW1ldGVyIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp2YWx1ZUFzTnVtYmVyKTogVXNlIElucHV0VHlwZTo6dmFsdWVBc0RvdWJs
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNOdW1iZXIp
OiBVc2UgSW5wdXRUeXBlOjp2YWx1ZUFzSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNJbnB1dE51bWJl
cik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChIVE1MSW5w
dXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUpOiBSZXBsYWNlbWVudCBvZiB2YWx1ZUFzTnVt
YmVyLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzZXRWYWx1ZUFzRG91YmxlKTogUmVw
bGFjZW1lbnQgb2YgdmFsdWVBc051bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
c2V0VmFsdWVBc0lucHV0TnVtYmVyKTogUmVwbGFjZW1lbnQgb2YgdmFsdWVBc051bWJlci4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6cmFuZ2VVbmRlcmZsb3cpOiBSZXBsYWNlZCBkb3Vi
bGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnJhbmdlT3Zl
cmZsb3cpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCk6IENoYW5nZWQgcmV0dXJuIHR5cGUg
dG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzSW5SYW5nZSk6
IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0
VHlwZTo6aXNPdXRPZlJhbmdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdGVwTWlzbWF0Y2gpOiBSZXBsYWNlZCBkb3VibGUg
dG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnZhbGlkYXRpb25N
ZXNzYWdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKTogUmVwbGFjZW1lbnQgb2YgcGFyc2VUb0RvdWJs
ZS4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6cGFyc2VUb051bWJlck9yTmFOKTogQWRk
ZWQgZm9yIHJlZHVjaW5nIG51bWJlciBvZiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyV2l0
aERlY2ltYWxQbGFjZXMpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAg
IChXZWJDb3JlOjpJbnB1dFR5cGU6OnNlcmlhbGl6ZSk6IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUg
dG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFwcGx5U3RlcCk6
IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0
VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcCk6IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gSW5w
dXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJl
cik6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKiBodG1sL0lucHV0
VHlwZS5oOgorICAgICAgICAoSW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL01vbnRoSW5wdXRU
eXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRo
TWlsbGlzZWNvbmRzKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBJbnB1dE51bWJlci4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXApOiBD
aGFuZ2VkIHJldHVybiB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6TW9u
dGhJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51
bWJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKTog
UmVwbGFjZW1lbnQgb2YgcGFyc2VUb0RvdWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5w
dXRUeXBlOjpzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMpOiBDaGFuZ2VkIHBhcmFtZXRl
ciB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAqIGh0bWwvTW9udGhJbnB1dFR5cGUuaDoK
KyAgICAgICAgKE1vbnRoSW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL051bWJlcklucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUp
OiBSZXBsYWNlbWVudCBvZiB2YWx1ZUFzTnVtYmVyLiBDaGFuZ2VkIHRvIHVzZSBwYXJzZVRvRG91
YmxlRm9yTnVtYmVyVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6c2V0
VmFsdWVBc0RvdWJsZSk6ICBSZXBsYWNlbWVudCBvZiBzZXRWYWx1ZUFzTnVtYmVyLiAgQ2hhbmdl
ZCB0byB1c2Ugc2VyaWFsaXplRm9yTnVtYmVyVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJl
cklucHV0VHlwZTo6c2V0VmFsdWVBc0lucHV0TnVtYmVyKTogUmVwbGFjZW1lbnQgb2Ygc2V0VmFs
dWVBc051bWJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6Y3JlYXRlU3Rl
cFJhbmdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29y
ZTo6TnVtYmVySW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKTogUmVwbGFjZW1lbnQgb2YgcGFyc2VU
b0RvdWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6cGFyc2VUb051bWJl
cldpdGhEZWNpbWFsUGxhY2VzKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAg
ICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpzZXJpYWxpemUpOgorICAgICAgICAqIGh0
bWwvTnVtYmVySW5wdXRUeXBlLmg6CisgICAgICAgIChOdW1iZXJJbnB1dFR5cGUpOgorICAgICAg
ICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTWF4
aW11bSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKTogUmVwbGFjZW1lbnQgb2YgdmFsdWVBc051
bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFzSW5wdXRO
dW1iZXIpOiAgUmVwbGFjZW1lbnQgb2Ygc2V0VmFsdWVBc051bWJlci4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3VibGUgdG8g
SW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlS2V5
ZG93bkV2ZW50KTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2VJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIpOiBSZXBsYWNlbWVudCBvZiBwYXJz
ZVRvRG91YmxlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnNlcmlhbGl6ZSk6
IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZUlucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1
dE51bWJlci4KKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmg6CisgICAgICAgIChSYW5n
ZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9TdGVwUmFuZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3RlcFJhbmdlOjpTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1i
ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OmFjY2VwdGFibGVFcnJvcik6IFJlcGxh
Y2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6
YWxpZ25WYWx1ZUZvclN0ZXApOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6Y2xhbXBWYWx1ZSk6
IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBS
YW5nZTo6c3RlcE1pc21hdGNoKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAg
ICAgICAqIGh0bWwvU3RlcFJhbmdlLmg6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RG91Ymxl
VG9JbnB1dE51bWJlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydElucHV0TnVt
YmVyVG9Eb3VibGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6TnVtYmVy
V2l0aERlY2ltYWxQbGFjZXM6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzKTogUmVwbGFjZWQgZG91
YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjpTdGVwRGVz
Y3JpcHRpb246OmRlZmF1bHRWYWx1ZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4K
KyAgICAgICAgKFN0ZXBSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6Om1heGlt
dW0pOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpT
dGVwUmFuZ2U6Om1pbmltdW0pOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAg
ICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OnN0ZXApOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXRO
dW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OnN0ZXBCYXNlKTogUmVwbGFjZWQg
ZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjpkZWZh
dWx0VmFsdWUpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJD
b3JlOjpTdGVwUmFuZ2U6OnByb3BvcnRpb25Gcm9tVmFsdWUpOiBSZXBsYWNlZCBkb3VibGUgdG8g
SW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OnZhbHVlRnJvbVByb3Bv
cnRpb24pOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgICogaHRtbC9U
aW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmRlZmF1
bHRWYWx1ZUZvclN0ZXBVcCk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAg
ICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSk6IFJlcGxhY2VkIGRv
dWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlRpbWVJbnB1dFR5cGU6OnNl
dE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51
bWJlci4KKyAgICAgICAgKiBodG1sL1RpbWVJbnB1dFR5cGUuaDoKKyAgICAgICAgKFRpbWVJbnB1
dFR5cGUpOgorICAgICAgICAqIGh0bWwvV2Vla0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWVrSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3VibGUgdG8g
SW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWVrSW5wdXRUeXBlOjpzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisg
ICAgICAgICogaHRtbC9XZWVrSW5wdXRUeXBlLmg6CisgICAgICAgIChXZWVrSW5wdXRUeXBlKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9DYWxlbmRhclBpY2tlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FsZW5kYXJQaWNrZXJFbGVtZW50Ojp3cml0ZURvY3VtZW50KTogUmVwbGFj
ZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbGlkZXJQb3NpdGlvbik6IFJlcGxh
Y2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRl
clRodW1iOjpsYXlvdXQpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAg
IChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OnNldFBvc2l0aW9uRnJvbVBvaW50KTogUmVw
bGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorCiAyMDEyLTA2LTA0ICBUYWthc2hpIFRveW9z
aGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbV2ViU29ja2V0XSBTZW5k
IHJlcXVpcmVzIHN1cGVyIGxpbmVhciB0aW1lIGFnYWluc3QgZGF0YSBzaXplCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKaW5kZXggODFjOWI1
ZjA2NDkwYTAyMjBmODRmNmRiZDY5ZmVhZTJlOTM5MzYzYS4uNDM2YTEzZTA0YzhkMTZlMDliZjM5
OGI3M2YxYjNkZjI2OWU3YzZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNDcsMjUgKzQ3LDI1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
Ci1zdGF0aWMgY29uc3QgZG91YmxlIG1zZWNQZXJNaW51dGUgPSA2MCAqIDEwMDA7Ci1zdGF0aWMg
Y29uc3QgZG91YmxlIG1zZWNQZXJTZWNvbmQgPSAxMDAwOworc3RhdGljIGNvbnN0IGludCBtc2Vj
UGVyTWludXRlID0gNjAgKiAxMDAwOworc3RhdGljIGNvbnN0IGludCBtc2VjUGVyU2Vjb25kID0g
MTAwMDsKIAogZG91YmxlIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0RhdGUoKSBj
b25zdAogewotICAgIHJldHVybiBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+dmFsdWUoKSwgRGF0
ZUNvbXBvbmVudHM6OmludmFsaWRNaWxsaXNlY29uZHMoKSk7CisgICAgcmV0dXJuIHZhbHVlQXNE
b3VibGUoKTsKIH0KIAogdm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNE
YXRlKGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7Ci0gICAgZWxlbWVudCgp
LT5zZXRWYWx1ZShzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKHZhbHVlKSk7CisgICAgZWxlbWVu
dCgpLT5zZXRWYWx1ZShzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKGNvbnZlcnREb3VibGVUb0lu
cHV0TnVtYmVyKHZhbHVlKSkpOwogfQogCi1kb3VibGUgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
Ojp2YWx1ZUFzTnVtYmVyKCkgY29uc3QKK2RvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnZhbHVlQXNEb3VibGUoKSBjb25zdAogewotICAgIHJldHVybiBwYXJzZVRvTnVtYmVyKGVsZW1l
bnQoKS0+dmFsdWUoKSwgbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpOworICAg
IHJldHVybiBwYXJzZVRvRG91YmxlKGVsZW1lbnQoKS0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRWYWx1ZUFzTnVtYmVyKGRvdWJsZSBuZXdWYWx1ZSwg
VGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJikgY29u
c3QKK3ZvaWQgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRWYWx1ZUFzSW5wdXROdW1iZXIo
Y29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50
QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewogICAgIGVsZW1lbnQoKS0+c2V0VmFs
dWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiB9CkBAIC04MCwxMyArODAs
MTMgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0
CiAgICAgcmV0dXJuIHR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCktPnZhbHVlKCkpOwogfQogCi1k
b3VibGUgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBj
b25zdAorSW5wdXROdW1iZXIgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVG
b3JTdGVwVXAoKSBjb25zdAogewogICAgIGRvdWJsZSBtcyA9IGN1cnJlbnRUaW1lTVMoKTsKICAg
ICBkb3VibGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CiAgICAgZG91YmxlIGRz
dE9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKICAgICBpbnQgb2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8aW50PigodXRjT2Zmc2V0ICsgZHN0T2Zmc2V0KSAvIG1zUGVyTWlu
dXRlKTsKLSAgICByZXR1cm4gbXMgKyAob2Zmc2V0ICogbXNQZXJNaW51dGUpOworICAgIHJldHVy
biBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihtcyArIChvZmZzZXQgKiBtc1Blck1pbnV0ZSkp
OwogfQogCiBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6aXNTdGVwcGFibGUoKSBjb25z
dApAQCAtMTA4LDE2ICsxMDgsMjIgQEAgdm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6Omhh
bmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVudCogZXZlbnQpCiAgICAgICAgIGhhbmRsZVdoZWVsRXZl
bnRGb3JTcGluQnV0dG9uKGV2ZW50KTsKIH0KIAotZG91YmxlIEJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6cGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1
ZSkgY29uc3QKK2RvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnBhcnNlVG9Eb3VibGUo
Y29uc3QgU3RyaW5nJiBzb3VyY2UpIGNvbnN0CiB7CiAgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsK
LSAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhzcmMsICZkYXRlKSkKLSAgICAgICAgcmV0
dXJuIGRlZmF1bHRWYWx1ZTsKKyAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhzb3VyY2Us
ICZkYXRlKSkKKyAgICAgICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPElucHV0TnVtYmVyPjo6cXVp
ZXRfTmFOKCk7CiAgICAgZG91YmxlIG1zZWMgPSBkYXRlLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2go
KTsKICAgICBBU1NFUlQoaXNmaW5pdGUobXNlYykpOwogICAgIHJldHVybiBtc2VjOwogfQogCitJ
bnB1dE51bWJlciBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IElucHV0TnVtYmVyJiBkZWZhdWx0VmFsdWUpIGNvbnN0Cit7
CisgICAgY29uc3QgZG91YmxlIGRvdWJsZVZhbHVlID0gcGFyc2VUb0RvdWJsZShzb3VyY2UpOwor
ICAgIHJldHVybiBpc2Zpbml0ZShkb3VibGVWYWx1ZSkgPyBjb252ZXJ0RG91YmxlVG9JbnB1dE51
bWJlcihkb3VibGVWYWx1ZSkgOiBkZWZhdWx0VmFsdWU7Cit9CisKIGJvb2wgQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVudHMoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IERhdGVDb21wb25lbnRzKiBvdXQpIGNvbnN0CiB7CiAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkp
CkBAIC0xMjgsNyArMTM0LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnBhcnNl
VG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcmIHNvdXJjZSwgRGF0ZUMKICAgICByZXR1cm4g
cGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoc291cmNlLmNoYXJhY3RlcnMoKSwgc291cmNl
Lmxlbmd0aCgpLCBvdXQpOwogfQogCi1TdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpz
ZXJpYWxpemUoZG91YmxlIHZhbHVlKSBjb25zdAorU3RyaW5nIEJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6c2VyaWFsaXplKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSkgY29uc3QKIHsKICAgICBp
ZiAoIWlzZmluaXRlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTQwLDcg
KzE0Niw3IEBAIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZShkb3Vi
bGUgdmFsdWUpIGNvbnN0CiAKIFN0cmluZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlh
bGl6ZVdpdGhDb21wb25lbnRzKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKSBjb25zdAogewot
ICAgIGRvdWJsZSBzdGVwOworICAgIElucHV0TnVtYmVyIHN0ZXA7CiAgICAgaWYgKCFlbGVtZW50
KCktPmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0ZXApKQogICAgICAgICByZXR1cm4gZGF0ZS50b1N0
cmluZygpOwogICAgIGlmICghZm1vZChzdGVwLCBtc2VjUGVyTWludXRlKSkKQEAgLTE1MCw3ICsx
NTYsNyBAQCBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoQ29t
cG9uZW50cyhjb25zdCBEYXRlQ29tcG9uZW50cyYgZAogICAgIHJldHVybiBkYXRlLnRvU3RyaW5n
KERhdGVDb21wb25lbnRzOjpNaWxsaXNlY29uZCk7CiB9CiAKLVN0cmluZyBCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHMoZG91YmxlIHZhbHVlKSBjb25z
dAorU3RyaW5nIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2VyaWFsaXplV2l0aE1pbGxpc2Vj
b25kcyhjb25zdCBJbnB1dE51bWJlciYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNlcmlh
bGl6ZSh2YWx1ZSk7CiB9CkBAIC0xNzksNyArMTg1LDcgQEAgU3RyaW5nIEJhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJiB2aXNpYmxl
VmEKICAgICBpZiAoIWlzZmluaXRlKHBhcnNlZFZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZpc2li
bGVWYWx1ZTsKIAotICAgIHJldHVybiBzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKHBhcnNlZFZh
bHVlKTsKKyAgICByZXR1cm4gc2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyhjb252ZXJ0RG91Ymxl
VG9JbnB1dE51bWJlcihwYXJzZWRWYWx1ZSkpOwogfQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCmlu
ZGV4IGZkOTViNWY2OTllY2JmOGZhZWVhMWViYmE5MTY4YzYwMTNkNzdhNmUuLjhkMGRmNjFiZTdk
OTBlMWUyZWJiYzk0NGRmMDQ3Yjg1MzA2MDBmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaApAQCAtNDIsMjkgKzQyLDMwIEBAIGNsYXNzIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZSA6IHB1YmxpYyBUZXh0RmllbGRJbnB1dFR5cGUgewogcHJv
dGVjdGVkOgogICAgIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IHBhcnNlVG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopIGNv
bnN0IE9WRVJSSURFOwogICAgIFN0cmluZyBzZXJpYWxpemVXaXRoQ29tcG9uZW50cyhjb25zdCBE
YXRlQ29tcG9uZW50cyYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwg
RGF0ZUNvbXBvbmVudHMqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vj
b25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoY29uc3QgSW5w
dXROdW1iZXImLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERhdGVD
b21wb25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IHZhbHVlQXNEYXRlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXNEYXRlKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgZG91YmxlIHZhbHVlQXNOdW1iZXIoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc051bWJlcihkb3VibGUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRG91
YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnB1dE51
bWJlcihjb25zdCBJbnB1dE51bWJlciYsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdHlwZU1pc21hdGNoRm9y
KGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCB0eXBlTWlz
bWF0Y2goKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0VmFsdWVG
b3JTdGVwVXAoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIElucHV0TnVtYmVyIGRlZmF1
bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1N0
ZXBwYWJsZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KFdoZWVsRXZlbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUo
ZG91YmxlKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemVXaXRo
TWlsbGlzZWNvbmRzKGRvdWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXpl
KGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcg
c2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyhjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0OwogICAg
IHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBTdHJpbmcgY29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJikg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBT
dHJpbmcmKSBjb25zdCBPVkVSUklERTsKKyAgICBkb3VibGUgcGFyc2VUb0RvdWJsZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0RhdGVJbnB1dFR5cGUuY3BwCmluZGV4IDcxMTczMTY5OTM4YmRlMjJjMzU0YjE2OTk1NWQ4
OThkYTI4OWEzMzYuLmIxNjZhYTA4ZmFmZmQ4M2Y2YTdjYzY5NmZhMzJmMjk3ODg3MDkyZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtNzMsOSArNzMsOSBAQCBTdGVw
UmFuZ2UgRGF0ZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlT
dGVwSGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVw
UmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZURlZmF1bHRTdGVw
LCBkYXRlRGVmYXVsdFN0ZXBCYXNlLCBkYXRlU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBh
cnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgZG91YmxlIHN0ZXBCYXNlID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwot
ICAgIGRvdWJsZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRy
aWJ1dGUobWluQXR0ciksIERhdGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZSgpKTsKLSAgICBkb3Vi
bGUgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1h
eEF0dHIpLCBEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGUoKSk7CisgICAgY29uc3QgSW5wdXRO
dW1iZXIgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0
ZShtaW5BdHRyKSwgMCk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWluaW11bSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBjb252ZXJ0RG91Ymxl
VG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGUoKSkpOworICAgIGNvbnN0
IElucHV0TnVtYmVyIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0
dHJpYnV0ZShtYXhBdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVu
dHM6Om1heGltdW1EYXRlKCkpKTsKICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxh
Y2VzT3JNaXNzaW5nIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcs
IHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7
CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwg
c3RlcERlc2NyaXB0aW9uKTsKIH0KQEAgLTg3LDEwICs4NywxMCBAQCBib29sIERhdGVJbnB1dFR5
cGU6OnBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZwogICAgIHJldHVybiBvdXQtPnBhcnNlRGF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIDAs
IGVuZCkgJiYgZW5kID09IGxlbmd0aDsKIH0KIAotYm9vbCBEYXRlSW5wdXRUeXBlOjpzZXRNaWxs
aXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlIHZhbHVlLCBEYXRlQ29tcG9uZW50cyogZGF0
ZSkgY29uc3QKK2Jvb2wgRGF0ZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25l
bnRzKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqIGRhdGUpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGRhdGUpOwotICAgIHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNT
aW5jZUVwb2NoRm9yRGF0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIGRhdGUtPnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlKGNvbnZlcnRJbnB1dE51bWJlclRvRG91YmxlKHZhbHVlKSk7CiB9
CiAKIGJvb2wgRGF0ZUlucHV0VHlwZTo6aXNEYXRlRmllbGQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RhdGVJbnB1dFR5cGUuaAppbmRleCAyZmFkYzQ3YjQ4Y2QwYTM5ZTAwZjQzYjNiZjExYmEwYTli
MjFjMDFmLi4wYWViYTQyYTcyNzM0ZTdlMWI3YTU0ZDdmNGUwMTk4MTZmOWE3ZjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaApAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZGF0ZVR5cGUoKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFN0ZXBSYW5nZSBjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50
ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9u
ZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhjb25zdCBJbnB1dE51bWJlciYs
IERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzRGF0
ZUZpZWxkKCkgY29uc3QgT1ZFUlJJREU7CiAjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpIE9WRVJSSURFOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcAppbmRleCBhNjg0M2RjMzdjMGFhZjhhYjJl
OWNhMjFjMmViZDAwY2YyZDllYmFiLi5lN2VjYmFlZmRmMjRmNWJhN2VkMzZiMWM1NDFhODJmOGJj
NGNjYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcApAQCAt
NjIsMTggKzYyLDE4IEBAIERhdGVDb21wb25lbnRzOjpUeXBlIERhdGVUaW1lSW5wdXRUeXBlOjpk
YXRlVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIERhdGVDb21wb25lbnRzOjpEYXRlVGltZTsKIH0K
IAotZG91YmxlIERhdGVUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25z
dAorSW5wdXROdW1iZXIgRGF0ZVRpbWVJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRUaW1lTVMoKTsKKyAgICByZXR1cm4gY29udmVy
dERvdWJsZVRvSW5wdXROdW1iZXIoY3VycmVudFRpbWVNUygpKTsKIH0KIAogU3RlcFJhbmdlIERh
dGVUaW1lSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBI
YW5kbGluZykgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0ZXBSYW5n
ZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sIChkYXRlVGltZURlZmF1bHRTdGVw
LCBkYXRlVGltZURlZmF1bHRTdGVwQmFzZSwgZGF0ZVRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBS
YW5nZTo6U2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKSk7CiAKLSAgICBkb3VibGUgc3Rl
cEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRy
KSwgMCk7Ci0gICAgZG91YmxlIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFz
dEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlVGltZSgp
KTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0
QXR0cmlidXRlKG1heEF0dHIpLCBEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpOwor
ICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1p
bmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRy
KSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRl
VGltZSgpKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBjb252ZXJ0RG91YmxlVG9JbnB1
dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKICAgICBTdGVwUmFu
Z2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5nIHN0ZXAgPSBTdGVwUmFuZ2U6OnBh
cnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwg
bWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0KQEAgLTg1LDEwICs4
NSwxMCBAQCBib29sIERhdGVUaW1lSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdQogICAgIHJldHVybiBvdXQtPnBhcnNlRGF0
ZVRpbWUoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCBlbmQpICYmIGVuZCA9PSBsZW5ndGg7CiB9CiAK
LWJvb2wgRGF0ZVRpbWVJbnB1dFR5cGU6OnNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhk
b3VibGUgdmFsdWUsIERhdGVDb21wb25lbnRzKiBkYXRlKSBjb25zdAorYm9vbCBEYXRlVGltZUlu
cHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGNvbnN0IElucHV0TnVtYmVy
JiB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqIGRhdGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGRhdGUp
OwotICAgIHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUo
dmFsdWUpOworICAgIHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0
ZVRpbWUoY29udmVydElucHV0TnVtYmVyVG9Eb3VibGUodmFsdWUpKTsKIH0KIAogYm9vbCBEYXRl
VGltZUlucHV0VHlwZTo6aXNEYXRlVGltZUZpZWxkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZVRpbWVJbnB1dFR5cGUuaAppbmRleCBlODA4ODZmMzJhYjlkZTg1NDQ0YzE4Yzg5MzVhOTcx
Y2QwZTQyN2VlLi5kZjg1YWIzYTgyNGYyODA2Y2ZkNzQwNDNiNTNiZGIyZTUzMTljN2Y0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5oCkBAIC00Niw5ICs0Niw5IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgp
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZGF0ZVR5
cGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0ZXBSYW5nZSBjcmVhdGVTdGVwUmFu
Z2UoQW55U3RlcEhhbmRsaW5nKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBk
ZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIElucHV0
TnVtYmVyIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVu
dHMqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRUb0Rh
dGVDb21wb25lbnRzKGNvbnN0IElucHV0TnVtYmVyJiwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNEYXRlVGltZUZpZWxkKCkgY29uc3QgT1ZFUlJJ
REU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJ
bnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcAppbmRleCAwZDMxM2JjMzRjZGQ2OWVmNGJkMTY0MDI3MzkyMzZjMzExZDJlMzE0Li4xYmU3
MDliNDI3MWIzMjViMjM4YzFkMTI2YmUzN2Q1M2EyMDc4NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKQEAgLTc3LDkgKzc3LDkgQEAgU3Rl
cFJhbmdlIERhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFu
ZGxpbmcgYW55U3RlcEhhbmRsaW4KIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sIChkYXRlVGltZUxvY2Fs
RGVmYXVsdFN0ZXAsIGRhdGVUaW1lTG9jYWxEZWZhdWx0U3RlcEJhc2UsIGRhdGVUaW1lTG9jYWxT
dGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2Vy
KSk7CiAKLSAgICBkb3VibGUgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFz
dEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgMCk7Ci0gICAgZG91YmxlIG1pbmltdW0gPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1EYXRlVGltZSgpKTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9OdW1i
ZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEYXRlQ29tcG9uZW50czo6
bWF4aW11bURhdGVUaW1lKCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAg
IGNvbnN0IElucHV0TnVtYmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFz
dEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNv
bXBvbmVudHM6Om1pbmltdW1EYXRlVGltZSgpKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWF4
aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIp
LCBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVU
aW1lKCkpKTsKICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5n
IHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlw
dGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJu
IFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0
aW9uKTsKIH0KQEAgLTkxLDEwICs5MSwxMCBAQCBib29sIERhdGVUaW1lTG9jYWxJbnB1dFR5cGU6
OnBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogICAg
IHJldHVybiBvdXQtPnBhcnNlRGF0ZVRpbWVMb2NhbChjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIGVu
ZCkgJiYgZW5kID09IGxlbmd0aDsKIH0KIAotYm9vbCBEYXRlVGltZUxvY2FsSW5wdXRUeXBlOjpz
ZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlIHZhbHVlLCBEYXRlQ29tcG9uZW50
cyogZGF0ZSkgY29uc3QKK2Jvb2wgRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2V0TWlsbGlzZWNv
bmRUb0RhdGVDb21wb25lbnRzKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSwgRGF0ZUNvbXBvbmVu
dHMqIGRhdGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGRhdGUpOwotICAgIHJldHVybiBkYXRlLT5z
ZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWVMb2NhbCh2YWx1ZSk7CisgICAgcmV0
dXJuIGRhdGUtPnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZUxvY2FsKGNvbnZl
cnRJbnB1dE51bWJlclRvRG91YmxlKHZhbHVlKSk7CiB9CiAKIGJvb2wgRGF0ZVRpbWVMb2NhbElu
cHV0VHlwZTo6aXNEYXRlVGltZUxvY2FsRmllbGQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaAppbmRleCBjYTQwYjM3NzRkODI4ZGY0NDNmYzJl
YjkwYTgxZGYxZGJkOTNkYzIzLi4yZGZiMTc5YTBjMDcxZmRlNGM4MzM4NzQ3ZjM3YTQyNWI1OTJl
NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaApA
QCAtNDksNyArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0
ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0
ZXBSYW5nZSBjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25l
bnRzKikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9E
YXRlQ29tcG9uZW50cyhjb25zdCBJbnB1dE51bWJlciYsIERhdGVDb21wb25lbnRzKikgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzRGF0ZVRpbWVMb2NhbEZpZWxkKCkgY29uc3Qg
T1ZFUlJJREU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApp
bmRleCA5MjQ4ZjBiYzI3OTJkYTM2Yzg2ZjUyYzVhZmRhM2JjMjhhYjI5MTgwLi5lYmUxZTYzYjdi
YjgwZjQ5NDUxOWM0YzhiMTZmNjM2MTg2MGFhODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OnN0ZXBNaXNtYXRjaCgpIGNvbnN0CiAgICAgcmV0dXJuIHdpbGxWYWxpZGF0ZSgpICYmIG1f
aW5wdXRUeXBlLT5zdGVwTWlzbWF0Y2godmFsdWUoKSk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxl
bWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNvbnN0Citib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0ZXAoSW5wdXROdW1iZXIqIHN0ZXApIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5nZXRBbGxvd2VkVmFsdWVTdGVwKHN0ZXApOwog
fQpAQCAtOTQ5LDcgKzk0OSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVBc0Rh
dGUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIAogZG91YmxlIEhUTUxJbnB1dEVs
ZW1lbnQ6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2lucHV0VHlwZS0+
dmFsdWVBc051bWJlcigpOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+dmFsdWVBc0RvdWJsZSgp
OwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNOdW1iZXIoZG91YmxlIG5l
d1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJl
aGF2aW9yKQpAQCAtOTU4LDcgKzk1OCwxNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZh
bHVlQXNOdW1iZXIoZG91YmxlIG5ld1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgVGV4dAogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IG1faW5wdXRUeXBlLT5zZXRWYWx1ZUFzTnVtYmVyKG5ld1ZhbHVlLCBldmVudEJlaGF2aW9yLCBl
Yyk7CisgICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlQXNEb3VibGUobmV3VmFsdWUsIGV2ZW50QmVo
YXZpb3IsIGVjKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzSW5wdXRO
dW1iZXIoY29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgVGV4
dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIGlmICghaXNmaW5pdGUo
bmV3VmFsdWUpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlQXNJbnB1dE51bWJlcihuZXdW
YWx1ZSwgZXZlbnRCZWhhdmlvciwgZWMpOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6
cGxhY2Vob2xkZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApp
bmRleCA5NzU2ZTRmYzQwOTcwM2VjYmYzNzdjYzAyMTVmYzFkMDA2Yjk5ZWFlLi4xYzc3MzUwOTZm
MjVlODljMTM0YzE3MGNjNTU3ZmM0YzQ4MTQ2OGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIG1heGlt
dW0oKSBjb25zdDsKICAgICAvLyBTZXRzIHRoZSAiYWxsb3dlZCB2YWx1ZSBzdGVwIiBkZWZpbmVk
IGluIHRoZSBIVE1MIHNwZWMgdG8gdGhlIHNwZWNpZmllZCBkb3VibGUgcG9pbnRlci4KICAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGlzIG5vICJhbGxvd2VkIHZhbHVlIHN0ZXAuIgotICAg
IGJvb2wgZ2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqKSBjb25zdDsKKyAgICBib29sIGdldEFs
bG93ZWRWYWx1ZVN0ZXAoSW5wdXROdW1iZXIqKSBjb25zdDsKICAgICBTdGVwUmFuZ2UgY3JlYXRl
U3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3Q7CiAKICAgICAvLyBJbXBsZW1lbnRhdGlv
bnMgb2YgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwKCkgYW5kIHN0ZXBEb3duKCkuCkBAIC0xNjcs
NiArMTY3LDcgQEAgcHVibGljOgogCiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIoKSBjb25zdDsK
ICAgICB2b2lkIHNldFZhbHVlQXNOdW1iZXIoZG91YmxlLCBFeGNlcHRpb25Db2RlJiwgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCk7CisgICAgdm9pZCBzZXRWYWx1ZUFz
SW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImLCBFeGNlcHRpb25Db2RlJiwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBw
bGFjZWhvbGRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRQbGFjZWhvbGRlcihjb25z
dCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCAwZGVmNTI5ODNjYWM0
NjQ0MGFlNzJiYTcyMTA0MTFhOTFhZjUzM2M5Li5mMTIwNjljMzU0ZWZhYjZhOGNiZGU2MGM2NDJm
ZGE5NmRiMGI2ZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC0yMDUsMTIgKzIw
NSwxNyBAQCB2b2lkIElucHV0VHlwZTo6c2V0VmFsdWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogfQogCi1kb3VibGUg
SW5wdXRUeXBlOjp2YWx1ZUFzTnVtYmVyKCkgY29uc3QKK2RvdWJsZSBJbnB1dFR5cGU6OnZhbHVl
QXNEb3VibGUoKSBjb25zdAogewogICAgIHJldHVybiBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKIH0KIAotdm9pZCBJbnB1dFR5cGU6OnNldFZhbHVlQXNOdW1iZXIoZG91Ymxl
LCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3ZvaWQg
SW5wdXRUeXBlOjpzZXRWYWx1ZUFzRG91YmxlKGRvdWJsZSBkb3VibGVWYWx1ZSwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sK
KyAgICBzZXRWYWx1ZUFzSW5wdXROdW1iZXIoY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoZG91
YmxlVmFsdWUpLCBldmVudEJlaGF2aW9yLCBlYyk7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpzZXRW
YWx1ZUFzSW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwogfQpAQCAtMjUxLDcgKzI1Niw3IEBAIGJvb2wgSW5wdXRUeXBlOjpyYW5nZVVuZGVyZmxv
dyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogICAgIGlmICghaXNTdGVwcGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZG91YmxlIG51bWVyaWNWYWx1ZSA9IHBhcnNlVG9O
dW1iZXIodmFsdWUsIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKTsKKyAgICBj
b25zdCBJbnB1dE51bWJlciBudW1lcmljVmFsdWUgPSBwYXJzZVRvTnVtYmVyT3JOYU4odmFsdWUp
OwogICAgIGlmIChpc25hbihudW1lcmljVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTI2MywxNCArMjY4LDE0IEBAIGJvb2wgSW5wdXRUeXBlOjpyYW5nZU92ZXJmbG93KGNvbnN0
IFN0cmluZyYgdmFsdWUpIGNvbnN0CiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBkb3VibGUgbnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlcih2
YWx1ZSwgbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpOworICAgIGNvbnN0IElu
cHV0TnVtYmVyIG51bWVyaWNWYWx1ZSA9IHBhcnNlVG9OdW1iZXJPck5hTih2YWx1ZSk7CiAgICAg
aWYgKGlzbmFuKG51bWVyaWNWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiBudW1lcmljVmFsdWUgPiBjcmVhdGVTdGVwUmFuZ2UoUmVqZWN0QW55KS5tYXhpbXVtKCk7
CiB9CiAKLWRvdWJsZSBJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CitJ
bnB1dE51bWJlciBJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0yOTYsNyArMzAxLDcgQEAgYm9vbCBJbnB1dFR5cGU6OmlzSW5S
YW5nZShjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogICAgIGlmICghaXNTdGVwcGFibGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZG91YmxlIG51bWVyaWNWYWx1ZSA9IHBhcnNl
VG9OdW1iZXIodmFsdWUsIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKTsKKyAg
ICBjb25zdCBJbnB1dE51bWJlciBudW1lcmljVmFsdWUgPSBwYXJzZVRvTnVtYmVyT3JOYU4odmFs
dWUpOwogICAgIGlmIChpc25hbihudW1lcmljVmFsdWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtMzA5LDcgKzMxNCw3IEBAIGJvb2wgSW5wdXRUeXBlOjppc091dE9mUmFuZ2UoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgY29uc3QKICAgICBpZiAoIWlzU3RlcHBhYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGRvdWJsZSBudW1lcmljVmFsdWUgPSBwYXJzZVRvTnVtYmVyKHZh
bHVlLCBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7CisgICAgY29uc3QgSW5w
dXROdW1iZXIgbnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlck9yTmFOKHZhbHVlKTsKICAgICBp
ZiAoaXNuYW4obnVtZXJpY1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMyMiw3
ICszMjcsNyBAQCBib29sIElucHV0VHlwZTo6c3RlcE1pc21hdGNoKGNvbnN0IFN0cmluZyYgdmFs
dWUpIGNvbnN0CiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBkb3VibGUgbnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlcih2YWx1ZSwgbnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIG51
bWVyaWNWYWx1ZSA9IHBhcnNlVG9OdW1iZXJPck5hTih2YWx1ZSk7CiAgICAgaWYgKGlzbmFuKG51
bWVyaWNWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzYwLDcgKzM2NSw3IEBA
IFN0cmluZyBJbnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKICAgICBpZiAoIWlz
U3RlcHBhYmxlKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgZG91Ymxl
IG51bWVyaWNWYWx1ZSA9IHBhcnNlVG9OdW1iZXIodmFsdWUsIG51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBudW1lcmljVmFsdWUgPSBw
YXJzZVRvTnVtYmVyT3JOYU4odmFsdWUpOwogICAgIGlmIChpc25hbihudW1lcmljVmFsdWUpKQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIApAQCAtNDUzLDEzICs0NTgsMTggQEAgdm9p
ZCBJbnB1dFR5cGU6OmRlc3Ryb3lTaGFkb3dTdWJ0cmVlKCkKICAgICB9CiB9CiAKLWRvdWJsZSBJ
bnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1
ZSkgY29uc3QKK0lucHV0TnVtYmVyIElucHV0VHlwZTo6cGFyc2VUb051bWJlcihjb25zdCBTdHJp
bmcmLCBjb25zdCBJbnB1dE51bWJlciYgZGVmYXVsdFZhbHVlKSBjb25zdAogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiB9CiAKLWRvdWJsZSBJ
bnB1dFR5cGU6OnBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmIHNy
YywgZG91YmxlIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgKmRlY2ltYWxQbGFjZXMpIGNvbnN0CitJ
bnB1dE51bWJlciBJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXJPck5hTihjb25zdCBTdHJpbmcmIHN0
cmluZykgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyc2VUb051bWJlcihzdHJpbmcsIG51bWVyaWNf
bGltaXRzPElucHV0TnVtYmVyPjo6cXVpZXRfTmFOKCkpOworfQorCitJbnB1dE51bWJlciBJbnB1
dFR5cGU6OnBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmIHNyYywg
Y29uc3QgSW5wdXROdW1iZXImIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgKmRlY2ltYWxQbGFjZXMp
IGNvbnN0CiB7CiAgICAgaWYgKGRlY2ltYWxQbGFjZXMpCiAgICAgICAgICpkZWNpbWFsUGxhY2Vz
ID0gMDsKQEAgLTQ3Miw3ICs0ODIsNyBAQCBib29sIElucHV0VHlwZTo6cGFyc2VUb0RhdGVDb21w
b25lbnRzKGNvbnN0IFN0cmluZyYsIERhdGVDb21wb25lbnRzKikgY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVN0cmluZyBJbnB1dFR5cGU6OnNlcmlhbGl6ZShkb3VibGUpIGNvbnN0CitT
dHJpbmcgSW5wdXRUeXBlOjpzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImKSBjb25zdAogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTg2OCw3
ICs4NzgsNyBAQCB1bnNpZ25lZCBJbnB1dFR5cGU6OndpZHRoKCkgY29uc3QKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBJbnB1dFR5cGU6OmFwcGx5U3RlcChkb3VibGUgY291bnQsIEFueVN0ZXBI
YW5kbGluZyBhbnlTdGVwSGFuZGxpbmcsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhh
dmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElucHV0VHlwZTo6YXBwbHlTdGVwKGludCBj
b3VudCwgQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZywgVGV4dEZpZWxkRXZlbnRCZWhh
dmlvciBldmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTdGVwUmFuZ2Ug
c3RlcFJhbmdlKGNyZWF0ZVN0ZXBSYW5nZShhbnlTdGVwSGFuZGxpbmcpKTsKICAgICBpZiAoIXN0
ZXBSYW5nZS5oYXNTdGVwKCkpIHsKQEAgLTg3NiwyMCArODg2LDIyIEBAIHZvaWQgSW5wdXRUeXBl
OjphcHBseVN0ZXAoZG91YmxlIGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5n
LCBUZXh0RmllCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBMT0dfRVJST1IoIm1pbj0l
cyBtYXg9JXMiLCBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKHN0ZXBSYW5nZS5taW5pbXVtKCkpLmFz
Y2lpKCkuZGF0YSgpLCBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKHN0ZXBSYW5nZS5tYXhpbXVtKCkp
LmFzY2lpKCkuZGF0YSgpKTsKKwogICAgIGNvbnN0IGRvdWJsZSBuYW4gPSBudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKICAgICB1bnNpZ25lZCBjdXJyZW50RGVjaW1hbFBsYWNl
czsKLSAgICBkb3VibGUgY3VycmVudCA9IHBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhl
bGVtZW50KCktPnZhbHVlKCksIG5hbiwgJmN1cnJlbnREZWNpbWFsUGxhY2VzKTsKKyAgICBjb25z
dCBJbnB1dE51bWJlciBjdXJyZW50ID0gcGFyc2VUb051bWJlcldpdGhEZWNpbWFsUGxhY2VzKGVs
ZW1lbnQoKS0+dmFsdWUoKSwgbmFuLCAmY3VycmVudERlY2ltYWxQbGFjZXMpOwogICAgIGlmICgh
aXNmaW5pdGUoY3VycmVudCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkb3VibGUgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3Rl
cFJhbmdlLnN0ZXAoKSAqIGNvdW50OworICAgIElucHV0TnVtYmVyIG5ld1ZhbHVlID0gY3VycmVu
dCArIHN0ZXBSYW5nZS5zdGVwKCkgKiBjb3VudDsKICAgICBpZiAoaXNpbmYobmV3VmFsdWUpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBkb3VibGUgYWNjZXB0YWJsZUVycm9yVmFsdWUgPSBzdGVwUmFuZ2UuYWNjZXB0YWJs
ZUVycm9yKCk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgYWNjZXB0YWJsZUVycm9yVmFsdWUgPSBz
dGVwUmFuZ2UuYWNjZXB0YWJsZUVycm9yKCk7CiAgICAgaWYgKG5ld1ZhbHVlIC0gc3RlcFJhbmdl
Lm1pbmltdW0oKSA8IC1hY2NlcHRhYmxlRXJyb3JWYWx1ZSkgewogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CkBAIC05MDgsMTMgKzkyMCwxMyBAQCB2b2lk
IElucHV0VHlwZTo6YXBwbHlTdGVwKGRvdWJsZSBjb3VudCwgQW55U3RlcEhhbmRsaW5nIGFueVN0
ZXBIYW5kbGluZywgVGV4dEZpZQogICAgIGlmIChuZXdWYWx1ZSA+IHN0ZXBSYW5nZS5tYXhpbXVt
KCkpCiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLm1heGltdW0oKTsKIAotICAgIGVsZW1l
bnQoKS0+c2V0VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMsIGV2ZW50QmVoYXZpb3IpOworICAg
IGVsZW1lbnQoKS0+c2V0VmFsdWVBc0lucHV0TnVtYmVyKG5ld1ZhbHVlLCBlYywgZXZlbnRCZWhh
dmlvcik7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkK
ICAgICAgICAgIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90
aWZpY2F0aW9uKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNo
YW5nZWQsIHRydWUpOwogfQogCi1ib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcChk
b3VibGUqIHN0ZXApIGNvbnN0Citib29sIElucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcChJ
bnB1dE51bWJlciogc3RlcCkgY29uc3QKIHsKICAgICBTdGVwUmFuZ2Ugc3RlcFJhbmdlKGNyZWF0
ZVN0ZXBSYW5nZShSZWplY3RBbnkpKTsKICAgICAqc3RlcCA9IHN0ZXBSYW5nZS5zdGVwKCk7CkBA
IC05ODcsNyArOTk5LDcgQEAgdm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQg
bikKICAgICBpZiAoIXN0ZXBSYW5nZS5oYXNTdGVwKCkpCiAgICAgICByZXR1cm47CiAKLSAgICBk
b3VibGUgc3RlcCA9IHN0ZXBSYW5nZS5zdGVwKCk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgc3Rl
cCA9IHN0ZXBSYW5nZS5zdGVwKCk7CiAKICAgICBpbnQgc2lnbjsKICAgICBpZiAoc3RlcCA+IDAp
CkBAIC05OTcsMjkgKzEwMDksMjkgQEAgdm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJl
cihpbnQgbikKICAgICBlbHNlCiAgICAgICAgIHNpZ24gPSAwOwogCi0gICAgY29uc3QgZG91Ymxl
IG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogICAgIFN0cmluZyBj
dXJyZW50U3RyaW5nVmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7Ci0gICAgZG91YmxlIGN1cnJl
bnQgPSBwYXJzZVRvTnVtYmVyKGN1cnJlbnRTdHJpbmdWYWx1ZSwgbmFuKTsKKyAgICBJbnB1dE51
bWJlciBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGN1cnJlbnRTdHJpbmdWYWx1ZSk7CiAg
ICAgaWYgKCFpc2Zpbml0ZShjdXJyZW50KSkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwog
ICAgICAgICBjdXJyZW50ID0gZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCk7Ci0gICAgICAgIGRvdWJs
ZSBuZXh0RGlmZiA9IHN0ZXAgKiBuOworICAgICAgICBjb25zdCBJbnB1dE51bWJlciBuZXh0RGlm
ZiA9IHN0ZXAgKiBuOwogICAgICAgICBpZiAoY3VycmVudCA8IHN0ZXBSYW5nZS5taW5pbXVtKCkg
LSBuZXh0RGlmZikKICAgICAgICAgICAgIGN1cnJlbnQgPSBzdGVwUmFuZ2UubWluaW11bSgpIC0g
bmV4dERpZmY7CiAgICAgICAgIGlmIChjdXJyZW50ID4gc3RlcFJhbmdlLm1heGltdW0oKSAtIG5l
eHREaWZmKQogICAgICAgICAgICAgY3VycmVudCA9IHN0ZXBSYW5nZS5tYXhpbXVtKCkgLSBuZXh0
RGlmZjsKLSAgICAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUFzTnVtYmVyKGN1cnJlbnQsIGVjLCBE
aXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgICAgICBlbGVtZW50KCktPnNldFZhbHVl
QXNJbnB1dE51bWJlcihjdXJyZW50LCBlYywgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsK
ICAgICB9Ci0gICAgaWYgKChzaWduID4gMCAmJiBjdXJyZW50IDwgc3RlcFJhbmdlLm1pbmltdW0o
KSkgfHwgKHNpZ24gPCAwICYmIGN1cnJlbnQgPiBzdGVwUmFuZ2UubWF4aW11bSgpKSkKLSAgICAg
ICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemUoc2lnbiA+IDAgPyBzdGVwUmFuZ2UubWlu
aW11bSgpIDogc3RlcFJhbmdlLm1heGltdW0oKSksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVu
dCk7Ci0gICAgZWxzZSB7CisgICAgaWYgKChzaWduID4gMCAmJiBjdXJyZW50IDwgc3RlcFJhbmdl
Lm1pbmltdW0oKSkgfHwgKHNpZ24gPCAwICYmIGN1cnJlbnQgPiBzdGVwUmFuZ2UubWF4aW11bSgp
KSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBlbGVtZW50KCktPnNldFZh
bHVlQXNJbnB1dE51bWJlcihzaWduID4gMCA/IHN0ZXBSYW5nZS5taW5pbXVtKCkgOiBzdGVwUmFu
Z2UubWF4aW11bSgpLCBlYywgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICB9IGVs
c2UgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBpZiAoc3RlcE1pc21hdGNo
KGVsZW1lbnQoKS0+dmFsdWUoKSkpIHsKICAgICAgICAgICAgIEFTU0VSVChzdGVwKTsKLSAgICAg
ICAgICAgIGRvdWJsZSBuZXdWYWx1ZTsKLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygx
MC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChzdGVwUmFuZ2Uuc3RlcERlY2ltYWxQbGFjZXMo
KSwgc3RlcFJhbmdlLnN0ZXBCYXNlRGVjaW1hbFBsYWNlcygpKSkpOwotICAgICAgICAgICAgZG91
YmxlIGJhc2UgPSBzdGVwUmFuZ2Uuc3RlcEJhc2UoKTsKKyAgICAgICAgICAgIGNvbnN0IElucHV0
TnVtYmVyIHNjYWxlID0gcG93KDEwLjAsIHN0YXRpY19jYXN0PElucHV0TnVtYmVyPihtYXgoc3Rl
cFJhbmdlLnN0ZXBEZWNpbWFsUGxhY2VzKCksIHN0ZXBSYW5nZS5zdGVwQmFzZURlY2ltYWxQbGFj
ZXMoKSkpKTsKKyAgICAgICAgICAgIGNvbnN0IElucHV0TnVtYmVyIGJhc2UgPSBzdGVwUmFuZ2Uu
c3RlcEJhc2UoKTsKIAorICAgICAgICAgICAgSW5wdXROdW1iZXIgbmV3VmFsdWU7CiAgICAgICAg
ICAgICBpZiAoc2lnbiA8IDApCiAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSByb3VuZCgoYmFz
ZSArIGZsb29yKChjdXJyZW50IC0gYmFzZSkgLyBzdGVwKSAqIHN0ZXApICogc2NhbGUpIC8gc2Nh
bGU7CiAgICAgICAgICAgICBlbHNlIGlmIChzaWduID4gMCkKQEAgLTEwMzIsOCArMTA0NCw3IEBA
IHZvaWQgSW5wdXRUeXBlOjpzdGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiAgICAgICAgICAgICBp
ZiAobmV3VmFsdWUgPiBzdGVwUmFuZ2UubWF4aW11bSgpKQogICAgICAgICAgICAgICAgIG5ld1Zh
bHVlID0gc3RlcFJhbmdlLm1heGltdW0oKTsKIAotICAgICAgICAgICAgZWxlbWVudCgpLT5zZXRW
YWx1ZUFzTnVtYmVyKG5ld1ZhbHVlLCBlYywgbiA9PSAxIHx8IG4gPT0gLTEgPyBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQgOiBEaXNwYXRjaE5vRXZlbnQpOwotICAgICAgICAgICAgY3VycmVu
dCA9IG5ld1ZhbHVlOworICAgICAgICAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUFzSW5wdXROdW1i
ZXIobmV3VmFsdWUsIGVjLCBuID09IDEgfHwgbiA9PSAtMSA/IERpc3BhdGNoSW5wdXRBbmRDaGFu
Z2VFdmVudCA6IERpc3BhdGNoTm9FdmVudCk7CiAgICAgICAgICAgICBpZiAobiA+IDEpCiAgICAg
ICAgICAgICAgICAgYXBwbHlTdGVwKG4gLSAxLCBBbnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQsIGVjKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAtMSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0lucHV0VHlwZS5oCmluZGV4IDcwNGIyMzc1ZTc0ODI2MDI5NzFmM2Y5YjBkYjU2YmQ1
ZGRjYjhmNGQuLjc2ZWJkNDg2NDc4M2M0Y2UzZTEwOGU5Mzg5MDYyMzY2MDQxMWMwNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuaApAQCAtMTM3LDggKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFN0cmluZyBkZWZhdWx0VmFsdWUoKSBjb25zdDsgLy8gQ2hlY2tlZCBhZnRlciBldmVuIGZh
bGxiYWNrVmFsdWUsIG9ubHkgd2hlbiB0aGUgdmFsdWVXaXRoRGVmYXVsdCBmdW5jdGlvbiBpcyBj
YWxsZWQuCiAgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc051bWJlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzTnVtYmVyKGRvdWJsZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RvdWJsZShkb3VibGUsIFRleHRGaWVsZEV2
ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVBc0lucHV0TnVtYmVyKGNvbnN0IElucHV0TnVtYmVyJiwgVGV4dEZpZWxkRXZlbnRCZWhh
dmlvciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgLy8gVmFsaWRhdGlvbiBmdW5jdGlv
bnMKICAgICB2aXJ0dWFsIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwpAQCAtMTU1
LDEyICsxNTYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgcmFuZ2VPdmVyZmxvdyhjb25zdCBTdHJp
bmcmKSBjb25zdDsKICAgICBib29sIGlzSW5SYW5nZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAg
ICBib29sIGlzT3V0T2ZSYW5nZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGRv
dWJsZSBkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIElucHV0TnVt
YmVyIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0OwogICAgIGRvdWJsZSBtaW5pbXVtKCkg
Y29uc3Q7CiAgICAgZG91YmxlIG1heGltdW0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2l6
ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uKGludCBkZWZhdWx0U2l6ZSwgaW50JiBwcmVmZXJyZWRT
aXplKSBjb25zdDsKICAgICBib29sIHN0ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0QWxsb3dlZFZhbHVlU3RlcChJbnB1dE51bWJlciopIGNvbnN0Owog
ICAgIHZpcnR1YWwgU3RlcFJhbmdlIGNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoaW50LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCB2b2lkIHN0ZXBVcEZyb21SZW5kZXJlcihpbnQpOwpAQCAtMjYwLDE1ICsyNjEsMTUg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRlZmF1bHRUb29sVGlwKCkgY29uc3Q7CiAK
ICAgICAvLyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBlLCBhbmQgcmV0
dXJuCi0gICAgLy8gdGhlIGRvdWJsZSB2YWx1ZSBmb3IgdGhlIHBhcnNpbmcgcmVzdWx0IGlmIHRo
ZSBwYXJzaW5nCisgICAgLy8gdGhlIElucHV0TnVtYmVyIHZhbHVlIGZvciB0aGUgcGFyc2luZyBy
ZXN1bHQgaWYgdGhlIHBhcnNpbmcKICAgICAvLyBzdWNjZWVkczsgUmV0dXJucyBkZWZhdWx0VmFs
dWUgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0aW9uIGNhbgogICAgIC8vIHJldHVybiBOYU4gb3IgSW5m
aW5pdHkgb25seSBpZiBkZWZhdWx0VmFsdWUgaXMgTmFOIG9yIEluZmluaXR5LgotICAgIHZpcnR1
YWwgZG91YmxlIHBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0
cmluZyYsIGNvbnN0IElucHV0TnVtYmVyJiBkZWZhdWx0VmFsdWUpIGNvbnN0OwogCi0gICAgLy8g
UGFyc2VzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGZvciB0aGUgdHlwZSBhcyBwYXJzZVRvRG91Ymxl
KCkgZG9lcy4KKyAgICAvLyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBl
IGFzIHBhcnNlVG9OdW1iZXIoKSBkb2VzLgogICAgIC8vIEluIGFkZGl0aW9uLCBpdCBzdG9yZXMg
dGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQKICAgICAvLyBpbnRv
ICpkZWNpbWFsUGxhY2VzLgotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9OdW1iZXJXaXRoRGVj
aW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmLCBkb3VibGUgZGVmYXVsdFZhbHVlLCB1bnNpZ25lZCog
ZGVjaW1hbFBsYWNlcykgY29uc3Q7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVt
YmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgSW5wdXROdW1iZXImIGRl
ZmF1bHRWYWx1ZSwgdW5zaWduZWQqIGRlY2ltYWxQbGFjZXMpIGNvbnN0OwogCiAgICAgLy8gUGFy
c2VzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGZvciB0aGlzIElucHV0VHlwZSwgYW5kIHJldHVybnMg
dHJ1ZSBpZiBpdAogICAgIC8vIGlzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuIEFuIGluc3RhbmNlIHBv
aW50ZWQgYnkgdGhlIERhdGVDb21wb25lbnRzKgpAQCAtMjc2LDEwICsyNzcsMTAgQEAgcHVibGlj
OgogICAgIC8vIGZhaWxzLiBUaGUgRGF0ZUNvbXBvbmVudHMqIHBhcmFtZXRlciBtYXkgYmUgMC4K
ICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzKGNvbnN0IFN0cmluZyYsIERh
dGVDb21wb25lbnRzKikgY29uc3Q7CiAKLSAgICAvLyBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgdGhlIHNwZWNpZmllZCBkb3VibGUgdmFsdWUgZm9yIHRoZQorICAgIC8vIENyZWF0
ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIElucHV0TnVtYmVyIHZh
bHVlIGZvciB0aGUKICAgICAvLyBpbnB1dCB0eXBlLiBJZiBOYU4gb3IgSW5maW5pdHkgaXMgc3Bl
Y2lmaWVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkKICAgICAvLyBzdHJpbmcuIFRoaXMgc2hvdWxk
IG5vdCBiZSBjYWxsZWQgZm9yIHR5cGVzIHdpdGhvdXQgdmFsdWVBc051bWJlci4KLSAgICB2aXJ0
dWFsIFN0cmluZyBzZXJpYWxpemUoZG91YmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBz
ZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0luZGV0ZXJtaW5hdGVBcHBlYXJhbmNlKCkgY29uc3Q7CiAKQEAgLTI5MywxMCArMjk0
LDExIEBAIHByb3RlY3RlZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZB
Y3RpdmUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogICAgIENocm9tZSogY2hyb21lKCkgY29uc3Q7
CisgICAgSW5wdXROdW1iZXIgcGFyc2VUb051bWJlck9yTmFOKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gQWRk
cyBzdGVwIHZhbHVlICogY291bnQgdG8gdGhlIGN1cnJlbnQgdmFsdWUuCi0gICAgdm9pZCBhcHBs
eVN0ZXAoZG91YmxlIGNvdW50LCBBbnlTdGVwSGFuZGxpbmcsIFRleHRGaWVsZEV2ZW50QmVoYXZp
b3IsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFwcGx5U3RlcChpbnQgY291bnQsIEFueVN0
ZXBIYW5kbGluZywgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgLy8gUmF3IHBvaW50ZXIgYmVjYXVzZSB0aGUgSFRNTElucHV0RWxlbWVudCBvYmplY3Qgb3du
cyB0aGlzIElucHV0VHlwZSBvYmplY3QuCiAgICAgSFRNTElucHV0RWxlbWVudCogbV9lbGVtZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAppbmRleCBmYTM1NjYyNjY4NDg3
ZWZjMWQxZmVjNGNlY2NhYWVmNTQ0NjRjOThmLi5iZGE5OTc3NDFkYTRhNzVhMWI2ODEyYWM5OWVk
YjY0ZmEwYjNmYTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcApAQCAt
NzQsNyArNzQsNyBAQCBkb3VibGUgTW9udGhJbnB1dFR5cGU6OnZhbHVlQXNEYXRlKCkgY29uc3QK
ICAgICByZXR1cm4gbXNlYzsKIH0KIAotU3RyaW5nIE1vbnRoSW5wdXRUeXBlOjpzZXJpYWxpemVX
aXRoTWlsbGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkgY29uc3QKK1N0cmluZyBNb250aElucHV0VHlw
ZTo6c2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyhjb25zdCBJbnB1dE51bWJlciYgdmFsdWUpIGNv
bnN0CiB7CiAgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKICAgICBpZiAoIWRhdGUuc2V0TWlsbGlz
ZWNvbmRzU2luY2VFcG9jaEZvck1vbnRoKHZhbHVlKSkKQEAgLTgyLDcgKzgyLDcgQEAgU3RyaW5n
IE1vbnRoSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkg
Y29uc3QKICAgICByZXR1cm4gc2VyaWFsaXplV2l0aENvbXBvbmVudHMoZGF0ZSk7CiB9CiAKLWRv
dWJsZSBNb250aElucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKK0lucHV0
TnVtYmVyIE1vbnRoSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAogewog
ICAgIGRvdWJsZSBjdXJyZW50ID0gY3VycmVudFRpbWVNUygpOwogICAgIGRvdWJsZSB1dGNPZmZz
ZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKQEAgLTEwMSwxNCArMTAxLDE0IEBAIFN0ZXBSYW5n
ZSBNb250aElucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVw
SGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFu
Z2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAobW9udGhEZWZhdWx0U3RlcCwg
bW9udGhEZWZhdWx0U3RlcEJhc2UsIG1vbnRoU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBh
cnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgZG91YmxlIHN0ZXBCYXNlID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERhdGVD
b21wb25lbnRzOjptaW5pbXVtTW9udGgoKSk7Ci0gICAgZG91YmxlIG1pbmltdW0gPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1Nb250aCgpKTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEYXRlQ29tcG9uZW50czo6bWF4
aW11bU1vbnRoKCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIGNvbnZlcnREb3VibGVU
b0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptaW5pbXVtTW9udGgoKSkpOworICAgIGNvbnN0
IElucHV0TnVtYmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0
dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1Nb250aCgpKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWF4aW11bSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBjb252ZXJ0
RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWF4aW11bU1vbnRoKCkpKTsKICAg
ICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5nIHN0ZXAgPSBTdGVw
UmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVu
dCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShz
dGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0KIAot
ZG91YmxlIE1vbnRoSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc3JjLCBk
b3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorSW5wdXROdW1iZXIgTW9udGhJbnB1dFR5cGU6OnBh
cnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBzcmMsIGNvbnN0IElucHV0TnVtYmVyJiBkZWZhdWx0
VmFsdWUpIGNvbnN0CiB7CiAgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKICAgICBpZiAoIXBhcnNl
VG9EYXRlQ29tcG9uZW50cyhzcmMsICZkYXRlKSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBib29sIE1v
bnRoSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaQogICAgIHJldHVybiBvdXQtPnBhcnNlTW9udGgoY2hhcmFjdGVycywg
bGVuZ3RoLCAwLCBlbmQpICYmIGVuZCA9PSBsZW5ndGg7CiB9CiAKLWJvb2wgTW9udGhJbnB1dFR5
cGU6OnNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUgdmFsdWUsIERhdGVDb21w
b25lbnRzKiBkYXRlKSBjb25zdAorYm9vbCBNb250aElucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRU
b0RhdGVDb21wb25lbnRzKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMq
IGRhdGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGRhdGUpOwogICAgIHJldHVybiBkYXRlLT5zZXRN
b250aHNTaW5jZUVwb2NoKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TW9udGhJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUuaApp
bmRleCA1ZTBjM2JhZTQ0ZGExMzM4NWQ0MDM0MzhjZTllYjQwYTFjMWE2MTE0Li43N2Y3NDI5NDVi
MDU0YWEyYjgyYjM5OWUwZmNmNDhiNTZhNzBkNGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL01vbnRoSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElu
cHV0VHlwZS5oCkBAIC00NiwxMiArNDYsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgZG91YmxlIHZhbHVlQXNEYXRlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBTdHJpbmcgc2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyhkb3VibGUpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgZG91Ymxl
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0VmFsdWVGb3JTdGVw
VXAoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemVXaXRoTWls
bGlzZWNvbmRzKGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IElucHV0TnVt
YmVyJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBkZWZhdWx0VmFs
dWVGb3JTdGVwVXAoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0ZXBSYW5nZSBjcmVh
dGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRz
KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRl
Q29tcG9uZW50cyhjb25zdCBJbnB1dE51bWJlciYsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzTW9udGhGaWVsZCgpIGNvbnN0IE9WRVJSSURFOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCmluZGV4IGQ1M2U1ZDI1
NDRkM2ZiM2JhYzFjMjAxZDVmMzYwN2Q4MWNiMjI2ZWMuLjdlYWNkZGJjOTk3OTlhZjNlZDUyMDkz
NjM4ZTRjNzQ2NzViY2FlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVy
SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5j
cHAKQEAgLTc5LDEyICs3OSwxMiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE51bWJlcklucHV0VHlw
ZTo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6Om51
bWJlcigpOwogfQogCi1kb3VibGUgTnVtYmVySW5wdXRUeXBlOjp2YWx1ZUFzTnVtYmVyKCkgY29u
c3QKK2RvdWJsZSBOdW1iZXJJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBjb25zdAogewotICAg
IHJldHVybiBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+dmFsdWUoKSwgbnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCkpOworICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVy
VHlwZShlbGVtZW50KCktPnZhbHVlKCkpOwogfQogCi12b2lkIE51bWJlcklucHV0VHlwZTo6c2V0
VmFsdWVBc051bWJlcihkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit2b2lkIE51bWJlcklucHV0VHlw
ZTo6c2V0VmFsdWVBc0RvdWJsZShkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZp
b3IgZXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgaWYgKG5l
d1ZhbHVlIDwgLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKQEAgLTk0LDcgKzk0LDIxIEBAIHZvaWQgTnVtYmVySW5wdXRUeXBl
OjpzZXRWYWx1ZUFzTnVtYmVyKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciBlCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemUobmV3VmFsdWUpLCBldmVudEJl
aGF2aW9yKTsKKyAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZUZvck51bWJlclR5cGUo
bmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBOdW1iZXJJbnB1dFR5cGU6OnNl
dFZhbHVlQXNJbnB1dE51bWJlcihjb25zdCBJbnB1dE51bWJlciYgbmV3VmFsdWUsIFRleHRGaWVs
ZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7
CisgICAgY29uc3QgSW5wdXROdW1iZXIgZmxvYXRNYXggPSBjb252ZXJ0RG91YmxlVG9JbnB1dE51
bWJlcihudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKKyAgICBpZiAobmV3VmFsdWUgPCAt
ZmxvYXRNYXgpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAobmV3VmFsdWUgPiBmbG9hdE1heCkgeworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsZW1lbnQo
KS0+c2V0VmFsdWUoc2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZp
b3IpOwogfQogCiBib29sIE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbnN0IFN0
cmluZyYgdmFsdWUpIGNvbnN0CkBAIC0xMTMsMTAgKzEyNywxMSBAQCBTdGVwUmFuZ2UgTnVtYmVy
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGlu
ZykgY29ucwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVz
Y3JpcHRpb24sIHN0ZXBEZXNjcmlwdGlvbiwgKG51bWJlckRlZmF1bHRTdGVwLCBudW1iZXJEZWZh
dWx0U3RlcEJhc2UsIG51bWJlclN0ZXBTY2FsZUZhY3RvcikpOwogCiAgICAgdW5zaWduZWQgc3Rl
cEJhc2VEZWNpbWFsUGxhY2VzOwotICAgIGRvdWJsZSBzdGVwQmFzZVZhbHVlID0gcGFyc2VUb051
bWJlcldpdGhEZWNpbWFsUGxhY2VzKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRy
KSwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNlLCAmc3RlcEJhc2VEZWNpbWFsUGxhY2VzKTsKKyAgICBj
b25zdCBJbnB1dE51bWJlciBzdGVwQmFzZVZhbHVlID0gcGFyc2VUb051bWJlcldpdGhEZWNpbWFs
UGxhY2VzKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgbnVtYmVyRGVmYXVs
dFN0ZXBCYXNlLCAmc3RlcEJhc2VEZWNpbWFsUGxhY2VzKTsKICAgICBTdGVwUmFuZ2U6Ok51bWJl
cldpdGhEZWNpbWFsUGxhY2VzIHN0ZXBCYXNlKHN0ZXBCYXNlVmFsdWUsIG1pbihzdGVwQmFzZURl
Y2ltYWxQbGFjZXMsIDE2dSkpOwotICAgIGRvdWJsZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihl
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIC1udW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpKTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgp
LT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgp
KTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBmbG9hdE1heCA9IGNvbnZlcnREb3VibGVUb0lucHV0
TnVtYmVyKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOworICAgIGNvbnN0IElucHV0TnVt
YmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZSht
aW5BdHRyKSwgLWZsb2F0TWF4KTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtYXhpbXVtID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIGZsb2F0TWF4
KTsKIAogICAgIFN0ZXBSYW5nZTo6TnVtYmVyV2l0aERlY2ltYWxQbGFjZXNPck1pc3Npbmcgc3Rl
cCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9u
LCBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3Rl
cFJhbmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24p
OwpAQCAtMTg2LDE3ICsyMDEsMTcgQEAgdm9pZCBOdW1iZXJJbnB1dFR5cGU6OmhhbmRsZVdoZWVs
RXZlbnQoV2hlZWxFdmVudCogZXZlbnQpCiAgICAgaGFuZGxlV2hlZWxFdmVudEZvclNwaW5CdXR0
b24oZXZlbnQpOwogfQogCi1kb3VibGUgTnVtYmVySW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNv
bnN0IFN0cmluZyYgc3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorSW5wdXROdW1iZXIg
TnVtYmVySW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc3JjLCBjb25zdCBJ
bnB1dE51bWJlciYgZGVmYXVsdFZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBwYXJzZVRvRG91
YmxlRm9yTnVtYmVyVHlwZShzcmMsIGRlZmF1bHRWYWx1ZSk7CiB9CiAKLWRvdWJsZSBOdW1iZXJJ
bnB1dFR5cGU6OnBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhjb25zdCBTdHJpbmcmIHNy
YywgZG91YmxlIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgKmRlY2ltYWxQbGFjZXMpIGNvbnN0CitJ
bnB1dE51bWJlciBOdW1iZXJJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNl
cyhjb25zdCBTdHJpbmcmIHNyYywgY29uc3QgSW5wdXROdW1iZXImIGRlZmF1bHRWYWx1ZSwgdW5z
aWduZWQgKmRlY2ltYWxQbGFjZXMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVG
b3JOdW1iZXJUeXBlV2l0aERlY2ltYWxQbGFjZXMoc3JjLCBkZWNpbWFsUGxhY2VzLCBkZWZhdWx0
VmFsdWUpOwogfQogCi1TdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzZXJpYWxpemUoZG91YmxlIHZh
bHVlKSBjb25zdAorU3RyaW5nIE51bWJlcklucHV0VHlwZTo6c2VyaWFsaXplKGNvbnN0IElucHV0
TnVtYmVyJiB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1i
ZXJJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmgKaW5k
ZXggODc3YmNiNDU2YzAxYzhkZDk1MWQ4MWQ0OTI1MTBlNDNjMTliN2YyMS4uYWRhZTFkMjYxZjZl
MjZiZWYzNzFkMWQxY2UyMzFkMmVkMTRhYTJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9OdW1iZXJJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklu
cHV0VHlwZS5oCkBAIC00Miw4ICs0Miw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTnVtYmVy
SW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBl
KGVsZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJv
bFR5cGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzTnVtYmVy
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNOdW1iZXIoZG91
YmxlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJikgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RvdWJsZSgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRG91YmxlKGRvdWJsZSwgVGV4dEZpZWxkRXZlbnRC
ZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzSW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImLCBUZXh0RmllbGRFdmVu
dEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBi
b29sIHR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgdHlwZU1pc21hdGNoKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBi
b29sIHNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihpbnQgZGVmYXVsdFNpemUsIGludCYgcHJl
ZmVycmVkU2l6ZSkgY29uc3QgT1ZFUlJJREU7CkBAIC01MSw5ICs1Miw5IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBTdGVwUmFuZ2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hl
ZWxFdmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9OdW1iZXIoY29u
c3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBw
YXJzZVRvTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1bnNp
Z25lZCopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3Vi
bGUpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgSW5wdXROdW1iZXIgcGFyc2VUb051bWJl
cihjb25zdCBTdHJpbmcmLCBjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgSW5wdXROdW1iZXIgcGFyc2VUb051bWJlcldpdGhEZWNpbWFsUGxhY2VzKGNvbnN0
IFN0cmluZyYsIGNvbnN0IElucHV0TnVtYmVyJiwgdW5zaWduZWQqKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImKSBjb25zdCBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKaW5kZXggMWVlNjhiYTUyNjc2NGQx
OTYxM2Q4N2Y4YTY0NWViMDZmNDRkZjY5YS4uOTc2MTBiYzhjZDUzZjVlYWNiZjA0Nzk0OWJjN2Yz
YzRiNGU0ZTAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlw
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTYw
LDcgKzYwLDcgQEAgc3RhdGljIGNvbnN0IGludCByYW5nZURlZmF1bHRTdGVwID0gMTsKIHN0YXRp
YyBjb25zdCBpbnQgcmFuZ2VEZWZhdWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNvbnN0IGludCBy
YW5nZVN0ZXBTY2FsZUZhY3RvciA9IDE7CiAKLXN0YXRpYyBkb3VibGUgZW5zdXJlTWF4aW11bShk
b3VibGUgcHJvcG9zZWRWYWx1ZSwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBmYWxsYmFja1ZhbHVl
KQorc3RhdGljIElucHV0TnVtYmVyIGVuc3VyZU1heGltdW0oY29uc3QgSW5wdXROdW1iZXImIHBy
b3Bvc2VkVmFsdWUsIGNvbnN0IElucHV0TnVtYmVyJiBtaW5pbXVtLCBjb25zdCBJbnB1dE51bWJl
ciYgZmFsbGJhY2tWYWx1ZSkKIHsKICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZSA+PSBtaW5pbXVt
ID8gcHJvcG9zZWRWYWx1ZSA6IHN0ZDo6bWF4KG1pbmltdW0sIGZhbGxiYWNrVmFsdWUpOwogfQpA
QCAtODAsMTIgKzgwLDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmFuZ2VJbnB1dFR5cGU6OmZv
cm1Db250cm9sVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpyYW5nZSgp
OwogfQogCi1kb3VibGUgUmFuZ2VJbnB1dFR5cGU6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAorZG91
YmxlIFJhbmdlSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPnZhbHVlKCksIG51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpKTsKKyAgICByZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZWxl
bWVudCgpLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWVBc051
bWJlcihkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlv
ciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Cit2b2lkIFJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFz
SW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJl
aGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewogICAgIGVsZW1l
bnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiB9CkBA
IC05OSw4ICs5OSw4IEBAIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdl
KEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0
aW9uLCAocmFuZ2VEZWZhdWx0U3RlcCwgcmFuZ2VEZWZhdWx0U3RlcEJhc2UsIHJhbmdlU3RlcFNj
YWxlRmFjdG9yKSk7CiAKLSAgICBkb3VibGUgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVu
dCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCByYW5nZURlZmF1bHRNaW5pbXVtKTsKLSAg
ICBkb3VibGUgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIHJhbmdlRGVmYXVsdE1heGltdW0pLCBtaW5pbXVt
LCByYW5nZURlZmF1bHRNYXhpbXVtKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIHJhbmdl
RGVmYXVsdE1pbmltdW0pOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0gPSBlbnN1cmVN
YXhpbXVtKHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIp
LCByYW5nZURlZmF1bHRNYXhpbXVtKSwgbWluaW11bSwgcmFuZ2VEZWZhdWx0TWF4aW11bSk7CiAK
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lvblZhbHVlID0gZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOwogICAgIGlmICghcHJlY2lzaW9uVmFsdWUuaXNO
dWxsKCkpIHsKQEAgLTE0MSwyNSArMTQxLDE2IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRs
ZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIAogICAgIGNvbnN0IFN0cmluZyYg
a2V5ID0gZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKIAotICAgIGRvdWJsZSBjdXJyZW50ID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPnZhbHVlKCksIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBjdXJyZW50ID0gcGFyc2VUb051bWJl
ck9yTmFOKGVsZW1lbnQoKS0+dmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzZmluaXRlKGN1cnJlbnQp
KTsKIAogICAgIFN0ZXBSYW5nZSBzdGVwUmFuZ2UoY3JlYXRlU3RlcFJhbmdlKFJlamVjdEFueSkp
OwogCi0gICAgZG91YmxlIHN0ZXAsIGJpZ1N0ZXA7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0ciksICJhbnkiKSkgewotICAgICAg
ICAvLyBGSVhNRTogV2UgY2FuJ3QgdXNlIHN0ZXBVcCgpIGZvciB0aGUgc3RlcCB2YWx1ZSAiYW55
Ii4gU28sIHdlIGluY3JlYXNlCi0gICAgICAgIC8vIG9yIGRlY3JlYXNlIHRoZSB2YWx1ZSBieSAx
LzEwMCBvZiB0aGUgdmFsdWUgcmFuZ2UuIElzIGl0IHJlYXNvbmFibGU/Ci0gICAgICAgIHN0ZXAg
PSAoc3RlcFJhbmdlLm1heGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwOwotICAg
ICAgICBiaWdTdGVwID0gc3RlcCAqIDEwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZWxl
bWVudCgpLT5nZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotCi0gICAgICAgIGJpZ1N0ZXAgPSAoc3RlcFJhbmdlLm1heGltdW0oKSAt
IHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTA7Ci0gICAgICAgIGlmIChiaWdTdGVwIDwgc3RlcCkK
LSAgICAgICAgICAgIGJpZ1N0ZXAgPSBzdGVwOwotICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBj
YW4ndCB1c2Ugc3RlcFVwKCkgZm9yIHRoZSBzdGVwIHZhbHVlICJhbnkiLiBTbywgd2UgaW5jcmVh
c2UKKyAgICAvLyBvciBkZWNyZWFzZSB0aGUgdmFsdWUgYnkgMS8xMDAgb2YgdGhlIHZhbHVlIHJh
bmdlLiBJcyBpdCByZWFzb25hYmxlPworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXAgPSBlcXVh
bElnbm9yaW5nQ2FzZShlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLCAiYW55
IikgPyAoc3RlcFJhbmdlLm1heGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwIDog
c3RlcFJhbmdlLnN0ZXAoKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBiaWdTdGVwID0gbWF4KChz
dGVwUmFuZ2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMCwgc3RlcCk7CiAK
ICAgICBib29sIGlzVmVydGljYWwgPSBmYWxzZTsKICAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJl
cigpKSB7CkBAIC0xNjcsNyArMTU4LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlS2V5
ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBpc1ZlcnRpY2FsID0gcGFy
dCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ7
CiAgICAgfQogCi0gICAgZG91YmxlIG5ld1ZhbHVlOworICAgIElucHV0TnVtYmVyIG5ld1ZhbHVl
OwogICAgIGlmIChrZXkgPT0gIlVwIikKICAgICAgICAgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3Rl
cDsKICAgICBlbHNlIGlmIChrZXkgPT0gIkRvd24iKQpAQCAtMTkyLDcgKzE4Myw3IEBAIHZvaWQg
UmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
ICAgICBpZiAobmV3VmFsdWUgIT0gY3VycmVudCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVj
OwogICAgICAgICBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IgPSBEaXNwYXRj
aENoYW5nZUV2ZW50OwotICAgICAgICBzZXRWYWx1ZUFzTnVtYmVyKG5ld1ZhbHVlLCBldmVudEJl
aGF2aW9yLCBlYyk7CisgICAgICAgIHNldFZhbHVlQXNJbnB1dE51bWJlcihuZXdWYWx1ZSwgZXZl
bnRCZWhhdmlvciwgZWMpOwogCiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQogICAgICAgICAgICAgZWxlbWVudCgpLT5kb2N1bWVudCgpLT5heE9iamVj
dENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24oZWxlbWVudCgpLT5yZW5kZXJlcigpLCBBWE9iamVj
dENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CkBAIC0yMjIsMTIgKzIxMywxMiBAQCBSZW5k
ZXJPYmplY3QqIFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKikgYwogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXIo
ZWxlbWVudCgpKTsKIH0KIAotZG91YmxlIFJhbmdlSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNv
bnN0IFN0cmluZyYgc3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorSW5wdXROdW1iZXIg
UmFuZ2VJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBzcmMsIGNvbnN0IElu
cHV0TnVtYmVyJiBkZWZhdWx0VmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcnNlVG9Eb3Vi
bGVGb3JOdW1iZXJUeXBlKHNyYywgZGVmYXVsdFZhbHVlKTsKIH0KIAotU3RyaW5nIFJhbmdlSW5w
dXRUeXBlOjpzZXJpYWxpemUoZG91YmxlIHZhbHVlKSBjb25zdAorU3RyaW5nIFJhbmdlSW5wdXRU
eXBlOjpzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImIHZhbHVlKSBjb25zdAogewogICAgIGlm
ICghaXNmaW5pdGUodmFsdWUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNzIsNyAr
MjYzLDcgQEAgU3RyaW5nIFJhbmdlSW5wdXRUeXBlOjpmYWxsYmFja1ZhbHVlKCkgY29uc3QKIFN0
cmluZyBSYW5nZUlucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2Vk
VmFsdWUpIGNvbnN0CiB7CiAgICAgU3RlcFJhbmdlIHN0ZXBSYW5nZShjcmVhdGVTdGVwUmFuZ2Uo
UmVqZWN0QW55KSk7Ci0gICAgZG91YmxlIHByb3Bvc2VkRG91YmxlVmFsdWUgPSBwYXJzZVRvTnVt
YmVyKHByb3Bvc2VkVmFsdWUsIHN0ZXBSYW5nZS5kZWZhdWx0VmFsdWUoKSk7CisgICAgY29uc3Qg
SW5wdXROdW1iZXIgcHJvcG9zZWREb3VibGVWYWx1ZSA9IHBhcnNlVG9OdW1iZXIocHJvcG9zZWRW
YWx1ZSwgc3RlcFJhbmdlLmRlZmF1bHRWYWx1ZSgpKTsKICAgICByZXR1cm4gc2VyaWFsaXplRm9y
TnVtYmVyVHlwZShzdGVwUmFuZ2UuY2xhbXBWYWx1ZShwcm9wb3NlZERvdWJsZVZhbHVlKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaAppbmRleCAzNmZhYTFkNzIwZjVkN2Zl
YWJiNTI2YWFkYTBlMDU4ZDg0ZjQ1ZTQyLi4wYzhhMmE5MmRlYzAwZmUyYTIyOTFhZGY4ZmVlNmZj
NTUzNTlhNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCkBAIC00NSw4ICs0
NSw4IEBAIHByaXZhdGU6CiAgICAgUmFuZ2VJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxl
bWVudCkgOiBJbnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCBib29sIGlzUmFuZ2VD
b250cm9sKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIHZh
bHVlQXNOdW1iZXIoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVB
c051bWJlcihkb3VibGUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnB1dE51bWJlcihjb25zdCBJ
bnB1dE51bWJlciYsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNSZXF1aXJlZCgpIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgU3RlcFJhbmdlIGNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFu
ZGxpbmcpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1N0ZXBwYWJsZSgpIGNv
bnN0IE9WRVJSSURFOwpAQCAtNTQsOCArNTQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
KikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmlu
ZyYsIGRvdWJsZSkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXpl
KGRvdWJsZSkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRv
TnVtYmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGNvbnN0IElucHV0TnVtYmVyJikgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRNb3Vz
ZUV2ZW50cykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRlQ2hh
bmdlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
LCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1N0ZXBSYW5nZS5jcHAKaW5kZXggZmEzN2MzZWQxZWI0MzA1MzkyOTc3ZWJiZGM1
MTI0ZWZiMGIxYzM3Ny4uM2UxZTIzMzdiNzAyNGEyMzQzNWI3MzcwZDkxYzQxNTJlZjNiODA4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcApAQCAtNTUsNyArNTUsNyBAQCBTdGVwUmFuZ2U6
OlN0ZXBSYW5nZShjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKIHsKIH0KIAotU3RlcFJhbmdl
OjpTdGVwUmFuZ2UoY29uc3QgTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMmIHN0ZXBCYXNlLCBkb3Vi
bGUgbWluaW11bSwgZG91YmxlIG1heGltdW0sIGNvbnN0IE51bWJlcldpdGhEZWNpbWFsUGxhY2Vz
T3JNaXNzaW5nJiBzdGVwLCBjb25zdCBTdGVwRGVzY3JpcHRpb24mIHN0ZXBEZXNjcmlwdGlvbikK
K1N0ZXBSYW5nZTo6U3RlcFJhbmdlKGNvbnN0IE51bWJlcldpdGhEZWNpbWFsUGxhY2VzJiBzdGVw
QmFzZSwgY29uc3QgSW5wdXROdW1iZXImIG1pbmltdW0sIGNvbnN0IElucHV0TnVtYmVyJiBtYXhp
bXVtLCBjb25zdCBOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyYgc3RlcCwgY29uc3Qg
U3RlcERlc2NyaXB0aW9uJiBzdGVwRGVzY3JpcHRpb24pCiAgICAgOiBtX21heGltdW0obWF4aW11
bSkKICAgICAsIG1fbWluaW11bShtaW5pbXVtKQogICAgICwgbV9zdGVwKHN0ZXAudmFsdWUudmFs
dWUpCkBAIC03MSwzNSArNzEsMzYgQEAgU3RlcFJhbmdlOjpTdGVwUmFuZ2UoY29uc3QgTnVtYmVy
V2l0aERlY2ltYWxQbGFjZXMmIHN0ZXBCYXNlLCBkb3VibGUgbWluaW11bSwgZG8KICAgICBBU1NF
UlQoaXNmaW5pdGUobV9zdGVwQmFzZSkpOwogfQogCi1kb3VibGUgU3RlcFJhbmdlOjphY2NlcHRh
YmxlRXJyb3IoKSBjb25zdAorSW5wdXROdW1iZXIgU3RlcFJhbmdlOjphY2NlcHRhYmxlRXJyb3Io
KSBjb25zdAogewogICAgIHJldHVybiBtX3N0ZXAgLyBwb3coMi4wLCBGTFRfTUFOVF9ESUcpOwog
fQogCi1kb3VibGUgU3RlcFJhbmdlOjphbGlnblZhbHVlRm9yU3RlcChkb3VibGUgY3VycmVudFZh
bHVlLCB1bnNpZ25lZCBjdXJyZW50RGVjaW1hbFBsYWNlcywgZG91YmxlIG5ld1ZhbHVlKSBjb25z
dAorSW5wdXROdW1iZXIgU3RlcFJhbmdlOjphbGlnblZhbHVlRm9yU3RlcChjb25zdCBJbnB1dE51
bWJlciYgY3VycmVudFZhbHVlLCB1bnNpZ25lZCBjdXJyZW50RGVjaW1hbFBsYWNlcywgY29uc3Qg
SW5wdXROdW1iZXImIHByb3Bvc2VkVmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKG5ld1ZhbHVlID49
IHBvdygxMC4wLCAyMS4wKSkKLSAgICAgICAgcmV0dXJuIG5ld1ZhbHVlOworICAgIGlmIChwcm9w
b3NlZFZhbHVlID49IHBvdygxMC4wLCAyMS4wKSkKKyAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFs
dWU7CiAKKyAgICBJbnB1dE51bWJlciBuZXdWYWx1ZSA9IHByb3Bvc2VkVmFsdWU7CiAgICAgaWYg
KHN0ZXBNaXNtYXRjaChjdXJyZW50VmFsdWUpKSB7Ci0gICAgICAgIGRvdWJsZSBzY2FsZSA9IHBv
dygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2VzLCBjdXJy
ZW50RGVjaW1hbFBsYWNlcykpKTsKKyAgICAgICAgY29uc3QgSW5wdXROdW1iZXIgc2NhbGUgPSBw
b3coMTAuMCwgc3RhdGljX2Nhc3Q8SW5wdXROdW1iZXI+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2Vz
LCBjdXJyZW50RGVjaW1hbFBsYWNlcykpKTsKICAgICAgICAgbmV3VmFsdWUgPSByb3VuZChuZXdW
YWx1ZSAqIHNjYWxlKSAvIHNjYWxlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvdWJsZSBzY2Fs
ZSA9IHBvdygxMC4wLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2Vz
LCBtX3N0ZXBCYXNlRGVjaW1hbFBsYWNlcykpKTsKKyAgICAgICAgY29uc3QgSW5wdXROdW1iZXIg
c2NhbGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8SW5wdXROdW1iZXI+KG1heChtX3N0ZXBEZWNp
bWFsUGxhY2VzLCBtX3N0ZXBCYXNlRGVjaW1hbFBsYWNlcykpKTsKICAgICAgICAgbmV3VmFsdWUg
PSByb3VuZCgobV9zdGVwQmFzZSArIHJvdW5kKChuZXdWYWx1ZSAtIG1fc3RlcEJhc2UpIC8gbV9z
dGVwKSAqIG1fc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsKICAgICB9CiAKICAgICByZXR1cm4gbmV3
VmFsdWU7CiB9Ci1kb3VibGUgU3RlcFJhbmdlOjpjbGFtcFZhbHVlKGRvdWJsZSB2YWx1ZSkgY29u
c3QKKworSW5wdXROdW1iZXIgU3RlcFJhbmdlOjpjbGFtcFZhbHVlKGNvbnN0IElucHV0TnVtYmVy
JiB2YWx1ZSkgY29uc3QKIHsKLSAgICBkb3VibGUgY2xhbXBlZFZhbHVlID0gbWF4KG1fbWluaW11
bSwgbWluKHZhbHVlLCBtX21heGltdW0pKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBpblJhbmdl
VmFsdWUgPSBtYXgobV9taW5pbXVtLCBtaW4odmFsdWUsIG1fbWF4aW11bSkpOwogICAgIGlmICgh
bV9oYXNTdGVwKQotICAgICAgICByZXR1cm4gY2xhbXBlZFZhbHVlOwotICAgIC8vIFJvdW5kcyBj
bGFtcGVkVmFsdWUgdG8gbWluaW11bSArIE4gKiBzdGVwLgotICAgIGNsYW1wZWRWYWx1ZSA9IG1f
bWluaW11bSArIHJvdW5kKChjbGFtcGVkVmFsdWUgLSBtX21pbmltdW0pIC8gbV9zdGVwKSAqIG1f
c3RlcDsKLSAgICBpZiAoY2xhbXBlZFZhbHVlID4gbV9tYXhpbXVtKQotICAgICAgIGNsYW1wZWRW
YWx1ZSAtPSBtX3N0ZXA7CisgICAgICAgIHJldHVybiBpblJhbmdlVmFsdWU7CisgICAgLy8gUm91
bmRzIGluUmFuZ2VWYWx1ZSB0byBtaW5pbXVtICsgTiAqIHN0ZXAuCisgICAgY29uc3QgSW5wdXRO
dW1iZXIgcm91bmRlZFZhbHVlID0gbV9taW5pbXVtICsgcm91bmQoKGluUmFuZ2VWYWx1ZSAtIG1f
bWluaW11bSkgLyBtX3N0ZXApICogbV9zdGVwOworICAgIGNvbnN0IElucHV0TnVtYmVyIGNsYW1w
ZWRWYWx1ZSA9IHJvdW5kZWRWYWx1ZSA+IG1fbWF4aW11bSA/IHJvdW5kZWRWYWx1ZSAtIG1fc3Rl
cCA6IHJvdW5kZWRWYWx1ZTsKICAgICBBU1NFUlQoY2xhbXBlZFZhbHVlID49IG1fbWluaW11bSk7
CiAgICAgQVNTRVJUKGNsYW1wZWRWYWx1ZSA8PSBtX21heGltdW0pOwogICAgIHJldHVybiBjbGFt
cGVkVmFsdWU7CkBAIC0xNDgsMTYgKzE0OSwxNiBAQCBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNp
bWFsUGxhY2VzT3JNaXNzaW5nIFN0ZXBSYW5nZTo6cGFyc2VTdGVwKEFueVN0ZXBIYW5kbGluZwog
ICAgIHJldHVybiBzdGVwOwogfQogCi1ib29sIFN0ZXBSYW5nZTo6c3RlcE1pc21hdGNoKGRvdWJs
ZSB2YWx1ZUZvckNoZWNrKSBjb25zdAorYm9vbCBTdGVwUmFuZ2U6OnN0ZXBNaXNtYXRjaChjb25z
dCBJbnB1dE51bWJlciYgdmFsdWVGb3JDaGVjaykgY29uc3QKIHsKICAgICBpZiAoIW1faGFzU3Rl
cCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghaXNmaW5pdGUodmFsdWVGb3JDaGVj
aykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb3VibGUgdmFsdWUgPSBmYWJzKHZhbHVl
Rm9yQ2hlY2sgLSBtX3N0ZXBCYXNlKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciB2YWx1ZSA9IGZh
YnModmFsdWVGb3JDaGVjayAtIG1fc3RlcEJhc2UpOwogICAgIGlmIChpc2luZih2YWx1ZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBkb3VibGUncyBmcmFjdGlvbmFsIHBhcnQgc2l6
ZSBpcyBEQkxfTUFOX0RJRy1iaXQuIElmIHRoZSBjdXJyZW50IHZhbHVlCisgICAgLy8gSW5wdXRO
dW1iZXIncyBmcmFjdGlvbmFsIHBhcnQgc2l6ZSBpcyBEQkxfTUFOX0RJRy1iaXQuIElmIHRoZSBj
dXJyZW50IHZhbHVlCiAgICAgLy8gaXMgZ3JlYXRlciB0aGFuIHN0ZXAqMl5EQkxfTUFOVF9ESUcs
IHRoZSBmb2xsb3dpbmcgY29tcHV0YXRpb24gZm9yCiAgICAgLy8gcmVtYWluZGVyIG1ha2VzIG5v
IHNlbnNlLgogICAgIGlmICh2YWx1ZSAvIHBvdygyLjAsIERCTF9NQU5UX0RJRykgPiBtX3N0ZXAp
CkBAIC0xNjUsMTAgKzE2NiwxMCBAQCBib29sIFN0ZXBSYW5nZTo6c3RlcE1pc21hdGNoKGRvdWJs
ZSB2YWx1ZUZvckNoZWNrKSBjb25zdAogICAgIC8vIFRoZSBjb21wdXRhdGlvbiBmb2xsb3dzIEhU
TUw1IDQuMTAuNy4yLjEwIGBUaGUgc3RlcCBhdHRyaWJ1dGUnIDoKICAgICAvLyAuLi4gdGhhdCBu
dW1iZXIgc3VidHJhY3RlZCBmcm9tIHRoZSBzdGVwIGJhc2UgaXMgbm90IGFuIGludGVncmFsIG11
bHRpcGxlCiAgICAgLy8gb2YgdGhlIGFsbG93ZWQgdmFsdWUgc3RlcCwgdGhlIGVsZW1lbnQgaXMg
c3VmZmVyaW5nIGZyb20gYSBzdGVwIG1pc21hdGNoLgotICAgIGRvdWJsZSByZW1haW5kZXIgPSBm
YWJzKHZhbHVlIC0gbV9zdGVwICogcm91bmQodmFsdWUgLyBtX3N0ZXApKTsKKyAgICBjb25zdCBJ
bnB1dE51bWJlciByZW1haW5kZXIgPSBmYWJzKHZhbHVlIC0gbV9zdGVwICogcm91bmQodmFsdWUg
LyBtX3N0ZXApKTsKICAgICAvLyBBY2NlcHRzIGVycm9zIGluIGxvd2VyIGZyYWN0aW9uYWwgcGFy
dCB3aGljaCBJRUVFIDc1NCBzaW5nbGUtcHJlY2lzaW9uCiAgICAgLy8gY2FuJ3QgcmVwcmVzZW50
LgotICAgIGRvdWJsZSBjb21wdXRlZEFjY2VwdGFibGVFcnJvciA9IGFjY2VwdGFibGVFcnJvcigp
OworICAgIGNvbnN0IElucHV0TnVtYmVyIGNvbXB1dGVkQWNjZXB0YWJsZUVycm9yID0gYWNjZXB0
YWJsZUVycm9yKCk7CiAgICAgcmV0dXJuIGNvbXB1dGVkQWNjZXB0YWJsZUVycm9yIDwgcmVtYWlu
ZGVyICYmIHJlbWFpbmRlciA8IChtX3N0ZXAgLSBjb21wdXRlZEFjY2VwdGFibGVFcnJvcik7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5oCmluZGV4IDFhY2E3NWViYTg3ZmVlYTkzMjg4NWUyMDFi
NmYzMGM1MzFlOTVlMmUuLjMyZGM1NTFlOTdjZGJhZTFiNjc5ZDFhMmE2Nzc5MjY3YWVjMDJmYmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuaApAQCAtMzAsMTMgKzMwLDI2IEBAIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CiAKIGVudW0gQW55U3RlcEhhbmRsaW5nIHsgUmVqZWN0QW55LCBBbnlJc0Rl
ZmF1bHRTdGVwIH07CiAKKy8vIEZJWE1FOiB0eXBlIElucHV0TnVtYmVyIHdpbGwgYmUgcmVwbGFj
ZWQgd2l0aCBEZWNpbWFsLgordHlwZWRlZiBkb3VibGUgSW5wdXROdW1iZXI7CisKK2lubGluZSBJ
bnB1dE51bWJlciBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihkb3VibGUgZG91YmxlVmFsdWUp
Cit7CisgICAgcmV0dXJuIGRvdWJsZVZhbHVlOworfQorCitpbmxpbmUgZG91YmxlIGNvbnZlcnRJ
bnB1dE51bWJlclRvRG91YmxlKGNvbnN0IElucHV0TnVtYmVyJiBudW1lcmljVmFsdWUpCit7Cisg
ICAgcmV0dXJuIG51bWVyaWNWYWx1ZTsKK30KKwogY2xhc3MgU3RlcFJhbmdlIHsKIHB1YmxpYzoK
ICAgICBzdHJ1Y3QgTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMgewogICAgICAgICB1bnNpZ25lZCBk
ZWNpbWFsUGxhY2VzOwotICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIElucHV0TnVtYmVy
IHZhbHVlOwogCi0gICAgICAgIE51bWJlcldpdGhEZWNpbWFsUGxhY2VzKGRvdWJsZSB2YWx1ZSA9
IDAsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMgPSAwKQorICAgICAgICBOdW1iZXJXaXRoRGVjaW1h
bFBsYWNlcyhJbnB1dE51bWJlciB2YWx1ZSA9IDAsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMgPSAw
KQogICAgICAgICAgICAgOiBkZWNpbWFsUGxhY2VzKGRlY2ltYWxQbGFjZXMpCiAgICAgICAgICAg
ICAsIHZhbHVlKHZhbHVlKQogICAgICAgICB7CkBAIC04Miw3ICs5NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgZG91YmxlIGRlZmF1bHRWYWx1ZSgpIGNvbnN0
CisgICAgICAgIElucHV0TnVtYmVyIGRlZmF1bHRWYWx1ZSgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBkZWZhdWx0U3RlcCAqIHN0ZXBTY2FsZUZhY3RvcjsKICAgICAgICAg
fQpAQCAtOTAsMjkgKzEwMywyOSBAQCBwdWJsaWM6CiAKICAgICBTdGVwUmFuZ2UoKTsKICAgICBT
dGVwUmFuZ2UoY29uc3QgU3RlcFJhbmdlJik7Ci0gICAgU3RlcFJhbmdlKGNvbnN0IE51bWJlcldp
dGhEZWNpbWFsUGxhY2VzJiBzdGVwQmFzZSwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVt
LCBjb25zdCBOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyYgc3RlcCwgY29uc3QgU3Rl
cERlc2NyaXB0aW9uJik7Ci0gICAgZG91YmxlIGFjY2VwdGFibGVFcnJvcigpIGNvbnN0OwotICAg
IGRvdWJsZSBhbGlnblZhbHVlRm9yU3RlcChkb3VibGUgY3VycmVudFZhbHVlLCB1bnNpZ25lZCBj
dXJyZW50RGVjaW1hbFBsYWNlcywgZG91YmxlIG5ld1ZhbHVlKSBjb25zdDsKLSAgICBkb3VibGUg
Y2xhbXBWYWx1ZShkb3VibGUgdmFsdWUpIGNvbnN0OworICAgIFN0ZXBSYW5nZShjb25zdCBOdW1i
ZXJXaXRoRGVjaW1hbFBsYWNlcyYgc3RlcEJhc2UsIGNvbnN0IElucHV0TnVtYmVyJiBtaW5pbXVt
LCBjb25zdCBJbnB1dE51bWJlciYgbWF4aW11bSwgY29uc3QgTnVtYmVyV2l0aERlY2ltYWxQbGFj
ZXNPck1pc3NpbmcmIHN0ZXAsIGNvbnN0IFN0ZXBEZXNjcmlwdGlvbiYpOworICAgIElucHV0TnVt
YmVyIGFjY2VwdGFibGVFcnJvcigpIGNvbnN0OworICAgIElucHV0TnVtYmVyIGFsaWduVmFsdWVG
b3JTdGVwKGNvbnN0IElucHV0TnVtYmVyJiBjdXJyZW50VmFsdWUsIHVuc2lnbmVkIGN1cnJlbnRE
ZWNpbWFsUGxhY2VzLCBjb25zdCBJbnB1dE51bWJlciYgbmV3VmFsdWUpIGNvbnN0OworICAgIElu
cHV0TnVtYmVyIGNsYW1wVmFsdWUoY29uc3QgSW5wdXROdW1iZXImIHZhbHVlKSBjb25zdDsKICAg
ICBib29sIGhhc1N0ZXAoKSBjb25zdCB7IHJldHVybiBtX2hhc1N0ZXA7IH0KLSAgICBkb3VibGUg
bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIGRvdWJsZSBtaW5pbXVt
KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtOyB9CisgICAgSW5wdXROdW1iZXIgbWF4aW11bSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorICAgIElucHV0TnVtYmVyIG1pbmltdW0oKSBj
b25zdCB7IHJldHVybiBtX21pbmltdW07IH0KICAgICBzdGF0aWMgTnVtYmVyV2l0aERlY2ltYWxQ
bGFjZXNPck1pc3NpbmcgcGFyc2VTdGVwKEFueVN0ZXBIYW5kbGluZywgY29uc3QgU3RlcERlc2Ny
aXB0aW9uJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgZG91YmxlIHN0ZXAoKSBjb25zdCB7IHJldHVy
biBtX3N0ZXA7IH0KLSAgICBkb3VibGUgc3RlcEJhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBC
YXNlOyB9CisgICAgSW5wdXROdW1iZXIgc3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcDsgfQor
ICAgIElucHV0TnVtYmVyIHN0ZXBCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwQmFzZTsgfQog
ICAgIHVuc2lnbmVkIHN0ZXBCYXNlRGVjaW1hbFBsYWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rl
cEJhc2VEZWNpbWFsUGxhY2VzOyB9CiAgICAgdW5zaWduZWQgc3RlcERlY2ltYWxQbGFjZXMoKSBj
b25zdCB7IHJldHVybiBtX3N0ZXBEZWNpbWFsUGxhY2VzOyB9CiAgICAgaW50IHN0ZXBTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcERlc2NyaXB0aW9uLnN0ZXBTY2FsZUZhY3Rvcjsg
fQotICAgIGJvb2wgc3RlcE1pc21hdGNoKGRvdWJsZSkgY29uc3Q7CisgICAgYm9vbCBzdGVwTWlz
bWF0Y2goY29uc3QgSW5wdXROdW1iZXImKSBjb25zdDsKIAogICAgIC8vIENsYW1wIHRoZSBtaWRk
bGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBzdGVwCi0gICAgZG91YmxlIGRlZmF1bHRWYWx1ZSgp
IGNvbnN0CisgICAgSW5wdXROdW1iZXIgZGVmYXVsdFZhbHVlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBjbGFtcFZhbHVlKChtX21pbmltdW0gKyBtX21heGltdW0pIC8gMik7CiAgICAg
fQogCiAgICAgLy8gTWFwIHZhbHVlIGludG8gMC0xIHJhbmdlCi0gICAgZG91YmxlIHByb3BvcnRp
b25Gcm9tVmFsdWUoZG91YmxlIHZhbHVlKSBjb25zdAorICAgIElucHV0TnVtYmVyIHByb3BvcnRp
b25Gcm9tVmFsdWUoY29uc3QgSW5wdXROdW1iZXImIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKG1fbWluaW11bSA9PSBtX21heGltdW0pCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAg
LTEyMSw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTWFwIGZyb20gMC0xIHJh
bmdlIHRvIHZhbHVlCi0gICAgZG91YmxlIHZhbHVlRnJvbVByb3BvcnRpb24oZG91YmxlIHByb3Bv
cnRpb24pIGNvbnN0CisgICAgSW5wdXROdW1iZXIgdmFsdWVGcm9tUHJvcG9ydGlvbihjb25zdCBJ
bnB1dE51bWJlciYgcHJvcG9ydGlvbikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX21p
bmltdW0gKyBwcm9wb3J0aW9uICogKG1fbWF4aW11bSAtIG1fbWluaW11bSk7CiAgICAgfQpAQCAt
MTI5LDEwICsxNDIsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdGVwUmFuZ2UmIG9wZXJh
dG9yID0oY29uc3QgU3RlcFJhbmdlJik7CiAKLSAgICBjb25zdCBkb3VibGUgbV9tYXhpbXVtOyAv
LyBtYXhpbXVtIG11c3QgYmUgPj0gbWluaW11bS4KLSAgICBjb25zdCBkb3VibGUgbV9taW5pbXVt
OwotICAgIGNvbnN0IGRvdWJsZSBtX3N0ZXA7Ci0gICAgY29uc3QgZG91YmxlIG1fc3RlcEJhc2U7
CisgICAgY29uc3QgSW5wdXROdW1iZXIgbV9tYXhpbXVtOyAvLyBtYXhpbXVtIG11c3QgYmUgPj0g
bWluaW11bS4KKyAgICBjb25zdCBJbnB1dE51bWJlciBtX21pbmltdW07CisgICAgY29uc3QgSW5w
dXROdW1iZXIgbV9zdGVwOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1fc3RlcEJhc2U7CiAgICAg
Y29uc3QgU3RlcERlc2NyaXB0aW9uIG1fc3RlcERlc2NyaXB0aW9uOwogICAgIGNvbnN0IHVuc2ln
bmVkIG1fc3RlcEJhc2VEZWNpbWFsUGxhY2VzOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fc3RlcERl
Y2ltYWxQbGFjZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcAppbmRleCA0ODFh
YjlmN2NmODBkZmU3MDYwYzE4NmFmNGVjYzY4M2Q2MTBhNDEyLi4xNTA1YTA2N2ZlZDE5Yzg4NDEy
Zjg1OWU2ZTc1ZDU0OWJiN2IzODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1Rp
bWVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5j
cHAKQEAgLTY0LDcgKzY0LDcgQEAgRGF0ZUNvbXBvbmVudHM6OlR5cGUgVGltZUlucHV0VHlwZTo6
ZGF0ZVR5cGUoKSBjb25zdAogICAgIHJldHVybiBEYXRlQ29tcG9uZW50czo6VGltZTsKIH0KIAot
ZG91YmxlIFRpbWVJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CitJbnB1
dE51bWJlciBUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAogewog
ICAgIGRvdWJsZSBjdXJyZW50ID0gY3VycmVudFRpbWVNUygpOwogICAgIGRvdWJsZSB1dGNPZmZz
ZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKQEAgLTc2LDE2ICs3NiwxNiBAQCBkb3VibGUgVGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKICAgICBkYXRlLnNldE1p
bGxpc2Vjb25kc1NpbmNlTWlkbmlnaHQoY3VycmVudCk7CiAgICAgZG91YmxlIG1pbGxpc2Vjb25k
cyA9IGRhdGUubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpOwogICAgIEFTU0VSVChpc2Zpbml0ZSht
aWxsaXNlY29uZHMpKTsKLSAgICByZXR1cm4gbWlsbGlzZWNvbmRzOworICAgIHJldHVybiBjb252
ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihtaWxsaXNlY29uZHMpOwogfQogCiBTdGVwUmFuZ2UgVGlt
ZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxp
bmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0
ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAodGltZURlZmF1bHRTdGVwLCB0aW1lRGVm
YXVsdFN0ZXBCYXNlLCB0aW1lU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBW
YWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgZG91YmxlIHN0ZXBCYXNlID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGRvdWJs
ZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWlu
QXR0ciksIERhdGVDb21wb25lbnRzOjptaW5pbXVtVGltZSgpKTsKLSAgICBkb3VibGUgbWF4aW11
bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBE
YXRlQ29tcG9uZW50czo6bWF4aW11bVRpbWUoKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgc3Rl
cEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRy
KSwgMCk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBjb252ZXJ0RG91YmxlVG9JbnB1dE51
bWJlcihEYXRlQ29tcG9uZW50czo6bWluaW11bVRpbWUoKSkpOworICAgIGNvbnN0IElucHV0TnVt
YmVyIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZSht
YXhBdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1heGlt
dW1UaW1lKCkpKTsKICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNz
aW5nIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNj
cmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0
dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2Ny
aXB0aW9uKTsKIH0KQEAgLTk3LDcgKzk3LDcgQEAgYm9vbCBUaW1lSW5wdXRUeXBlOjpwYXJzZVRv
RGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWcKICAg
ICByZXR1cm4gb3V0LT5wYXJzZVRpbWUoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCBlbmQpICYmIGVu
ZCA9PSBsZW5ndGg7CiB9CiAKLWJvb2wgVGltZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0Rh
dGVDb21wb25lbnRzKGRvdWJsZSB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqIGRhdGUpIGNvbnN0Citi
b29sIFRpbWVJbnB1dFR5cGU6OnNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhjb25zdCBJ
bnB1dE51bWJlciYgdmFsdWUsIERhdGVDb21wb25lbnRzKiBkYXRlKSBjb25zdAogewogICAgIEFT
U0VSVChkYXRlKTsKICAgICByZXR1cm4gZGF0ZS0+c2V0TWlsbGlzZWNvbmRzU2luY2VNaWRuaWdo
dCh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCmluZGV4IDFjMmMyODZlYzNh
Y2ZkNWVhZWVkZTYyODgzNmU3YWIzMDZhMjNkZDAuLjAwYjJhYzA0YjgwNmQwNGFjMDRjNjBkMTg2
ZmQyYTc4MDA5MjNkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCkBAIC00NSwx
MCArNDUsMTAgQEAgcHJpdmF0ZToKICAgICBUaW1lSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpIDogQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlKGVsZW1lbnQpIHsgfQogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBkZWZhdWx0VmFsdWVGb3JTdGVwVXAo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0ZXBSYW5nZSBjcmVhdGVTdGVwUmFuZ2Uo
QW55U3RlcEhhbmRsaW5nKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VU
b0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERh
dGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNldE1pbGxp
c2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhj
b25zdCBJbnB1dE51bWJlciYsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBib29sIGlzVGltZUZpZWxkKCkgY29uc3QgT1ZFUlJJREU7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAppbmRleCA5MmFjN2RiODNmOTk1ZTRlZTkwMjU1MTEx
Y2I5Y2JkOGUzYzU0ZWViLi42N2NkODRlM2RlZDg0ZGRiNzg3M2VhYjZmN2QzYmQ2NGE4MDUzZWIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAKQEAgLTY1LDkgKzY1LDkgQEAg
U3RlcFJhbmdlIFdlZWtJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcg
YW55U3RlcEhhbmRsaW5nKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24sIHN0ZXBEZXNjcmlwdGlvbiwgKHdlZWtEZWZhdWx0
U3RlcCwgd2Vla0RlZmF1bHRTdGVwQmFzZSwgd2Vla1N0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdl
OjpQYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIpKTsKIAotICAgIGRvdWJsZSBzdGVwQmFz
ZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCB3
ZWVrRGVmYXVsdFN0ZXBCYXNlKTsKLSAgICBkb3VibGUgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEYXRlQ29tcG9uZW50czo6bWlu
aW11bVdlZWsoKSk7Ci0gICAgZG91YmxlIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1XZWVr
KCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIHdlZWtEZWZhdWx0U3RlcEJhc2UpOwor
ICAgIGNvbnN0IElucHV0TnVtYmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0
ZUNvbXBvbmVudHM6Om1pbmltdW1XZWVrKCkpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtYXhp
bXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciks
IGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptYXhpbXVtV2Vlaygp
KSk7CiAgICAgU3RlcFJhbmdlOjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyBzdGVw
ID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24s
IGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVw
UmFuZ2Uoc3RlcEJhc2UsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7
CiB9CkBAIC03OSwxMCArNzksMTAgQEAgYm9vbCBXZWVrSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNv
bXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWcKICAgICByZXR1
cm4gb3V0LT5wYXJzZVdlZWsoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCBlbmQpICYmIGVuZCA9PSBs
ZW5ndGg7CiB9CiAKLWJvb2wgV2Vla0lucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21w
b25lbnRzKGRvdWJsZSB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqIGRhdGUpIGNvbnN0Citib29sIFdl
ZWtJbnB1dFR5cGU6OnNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhjb25zdCBJbnB1dE51
bWJlciYgdmFsdWUsIERhdGVDb21wb25lbnRzKiBkYXRlKSBjb25zdAogewogICAgIEFTU0VSVChk
YXRlKTsKLSAgICByZXR1cm4gZGF0ZS0+c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvcldlZWso
dmFsdWUpOworICAgIHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yV2Vl
ayhjb252ZXJ0SW5wdXROdW1iZXJUb0RvdWJsZSh2YWx1ZSkpOwogfQogCiBib29sIFdlZWtJbnB1
dFR5cGU6OmlzV2Vla0ZpZWxkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvV2Vla0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmgK
aW5kZXggY2M1OGFiN2QwNDRiNDQ1ZjlmNzFkMDM3MmExYWFkZmZiODRkZTkzMi4uYWY4ZGM2MDI3
MWY5ZTc5MWI2NmMwNTY4ZTI4MmQ0NDczM2UzNWFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9XZWVrSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5w
dXRUeXBlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIERhdGVDb21w
b25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdGVw
UmFuZ2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRl
Q29tcG9uZW50cyopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMoY29uc3QgSW5wdXROdW1iZXImLCBEYXRlQ29tcG9uZW50cyop
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1dlZWtGaWVsZCgpIGNvbnN0IE9W
RVJSSURFOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2Fs
ZW5kYXJQaWNrZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NhbGVu
ZGFyUGlja2VyRWxlbWVudC5jcHAKaW5kZXggMWE3YjQ5ZmE2NDhmOWVlMzc4MTQ5OTU0ZTRhNjdi
ZWUxNjYyY2Q1OC4uYWI4YzJlZDkxMDliZjk4MTM0ZjZhMzgyMjU5Yjg2NzVkY2IxZDliYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9DYWxlbmRhclBpY2tlckVsZW1l
bnQuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBDYWxlbmRhclBpY2tlckVsZW1lbnQ6Ondy
aXRlRG9jdW1lbnQoRG9jdW1lbnRXcml0ZXImIHdyaXRlcikKICAgICBTdHJpbmcgbWluU3RyaW5n
ID0gZGF0ZS50b1N0cmluZygpOwogICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZv
ckRhdGUoaW5wdXQtPm1heGltdW0oKSk7CiAgICAgU3RyaW5nIG1heFN0cmluZyA9IGRhdGUudG9T
dHJpbmcoKTsKLSAgICBkb3VibGUgc3RlcDsKKyAgICBJbnB1dE51bWJlciBzdGVwOwogICAgIFN0
cmluZyBzdGVwU3RyaW5nID0gaW5wdXQtPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOwogICAg
IGlmIChzdGVwU3RyaW5nLmlzRW1wdHkoKSB8fCAhaW5wdXQtPmdldEFsbG93ZWRWYWx1ZVN0ZXAo
JnN0ZXApKQogICAgICAgICBzdGVwU3RyaW5nID0gIjEiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKaW5kZXggODQyMmEzMDE5OTAyMjk5
MTFiNThiNjAwNzhkZDE4MDk2NDVkOWQ3Yy4uMjY5ZWI4MmJmODc3Y2Y3YmI3ZThmZDQ1MjUyOWYz
ODJjZmM5ODIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVy
VGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJU
aHVtYkVsZW1lbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIHN0YXRpYyBkb3VibGUgc2xpZGVyUG9zaXRp
b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK2lubGluZSBzdGF0aWMgSW5wdXROdW1iZXIg
c2xpZGVyUG9zaXRpb24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBjb25zdCBT
dGVwUmFuZ2Ugc3RlcFJhbmdlKGVsZW1lbnQtPmNyZWF0ZVN0ZXBSYW5nZShSZWplY3RBbnkpKTsK
ICAgICBjb25zdCBkb3VibGUgb2xkVmFsdWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShl
bGVtZW50LT52YWx1ZSgpLCBzdGVwUmFuZ2UuZGVmYXVsdFZhbHVlKCkpOwpAQCAtMTEwLDcgKzEx
MCw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OmxheW91dCgpCiAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT50b0lucHV0RWxlbWVu
dCgpOwogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQ7CiAKLSAgICBkb3VibGUgZnJhY3Rpb24gPSBzbGlkZXJQb3NpdGlv
bihpbnB1dCkgKiAxMDA7CisgICAgZG91YmxlIGZyYWN0aW9uID0gY29udmVydElucHV0TnVtYmVy
VG9Eb3VibGUoc2xpZGVyUG9zaXRpb24oaW5wdXQpICogMTAwKTsKICAgICBpZiAoaXNWZXJ0aWNh
bCkKICAgICAgICAgc3R5bGUoKS0+c2V0VG9wKExlbmd0aCgxMDAgLSBmcmFjdGlvbiwgUGVyY2Vu
dCkpOwogICAgIGVsc2UgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKQEAg
LTIzNiwxMSArMjM2LDEwIEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZy
b21Qb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgaWYgKHBvc2l0aW9uID09IGN1
cnJlbnRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIGZyYWN0aW9uID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihwb3NpdGlvbikgLyB0cmFja1NpemU7Ci0gICAgaWYgKGlzVmVy
dGljYWwgfHwgIXJlbmRlckJveCgpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
Ci0gICAgICAgIGZyYWN0aW9uID0gMSAtIGZyYWN0aW9uOworICAgIGNvbnN0IElucHV0TnVtYmVy
IHJhdGlvID0gY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoc3RhdGljX2Nhc3Q8ZG91YmxlPihw
b3NpdGlvbikgLyB0cmFja1NpemUpOworICAgIGNvbnN0IElucHV0TnVtYmVyIGZyYWN0aW9uID0g
aXNWZXJ0aWNhbCB8fCAhcmVuZGVyQm94KCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IElucHV0TnVtYmVyKDEpIC0gcmF0aW8gOiByYXRpbzsKICAgICBTdGVwUmFuZ2Ugc3Rl
cFJhbmdlKGlucHV0LT5jcmVhdGVTdGVwUmFuZ2UoUmVqZWN0QW55KSk7Ci0gICAgZG91YmxlIHZh
bHVlID0gc3RlcFJhbmdlLmNsYW1wVmFsdWUoc3RlcFJhbmdlLnZhbHVlRnJvbVByb3BvcnRpb24o
ZnJhY3Rpb24pKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciB2YWx1ZSA9IHN0ZXBSYW5nZS5jbGFt
cFZhbHVlKHN0ZXBSYW5nZS52YWx1ZUZyb21Qcm9wb3J0aW9uKGZyYWN0aW9uKSk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBubyBsb25nZXIgYmVpbmcgc2V0IGZyb20gcmVuZGVyZXIuIENvbnNp
ZGVyIHVwZGF0aW5nIHRoZSBtZXRob2QgbmFtZS4KICAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVu
ZGVyZXIoc2VyaWFsaXplRm9yTnVtYmVyVHlwZSh2YWx1ZSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145744</attachid>
            <date>2012-06-05 03:15:35 -0700</date>
            <delta_ts>2012-06-05 17:40:12 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-88275-20120605191534.patch</filename>
            <type>text/plain</type>
            <size>70826</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE5ZjA3NmY5YjFiODZh
NmZmN2MwMjFkNTU3OGIwY2E3MTY3OWI5Mi4uNDM4YWEzMjFiYTc1NDgyNjQzMWQ2ZjA0MDA4NzFl
MTQ2MjJlZTk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NCBAQAorMjAxMi0wNi0wNCAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIElucHV0TnVtYmVyIHR5cGUgYXMgYW4gYWxpYXMgb2YgZG91YmxlIGZvciByZXBsYWNp
bmcgaXQgdG8gRGVjaW1hbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODgyNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZWQgSW5wdXROdW1iZXIgdHlwZSBhcyBhbGlhcyBv
ZiBkb3VibGUgdG8gYmUKKyAgICAgICAgcmVwbGFjZWQgdG8gRGVjaW1hbCBhbmQgY29udmVydERv
dWJsZVRvSW5wdXROdW1iZXIgYW5kIAorICAgICAgICBjb252ZXJ0VG9JbnB1dE51bWJlclRvRG91
YmxlIGZvciByZWR1Y2luZyBzaXplIG9mIHBhdGNoIHdoZW4gd2UKKyAgICAgICAgaW50cm9kdWNl
IERlY2ltYWwgdHlwZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZGVkIG5ldyB2YWlyYWJsZXMg
dG8gdXNlIGNvbnN0IHZhcmlhYmxlIHRvIHJlZHVjZQorICAgICAgICBjb3B5IG9wZXJhdGlvbiB3
aGVuIGludHJvZHVjaW5nIERlY2ltYWwgdHlwZS4KKworICAgICAgICBJbiB0aGUgaW1wbGVtZW50
YXRpb24sIHdlIHVzZSBJbnB1dE51bWJlciwgd2lsbCBiZSBEZWNpbWFsLCBob3dldmVyIHNvbWUg
bWV0aG9kcyBpbiBJREwKKyAgICAgICAgdXNlIGRvdWJsZS4gVG8gY2xhcmlmeSBpbnRlcm5hbCB1
c2FnZSBvZiB2YWx1ZSBhbmQgZXh0ZXJuYWwgdXNhZ2UsIHRoaXQgcGF0Y2ggcmVuYW1lZAorICAg
ICAgICBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisgICAgICAgIC0gcGFyc2VUb0RvdWJsZSA9PiBw
YXJzZU51bWJlcgorICAgICAgICAtIHNldFZhbHVlQXNOdW1iZXIgPT4gc2V0VmFsdWVBc0RvdWJs
ZSBhbmQgc2V0VmFsdWVBc0lucHV0TnVtYmVyCisgICAgICAgIC0gdmFsdWVBc051bWJlciA9PiB2
YWx1ZUFzRG91YmxlCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHBhcnQgb2YgaW50cm9kdWNp
bmcgRGVjaW1hbCwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMDA5
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2
aW9yLgorCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjp2YWx1ZUFzRGF0ZSk6IFJl
cGxhY2VkIHBhcnNlVG9OdW1iZXIoKSB0byB2YWx1ZUFzRG91YmxlKCkKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0VmFsdWVBc0RhdGUpOiBJbnNlcnRlZCBj
b252ZXJ0RG91YmxlVG9JbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSk6IFVzZSBuZXcgZnVuY3Rpb24gcGFyc2VUb0Rv
dWJsZSgpLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRW
YWx1ZUFzSW5wdXROdW1iZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKTogQ2hhbmdlZCByZXR1cm4gdHlw
ZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6cGFyc2VUb051bWJlcik6IFRoaXMgaXMgcmVwbGFjZW1lbnQgb2YgcGFyc2VUb0RvdWJs
ZSgpLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpwYXJzZVRv
RG91YmxlKTogQWRkZWQgZm9yIHZhbHVlQXNEYXRlIGFuZCB2YWx1ZUFzRG91YmxlLgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemUpOiBDaGFuZ2Vk
IHBhcmFtZXRlciB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6QmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoQ29tcG9uZW50cyk6IFJlcGxhY2UgZG91
YmxlIHRvIElucHV0TnVtYmVyIGZvciBnZXRBbGxvd2RTdGVwLgorICAgICAgICAqIGh0bWwvQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlLmg6CisgICAgICAgIChCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUpOgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5w
dXROdW1iZXIuCisgICAgICAgICogaHRtbC9EYXRlSW5wdXRUeXBlLmg6CisgICAgICAgIChEYXRl
SW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXApOiBD
aGFuZ2VkIHJldHVybiB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1
dE51bWJlci4KKyAgICAgICAgKiBodG1sL0RhdGVUaW1lSW5wdXRUeXBlLmg6CisgICAgICAgIChE
YXRlVGltZUlucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNyZWF0ZVN0
ZXBSYW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKiBodG1s
L0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaDoKKyAgICAgICAgKERhdGVUaW1lTG9jYWxJbnB1dFR5
cGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwKTogQ2hhbmdlZCBwYXJh
bWV0ZXIgdHlwZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnZhbHVlQXNOdW1iZXIpOiBVc2UgSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVBc051bWJlcik6IFVzZSBJ
bnB1dFR5cGU6OnZhbHVlQXNEb3VibGUuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
Lmg6CisgICAgICAgIChIVE1MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0lucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUpOiBSZXBs
YWNlbWVudCBvZiB2YWx1ZUFzTnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpz
ZXRWYWx1ZUFzRG91YmxlKTogUmVwbGFjZW1lbnQgb2YgdmFsdWVBc051bWJlci4KKyAgICAgICAg
KFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWVBc0lucHV0TnVtYmVyKTogUmVwbGFjZW1lbnQg
b2YgdmFsdWVBc051bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6cmFuZ2VVbmRl
cmZsb3cpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OnJhbmdlT3ZlcmZsb3cpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1i
ZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCk6
IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OmlzSW5SYW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aXNPdXRPZlJhbmdlKTogUmVwbGFjZWQgZG91Ymxl
IHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzdGVwTWlzbWF0
Y2gpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVt
YmVyLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKTogUmVwbGFj
ZW1lbnQgb2YgcGFyc2VUb0RvdWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6cGFy
c2VUb051bWJlck9yTmFOKTogQWRkZWQgZm9yIHJlZHVjaW5nIG51bWJlciBvZiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRU
eXBlOjpwYXJzZVRvTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMpOiBSZXBsYWNlZCBkb3VibGUgdG8g
SW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnNlcmlhbGl6ZSk6IENo
YW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OmFwcGx5U3RlcCk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Z2V0QWxsb3dlZFZhbHVlU3RlcCk6IENoYW5nZWQg
cGFyYW1ldGVyIHR5cGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OnN0ZXBVcEZyb21SZW5kZXJlcik6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4K
KyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5oOgorICAgICAgICAoSW5wdXRUeXBlKToKKyAgICAg
ICAgKiBodG1sL01vbnRoSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5w
dXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXApOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIElu
cHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6TW9udGhJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBS
YW5nZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6
Ok1vbnRoSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKTogUmVwbGFjZW1lbnQgb2YgcGFyc2VUb0Rv
dWJsZS4KKyAgICAgICAgKiBodG1sL01vbnRoSW5wdXRUeXBlLmg6CisgICAgICAgIChNb250aElu
cHV0VHlwZSk6CisgICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKTogUmVwbGFjZW1lbnQgb2Yg
dmFsdWVBc051bWJlci4gQ2hhbmdlZCB0byB1c2UgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlQXNEb3VibGUpOiAg
UmVwbGFjZW1lbnQgb2Ygc2V0VmFsdWVBc051bWJlci4gIENoYW5nZWQgdG8gdXNlIHNlcmlhbGl6
ZUZvck51bWJlclR5cGUuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnNldFZh
bHVlQXNJbnB1dE51bWJlcik6IFJlcGxhY2VtZW50IG9mIHNldFZhbHVlQXNOdW1iZXIuCisgICAg
ICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSk6IFJlcGxhY2Vk
IGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlw
ZTo6cGFyc2VUb051bWJlcik6IFJlcGxhY2VtZW50IG9mIHBhcnNlVG9Eb3VibGUuCisgICAgICAg
IChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNl
cyk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok51
bWJlcklucHV0VHlwZTo6c2VyaWFsaXplKToKKyAgICAgICAgKiBodG1sL051bWJlcklucHV0VHlw
ZS5oOgorICAgICAgICAoTnVtYmVySW5wdXRUeXBlKToKKyAgICAgICAgKiBodG1sL1JhbmdlSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZU1heGltdW0pOiBSZXBsYWNlZCBk
b3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6
dmFsdWVBc0RvdWJsZSk6IFJlcGxhY2VtZW50IG9mIHZhbHVlQXNOdW1iZXIuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWVBc0lucHV0TnVtYmVyKTogIFJlcGxhY2Vt
ZW50IG9mIHNldFZhbHVlQXNOdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlw
ZTo6Y3JlYXRlU3RlcFJhbmdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6IFJlcGxh
Y2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRU
eXBlOjpwYXJzZVRvTnVtYmVyKTogUmVwbGFjZW1lbnQgb2YgcGFyc2VUb0RvdWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpzZXJpYWxpemUpOiBDaGFuZ2VkIHBhcmFtZXRl
ciB0eXBlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6
OnNhbml0aXplVmFsdWUpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAg
ICogaHRtbC9SYW5nZUlucHV0VHlwZS5oOgorICAgICAgICAoUmFuZ2VJbnB1dFR5cGUpOgorICAg
ICAgICAqIGh0bWwvU3RlcFJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6
U3RlcFJhbmdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2Vi
Q29yZTo6U3RlcFJhbmdlOjphY2NlcHRhYmxlRXJyb3IpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5w
dXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OmFsaWduVmFsdWVGb3JTdGVw
KTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OmNsYW1wVmFsdWUpOiBSZXBsYWNlZCBkb3VibGUg
dG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6OnN0ZXBNaXNtYXRj
aCk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKiBodG1sL1N0ZXBS
YW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERvdWJsZVRvSW5wdXROdW1iZXIpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRJbnB1dE51bWJlclRvRG91YmxlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2Vz
OjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uOjpkZWZhdWx0
VmFsdWUpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChTdGVwUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjptYXhpbXVtKTogUmVwbGFjZWQgZG91
YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjptaW5pbXVt
KTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6U3Rl
cFJhbmdlOjpzdGVwKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAo
V2ViQ29yZTo6U3RlcFJhbmdlOjpzdGVwQmFzZSk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51
bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6ZGVmYXVsdFZhbHVlKTogUmVwbGFj
ZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjpw
cm9wb3J0aW9uRnJvbVZhbHVlKTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAg
ICAgICAoV2ViQ29yZTo6U3RlcFJhbmdlOjp2YWx1ZUZyb21Qcm9wb3J0aW9uKTogUmVwbGFjZWQg
ZG91YmxlIHRvIElucHV0TnVtYmVyLgorICAgICAgICAqIGh0bWwvVGltZUlucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAp
OiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpUaW1l
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1i
ZXIuCisgICAgICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmg6CisgICAgICAgIChUaW1lSW5wdXRU
eXBlKToKKyAgICAgICAgKiBodG1sL1dlZWtJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2Vla0lucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKTogUmVwbGFjZWQgZG91YmxlIHRvIElu
cHV0TnVtYmVyLgorICAgICAgICAqIGh0bWwvV2Vla0lucHV0VHlwZS5oOgorICAgICAgICAoV2Vl
a0lucHV0VHlwZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbGVuZGFyUGlja2VyRWxlbWVudDo6d3JpdGVEb2N1
bWVudCk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKyAgICAgICAgKiBodG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2xpZGVyUG9z
aXRpb24pOiBSZXBsYWNlZCBkb3VibGUgdG8gSW5wdXROdW1iZXIuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTbGlkZXJUaHVtYjo6bGF5b3V0KTogUmVwbGFjZWQgZG91YmxlIHRvIElucHV0TnVt
YmVyLgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZy
b21Qb2ludCk6IFJlcGxhY2VkIGRvdWJsZSB0byBJbnB1dE51bWJlci4KKwogMjAxMi0wNi0wNCAg
VGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dl
YlNvY2tldF0gU2VuZCByZXF1aXJlcyBzdXBlciBsaW5lYXIgdGltZSBhZ2FpbnN0IGRhdGEgc2l6
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3Bw
CmluZGV4IDgxYzliNWYwNjQ5MGEwMjIwZjg0ZjZkYmQ2OWZlYWUyZTkzOTM2M2EuLjg1Mjg0MTI1
OWIwMWJjMjQwYTMzYzdmZGRmMzIxMjA1NDA3NTlhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKQEAgLTQ3LDEyICs0NywxMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAotc3RhdGljIGNvbnN0IGRvdWJsZSBtc2VjUGVyTWludXRlID0gNjAgKiAx
MDAwOwotc3RhdGljIGNvbnN0IGRvdWJsZSBtc2VjUGVyU2Vjb25kID0gMTAwMDsKK3N0YXRpYyBj
b25zdCBpbnQgbXNlY1Blck1pbnV0ZSA9IDYwICogMTAwMDsKK3N0YXRpYyBjb25zdCBpbnQgbXNl
Y1BlclNlY29uZCA9IDEwMDA7CiAKIGRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnZh
bHVlQXNEYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyc2VUb051bWJlcihlbGVtZW50KCkt
PnZhbHVlKCksIERhdGVDb21wb25lbnRzOjppbnZhbGlkTWlsbGlzZWNvbmRzKCkpOworICAgIHJl
dHVybiB2YWx1ZUFzRG91YmxlKCk7CiB9CiAKIHZvaWQgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
OjpzZXRWYWx1ZUFzRGF0ZShkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdApAQCAt
NjAsMTIgKzYwLDEyIEBAIHZvaWQgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXRWYWx1ZUFz
RGF0ZShkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zCiAgICAgZWxlbWVudCgpLT5z
ZXRWYWx1ZShzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKHZhbHVlKSk7CiB9CiAKLWRvdWJsZSBC
YXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAorZG91YmxlIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT52YWx1ZSgpLCBudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpxdWlldF9OYU4oKSk7CisgICAgcmV0dXJuIHBhcnNlVG9Eb3VibGUoZWxlbWVudCgpLT52
YWx1ZSgpKTsKIH0KIAotdm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNO
dW1iZXIoZG91YmxlIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZp
b3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAordm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnNldFZhbHVlQXNJbnB1dE51bWJlcihjb25zdCBJbnB1dE51bWJlciYgbmV3VmFsdWUsIFRleHRG
aWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7
CiAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxpemUobmV3VmFsdWUpLCBldmVudEJlaGF2
aW9yKTsKIH0KQEAgLTgwLDEzICs4MCwxMyBAQCBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlw
ZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKICAgICByZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1l
bnQoKS0+dmFsdWUoKSk7CiB9CiAKLWRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmRl
ZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CitJbnB1dE51bWJlciBCYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CiB7CiAgICAgZG91YmxlIG1z
ID0gY3VycmVudFRpbWVNUygpOwogICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENP
ZmZzZXQoKTsKICAgICBkb3VibGUgZHN0T2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KG1zLCB1
dGNPZmZzZXQpOwogICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KCh1dGNPZmZzZXQg
KyBkc3RPZmZzZXQpIC8gbXNQZXJNaW51dGUpOwotICAgIHJldHVybiBtcyArIChvZmZzZXQgKiBt
c1Blck1pbnV0ZSk7CisgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKG1zICsg
KG9mZnNldCAqIG1zUGVyTWludXRlKSk7CiB9CiAKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjppc1N0ZXBwYWJsZSgpIGNvbnN0CkBAIC0xMDgsMTYgKzEwOCwyMiBAQCB2b2lkIEJhc2VE
YXRlQW5kVGltZUlucHV0VHlwZTo6aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50KiBldmVudCkK
ICAgICAgICAgaGFuZGxlV2hlZWxFdmVudEZvclNwaW5CdXR0b24oZXZlbnQpOwogfQogCi1kb3Vi
bGUgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYg
c3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorZG91YmxlIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZTo6cGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmIHNvdXJjZSkgY29uc3QKIHsKICAg
ICBEYXRlQ29tcG9uZW50cyBkYXRlOwotICAgIGlmICghcGFyc2VUb0RhdGVDb21wb25lbnRzKHNy
YywgJmRhdGUpKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIGlmICghcGFyc2VU
b0RhdGVDb21wb25lbnRzKHNvdXJjZSwgJmRhdGUpKQorICAgICAgICByZXR1cm4gRGF0ZUNvbXBv
bmVudHM6OmludmFsaWRNaWxsaXNlY29uZHMoKTsKICAgICBkb3VibGUgbXNlYyA9IGRhdGUubWls
bGlzZWNvbmRzU2luY2VFcG9jaCgpOwogICAgIEFTU0VSVChpc2Zpbml0ZShtc2VjKSk7CiAgICAg
cmV0dXJuIG1zZWM7CiB9CiAKK0lucHV0TnVtYmVyIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6
cGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgSW5wdXROdW1iZXImIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKK3sKKyAgICBjb25zdCBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJz
ZVRvRG91YmxlKHNvdXJjZSk7CisgICAgcmV0dXJuIGlzZmluaXRlKGRvdWJsZVZhbHVlKSA/IGNv
bnZlcnREb3VibGVUb0lucHV0TnVtYmVyKGRvdWJsZVZhbHVlKSA6IGRlZmF1bHRWYWx1ZTsKK30K
KwogYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnBhcnNlVG9EYXRlQ29tcG9uZW50cyhj
b25zdCBTdHJpbmcmIHNvdXJjZSwgRGF0ZUNvbXBvbmVudHMqIG91dCkgY29uc3QKIHsKICAgICBp
ZiAoc291cmNlLmlzRW1wdHkoKSkKQEAgLTEyOCwxMiArMTM0LDEyIEBAIGJvb2wgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlOjpwYXJzZVRvRGF0ZUNvbXBvbmVudHMoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIERhdGVDCiAgICAgcmV0dXJuIHBhcnNlVG9EYXRlQ29tcG9uZW50c0ludGVybmFsKHNvdXJj
ZS5jaGFyYWN0ZXJzKCksIHNvdXJjZS5sZW5ndGgoKSwgb3V0KTsKIH0KIAotU3RyaW5nIEJhc2VE
YXRlQW5kVGltZUlucHV0VHlwZTo6c2VyaWFsaXplKGRvdWJsZSB2YWx1ZSkgY29uc3QKK1N0cmlu
ZyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZShjb25zdCBJbnB1dE51bWJlciYg
dmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwotICAgIGlmICghc2V0TWlsbGlz
ZWNvbmRUb0RhdGVDb21wb25lbnRzKHZhbHVlLCAmZGF0ZSkpCisgICAgaWYgKCFzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMoY29udmVydElucHV0TnVtYmVyVG9Eb3VibGUodmFsdWUpLCAm
ZGF0ZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICByZXR1cm4gc2VyaWFsaXplV2l0
aENvbXBvbmVudHMoZGF0ZSk7CiB9CkBAIC0xNTIsNyArMTU4LDcgQEAgU3RyaW5nIEJhc2VEYXRl
QW5kVGltZUlucHV0VHlwZTo6c2VyaWFsaXplV2l0aENvbXBvbmVudHMoY29uc3QgRGF0ZUNvbXBv
bmVudHMmIGQKIAogU3RyaW5nIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2VyaWFsaXplV2l0
aE1pbGxpc2Vjb25kcyhkb3VibGUgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6
ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZShjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJl
cih2YWx1ZSkpOwogfQogCiBTdHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpsb2NhbGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCmluZGV4IGZkOTViNWY2OTllY2Jm
OGZhZWVhMWViYmE5MTY4YzYwMTNkNzdhNmUuLjUwZjA2M2M3ODI4ZjZkNWNjOWU1ZDdlYjUzMzc4
MzI3ZTJiYjRjZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuaApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUgOiBwdWJsaWMgVGV4dEZpZWxkSW5wdXRUeXBlIHsKIHByb3RlY3RlZDoKICAgICBCYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBUZXh0RmllbGRJ
bnB1dFR5cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVu
dChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb051
bWJlcihjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
SW5wdXROdW1iZXIgcGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmLCBjb25zdCBJbnB1dE51bWJl
ciYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVu
dHMoY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklERTsKICAgICBT
dHJpbmcgc2VyaWFsaXplV2l0aENvbXBvbmVudHMoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBjb25z
dDsKIApAQCAtNTIsMTkgKzUyLDIwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBEYXRlQ29tcG9u
ZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1
ZUFzRGF0ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0
ZShkb3VibGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRv
dWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNOdW1iZXIoZG91YmxlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25D
b2RlJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RvdWJsZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW5wdXROdW1iZXIo
Y29uc3QgSW5wdXROdW1iZXImLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2Rl
JikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHR5cGVNaXNtYXRjaEZvcihjb25z
dCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgdHlwZU1pc21hdGNo
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBkb3VibGUgZGVmYXVsdFZhbHVlRm9yU3Rl
cFVwKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBkZWZhdWx0VmFs
dWVGb3JTdGVwVXAoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGVwcGFi
bGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChX
aGVlbEV2ZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJs
ZSkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGNvbnN0IElu
cHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXpl
V2l0aE1pbGxpc2Vjb25kcyhkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGxvY2Fs
aXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJp
bmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgY29u
dmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklE
RTsKKyAgICBkb3VibGUgcGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3Bw
CmluZGV4IDcxMTczMTY5OTM4YmRlMjJjMzU0YjE2OTk1NWQ4OThkYTI4OWEzMzYuLjgyOTMyYjVi
ZDczODFkY2Y3NGFkMWQxYTdkNTY3YjFiNDA3ZDExNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRl
SW5wdXRUeXBlLmNwcApAQCAtNzMsOSArNzMsOSBAQCBTdGVwUmFuZ2UgRGF0ZUlucHV0VHlwZTo6
Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlv
biwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZURlZmF1bHRTdGVwLCBkYXRlRGVmYXVsdFN0ZXBCYXNl
LCBkYXRlU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJl
SW50ZWdlcikpOwogCi0gICAgZG91YmxlIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGRvdWJsZSBtaW5pbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERhdGVD
b21wb25lbnRzOjptaW5pbXVtRGF0ZSgpKTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEYXRlQ29tcG9uZW50
czo6bWF4aW11bURhdGUoKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgMCk7CisgICAg
Y29uc3QgSW5wdXROdW1iZXIgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29t
cG9uZW50czo6bWluaW11bURhdGUoKSkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0g
PSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgY29u
dmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlKCkpKTsK
ICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5nIHN0ZXAgPSBT
dGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxl
bWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5n
ZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAKaW5kZXggYTY4NDNkYzM3
YzBhYWY4YWIyZTljYTIxYzJlYmQwMGNmMmQ5ZWJhYi4uYzljNzRjNjFhOTllNTcwM2IwZDgyMDgy
OWNiZmM3ZTA1OTkwNjBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGlt
ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0VHlw
ZS5jcHAKQEAgLTYyLDE4ICs2MiwxOCBAQCBEYXRlQ29tcG9uZW50czo6VHlwZSBEYXRlVGltZUlu
cHV0VHlwZTo6ZGF0ZVR5cGUoKSBjb25zdAogICAgIHJldHVybiBEYXRlQ29tcG9uZW50czo6RGF0
ZVRpbWU7CiB9CiAKLWRvdWJsZSBEYXRlVGltZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3Rl
cFVwKCkgY29uc3QKK0lucHV0TnVtYmVyIERhdGVUaW1lSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVG
b3JTdGVwVXAoKSBjb25zdAogewotICAgIHJldHVybiBjdXJyZW50VGltZU1TKCk7CisgICAgcmV0
dXJuIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKGN1cnJlbnRUaW1lTVMoKSk7CiB9CiAKIFN0
ZXBSYW5nZSBEYXRlVGltZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGlu
ZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAoZGF0ZVRpbWVE
ZWZhdWx0U3RlcCwgZGF0ZVRpbWVEZWZhdWx0U3RlcEJhc2UsIGRhdGVUaW1lU3RlcFNjYWxlRmFj
dG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAg
ZG91YmxlIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1
dGUobWluQXR0ciksIDApOwotICAgIGRvdWJsZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIERhdGVDb21wb25lbnRzOjptaW5pbXVt
RGF0ZVRpbWUoKSk7Ci0gICAgZG91YmxlIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRl
VGltZSgpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsKKyAgICBjb25zdCBJbnB1
dE51bWJlciBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1
dGUobWluQXR0ciksIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjpt
aW5pbXVtRGF0ZVRpbWUoKSkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0gPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgY29udmVydERv
dWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKSk7CiAg
ICAgU3RlcFJhbmdlOjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyBzdGVwID0gU3Rl
cFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1l
bnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uo
c3RlcEJhc2UsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmgKaW5kZXggZTgwODg2ZjMyYWI5ZGU4
NTQ0NGMxOGM4OTM1YTk3MWNkMGU0MjdlZS4uZDg3YmZhNWQ0N2FkZmI3ODJhZmEwOGNkNDAwNGM2
YjFlM2Q2NTFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUlucHV0
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVJbnB1dFR5cGUuaApAQCAt
NDYsNyArNDYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIERhdGVDb21wb25l
bnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdGVwUmFu
Z2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBkb3VibGUgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBJbnB1dE51bWJlciBkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3Vi
bGUsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlz
RGF0ZVRpbWVGaWVsZCgpIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKaW5kZXggMGQzMTNiYzM0Y2RkNjllZjRiZDE2NDAy
NzM5MjM2YzMxMWQyZTMxNC4uMjM2MGZmMWQ3OTE4ODg4MTNlODZlMDUzOWI4NDU3ZjFiNmVkNTli
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3Bw
CkBAIC03Nyw5ICs3Nyw5IEBAIFN0ZXBSYW5nZSBEYXRlVGltZUxvY2FsSW5wdXRUeXBlOjpjcmVh
dGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2Ny
aXB0aW9uLCAoZGF0ZVRpbWVMb2NhbERlZmF1bHRTdGVwLCBkYXRlVGltZUxvY2FsRGVmYXVsdFN0
ZXBCYXNlLCBkYXRlVGltZUxvY2FsU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlNjYWxlZFN0
ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcikpOwogCi0gICAgZG91YmxlIHN0ZXBCYXNlID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGRv
dWJsZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUo
bWluQXR0ciksIERhdGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZVRpbWUoKSk7Ci0gICAgZG91Ymxl
IG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhB
dHRyKSwgRGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKTsKKyAgICBjb25zdCBJbnB1
dE51bWJlciBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmli
dXRlKG1pbkF0dHIpLCAwKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIGNvbnZlcnREb3Vi
bGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZVRpbWUoKSkpOworICAg
IGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFz
dEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNv
bXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKSk7CiAgICAgU3RlcFJhbmdlOjpOdW1iZXJXaXRo
RGVjaW1hbFBsYWNlc09yTWlzc2luZyBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3Rl
cEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShz
dGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIG1pbmltdW0sIG1heGlt
dW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAppbmRleCA5MjQ4ZjBiYzI3OTJkYTM2Yzg2ZjUyYzVhZmRhM2JjMjhhYjI5
MTgwLi4yMzExNDJlNWI2NmU2YmQzOWUwOGFmYjMwNjM4ZGI5NTlmZjQ3ZWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTI3Myw3ICsyNzMsNyBAQCBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBNaXNtYXRjaCgpIGNvbnN0CiAgICAgcmV0dXJuIHdpbGxW
YWxpZGF0ZSgpICYmIG1faW5wdXRUeXBlLT5zdGVwTWlzbWF0Y2godmFsdWUoKSk7CiB9CiAKLWJv
b2wgSFRNTElucHV0RWxlbWVudDo6Z2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNv
bnN0Citib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0ZXAoSW5wdXROdW1i
ZXIqIHN0ZXApIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5nZXRBbGxvd2VkVmFs
dWVTdGVwKHN0ZXApOwogfQpAQCAtOTQ5LDcgKzk0OSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0VmFsdWVBc0RhdGUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIAogZG91
YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX2lucHV0VHlwZS0+dmFsdWVBc051bWJlcigpOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+
dmFsdWVBc0RvdWJsZSgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNO
dW1iZXIoZG91YmxlIG5ld1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgVGV4dEZpZWxkRXZlbnRC
ZWhhdmlvciBldmVudEJlaGF2aW9yKQpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0VmFsdWVBc051bWJlcihkb3VibGUgbmV3VmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjLCBUZXh0CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlQXNOdW1iZXIobmV3VmFsdWUsIGV2
ZW50QmVoYXZpb3IsIGVjKTsKKyAgICBtX2lucHV0VHlwZS0+c2V0VmFsdWVBc0RvdWJsZShuZXdW
YWx1ZSwgZXZlbnRCZWhhdmlvciwgZWMpOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6
cGxhY2Vob2xkZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApp
bmRleCA5NzU2ZTRmYzQwOTcwM2VjYmYzNzdjYzAyMTVmYzFkMDA2Yjk5ZWFlLi4xMDVkZWI3MWEz
NDNmZWQ4YTY0ZGMwZWQ0ZGM1Yjk4MDg1ZGJiMTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIG1heGlt
dW0oKSBjb25zdDsKICAgICAvLyBTZXRzIHRoZSAiYWxsb3dlZCB2YWx1ZSBzdGVwIiBkZWZpbmVk
IGluIHRoZSBIVE1MIHNwZWMgdG8gdGhlIHNwZWNpZmllZCBkb3VibGUgcG9pbnRlci4KICAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGlzIG5vICJhbGxvd2VkIHZhbHVlIHN0ZXAuIgotICAg
IGJvb2wgZ2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqKSBjb25zdDsKKyAgICBib29sIGdldEFs
bG93ZWRWYWx1ZVN0ZXAoSW5wdXROdW1iZXIqKSBjb25zdDsKICAgICBTdGVwUmFuZ2UgY3JlYXRl
U3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3Q7CiAKICAgICAvLyBJbXBsZW1lbnRhdGlv
bnMgb2YgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwKCkgYW5kIHN0ZXBEb3duKCkuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAKaW5kZXggMGRlZjUyOTgzY2FjNDY0NDBhZTcyYmE3MjEwNDExYTkx
YWY1MzNjOS4uZDM2NDgxZTQyZTg5ODg3NTJiOGZkMmJhOTU1ZmMwZWZkZDRjNjNkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcApAQCAtMjA1LDEyICsyMDUsMTcgQEAgdm9pZCBJbnB1dFR5
cGU6OnNldFZhbHVlQXNEYXRlKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKIH0KIAotZG91YmxlIElucHV0VHlwZTo6dmFsdWVBc051
bWJlcigpIGNvbnN0Citkb3VibGUgSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiB9CiAKLXZv
aWQgSW5wdXRUeXBlOjpzZXRWYWx1ZUFzTnVtYmVyKGRvdWJsZSwgVGV4dEZpZWxkRXZlbnRCZWhh
dmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit2b2lkIElucHV0VHlwZTo6c2V0VmFsdWVB
c0RvdWJsZShkb3VibGUgZG91YmxlVmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRC
ZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgc2V0VmFsdWVBc0lucHV0
TnVtYmVyKGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKGRvdWJsZVZhbHVlKSwgZXZlbnRCZWhh
dmlvciwgZWMpOworfQorCit2b2lkIElucHV0VHlwZTo6c2V0VmFsdWVBc0lucHV0TnVtYmVyKGNv
bnN0IElucHV0TnVtYmVyJiwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0CiB7CiAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKIH0KQEAgLTI1MSw3ICsy
NTYsNyBAQCBib29sIElucHV0VHlwZTo6cmFuZ2VVbmRlcmZsb3coY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKICAgICBpZiAoIWlzU3RlcHBhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGRvdWJsZSBudW1lcmljVmFsdWUgPSBwYXJzZVRvTnVtYmVyKHZhbHVlLCBudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgbnVt
ZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlck9yTmFOKHZhbHVlKTsKICAgICBpZiAoaXNuYW4obnVt
ZXJpY1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNjMsMTQgKzI2OCwxNCBA
QCBib29sIElucHV0VHlwZTo6cmFuZ2VPdmVyZmxvdyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dAogICAgIGlmICghaXNTdGVwcGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ZG91YmxlIG51bWVyaWNWYWx1ZSA9IHBhcnNlVG9OdW1iZXIodmFsdWUsIG51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBudW1lcmljVmFs
dWUgPSBwYXJzZVRvTnVtYmVyT3JOYU4odmFsdWUpOwogICAgIGlmIChpc25hbihudW1lcmljVmFs
dWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbnVtZXJpY1ZhbHVlID4g
Y3JlYXRlU3RlcFJhbmdlKFJlamVjdEFueSkubWF4aW11bSgpOwogfQogCi1kb3VibGUgSW5wdXRU
eXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAorSW5wdXROdW1iZXIgSW5wdXRUeXBl
OjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQpAQCAt
Mjk2LDcgKzMwMSw3IEBAIGJvb2wgSW5wdXRUeXBlOjppc0luUmFuZ2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgY29uc3QKICAgICBpZiAoIWlzU3RlcHBhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGRvdWJsZSBudW1lcmljVmFsdWUgPSBwYXJzZVRvTnVtYmVyKHZhbHVlLCBudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIg
bnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlck9yTmFOKHZhbHVlKTsKICAgICBpZiAoaXNuYW4o
bnVtZXJpY1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMwOSw3ICszMTQsNyBA
QCBib29sIElucHV0VHlwZTo6aXNPdXRPZlJhbmdlKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBk
b3VibGUgbnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlcih2YWx1ZSwgbnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIG51bWVyaWNWYWx1
ZSA9IHBhcnNlVG9OdW1iZXJPck5hTih2YWx1ZSk7CiAgICAgaWYgKGlzbmFuKG51bWVyaWNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0zMjIsNyArMzI3LDcgQEAgYm9vbCBJbnB1
dFR5cGU6OnN0ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogICAgIGlmICgh
aXNTdGVwcGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZG91YmxlIG51bWVy
aWNWYWx1ZSA9IHBhcnNlVG9OdW1iZXIodmFsdWUsIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBudW1lcmljVmFsdWUgPSBwYXJzZVRv
TnVtYmVyT3JOYU4odmFsdWUpOwogICAgIGlmIChpc25hbihudW1lcmljVmFsdWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM2MCw3ICszNjUsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjp2
YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0CiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIGRvdWJsZSBudW1lcmljVmFsdWUgPSBwYXJz
ZVRvTnVtYmVyKHZhbHVlLCBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7Cisg
ICAgY29uc3QgSW5wdXROdW1iZXIgbnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlck9yTmFOKHZh
bHVlKTsKICAgICBpZiAoaXNuYW4obnVtZXJpY1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CiAKQEAgLTQ1MywxMyArNDU4LDE4IEBAIHZvaWQgSW5wdXRUeXBlOjpkZXN0cm95
U2hhZG93U3VidHJlZSgpCiAgICAgfQogfQogCi1kb3VibGUgSW5wdXRUeXBlOjpwYXJzZVRvTnVt
YmVyKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBkZWZhdWx0VmFsdWUpIGNvbnN0CitJbnB1dE51bWJl
ciBJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgSW5wdXROdW1i
ZXImIGRlZmF1bHRWYWx1ZSkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gZGVmYXVsdFZhbHVlOwogfQogCi1kb3VibGUgSW5wdXRUeXBlOjpwYXJzZVRvTnVt
YmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiBzcmMsIGRvdWJsZSBkZWZhdWx0VmFs
dWUsIHVuc2lnbmVkICpkZWNpbWFsUGxhY2VzKSBjb25zdAorSW5wdXROdW1iZXIgSW5wdXRUeXBl
OjpwYXJzZVRvTnVtYmVyT3JOYU4oY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHBhcnNlVG9OdW1iZXIoc3RyaW5nLCBudW1lcmljX2xpbWl0czxJbnB1dE51bWJlcj46
OnF1aWV0X05hTigpKTsKK30KKworSW5wdXROdW1iZXIgSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVy
V2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiBzcmMsIGNvbnN0IElucHV0TnVtYmVyJiBk
ZWZhdWx0VmFsdWUsIHVuc2lnbmVkICpkZWNpbWFsUGxhY2VzKSBjb25zdAogewogICAgIGlmIChk
ZWNpbWFsUGxhY2VzKQogICAgICAgICAqZGVjaW1hbFBsYWNlcyA9IDA7CkBAIC00NzIsNyArNDgy
LDcgQEAgYm9vbCBJbnB1dFR5cGU6OnBhcnNlVG9EYXRlQ29tcG9uZW50cyhjb25zdCBTdHJpbmcm
LCBEYXRlQ29tcG9uZW50cyopIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcg
SW5wdXRUeXBlOjpzZXJpYWxpemUoZG91YmxlKSBjb25zdAorU3RyaW5nIElucHV0VHlwZTo6c2Vy
aWFsaXplKGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC04NjgsNyArODc4LDcgQEAgdW5zaWduZWQg
SW5wdXRUeXBlOjp3aWR0aCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSW5wdXRU
eXBlOjphcHBseVN0ZXAoZG91YmxlIGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRs
aW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQsIEFueVN0ZXBIYW5kbGlu
ZyBhbnlTdGVwSGFuZGxpbmcsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU3RlcFJhbmdlIHN0ZXBSYW5nZShjcmVhdGVTdGVw
UmFuZ2UoYW55U3RlcEhhbmRsaW5nKSk7CiAgICAgaWYgKCFzdGVwUmFuZ2UuaGFzU3RlcCgpKSB7
CkBAIC04NzgsMTggKzg4OCwxOCBAQCB2b2lkIElucHV0VHlwZTo6YXBwbHlTdGVwKGRvdWJsZSBj
b3VudCwgQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZywgVGV4dEZpZQogCiAgICAgY29u
c3QgZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogICAg
IHVuc2lnbmVkIGN1cnJlbnREZWNpbWFsUGxhY2VzOwotICAgIGRvdWJsZSBjdXJyZW50ID0gcGFy
c2VUb051bWJlcldpdGhEZWNpbWFsUGxhY2VzKGVsZW1lbnQoKS0+dmFsdWUoKSwgbmFuLCAmY3Vy
cmVudERlY2ltYWxQbGFjZXMpOworICAgIGNvbnN0IElucHV0TnVtYmVyIGN1cnJlbnQgPSBwYXJz
ZVRvTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoZWxlbWVudCgpLT52YWx1ZSgpLCBuYW4sICZjdXJy
ZW50RGVjaW1hbFBsYWNlcyk7CiAgICAgaWYgKCFpc2Zpbml0ZShjdXJyZW50KSkgewogICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRv
dWJsZSBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBzdGVwUmFuZ2Uuc3RlcCgpICogY291bnQ7CisgICAg
SW5wdXROdW1iZXIgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3RlcFJhbmdlLnN0ZXAoKSAqIGNvdW50
OwogICAgIGlmIChpc2luZihuZXdWYWx1ZSkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvdWJsZSBhY2NlcHRhYmxlRXJy
b3JWYWx1ZSA9IHN0ZXBSYW5nZS5hY2NlcHRhYmxlRXJyb3IoKTsKKyAgICBjb25zdCBJbnB1dE51
bWJlciBhY2NlcHRhYmxlRXJyb3JWYWx1ZSA9IHN0ZXBSYW5nZS5hY2NlcHRhYmxlRXJyb3IoKTsK
ICAgICBpZiAobmV3VmFsdWUgLSBzdGVwUmFuZ2UubWluaW11bSgpIDwgLWFjY2VwdGFibGVFcnJv
clZhbHVlKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
bjsKQEAgLTkwOCwxMyArOTE4LDEzIEBAIHZvaWQgSW5wdXRUeXBlOjphcHBseVN0ZXAoZG91Ymxl
IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nLCBUZXh0RmllCiAgICAgaWYg
KG5ld1ZhbHVlID4gc3RlcFJhbmdlLm1heGltdW0oKSkKICAgICAgICAgbmV3VmFsdWUgPSBzdGVw
UmFuZ2UubWF4aW11bSgpOwogCi0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZUFzTnVtYmVyKG5ld1Zh
bHVlLCBlYywgZXZlbnRCZWhhdmlvcik7CisgICAgc2V0VmFsdWVBc0lucHV0TnVtYmVyKG5ld1Zh
bHVlLCBldmVudEJlaGF2aW9yLCBlYyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgQVhPYmpl
Y3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogfQogCi1ib29sIElucHV0VHlwZTo6Z2V0
QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqIHN0ZXApIGNvbnN0Citib29sIElucHV0VHlwZTo6Z2V0
QWxsb3dlZFZhbHVlU3RlcChJbnB1dE51bWJlciogc3RlcCkgY29uc3QKIHsKICAgICBTdGVwUmFu
Z2Ugc3RlcFJhbmdlKGNyZWF0ZVN0ZXBSYW5nZShSZWplY3RBbnkpKTsKICAgICAqc3RlcCA9IHN0
ZXBSYW5nZS5zdGVwKCk7CkBAIC05ODcsNyArOTk3LDcgQEAgdm9pZCBJbnB1dFR5cGU6OnN0ZXBV
cEZyb21SZW5kZXJlcihpbnQgbikKICAgICBpZiAoIXN0ZXBSYW5nZS5oYXNTdGVwKCkpCiAgICAg
ICByZXR1cm47CiAKLSAgICBkb3VibGUgc3RlcCA9IHN0ZXBSYW5nZS5zdGVwKCk7CisgICAgY29u
c3QgSW5wdXROdW1iZXIgc3RlcCA9IHN0ZXBSYW5nZS5zdGVwKCk7CiAKICAgICBpbnQgc2lnbjsK
ICAgICBpZiAoc3RlcCA+IDApCkBAIC05OTcsMjkgKzEwMDcsMjkgQEAgdm9pZCBJbnB1dFR5cGU6
OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKICAgICBlbHNlCiAgICAgICAgIHNpZ24gPSAwOwog
Ci0gICAgY29uc3QgZG91YmxlIG5hbiA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwogICAgIFN0cmluZyBjdXJyZW50U3RyaW5nVmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7
Ci0gICAgZG91YmxlIGN1cnJlbnQgPSBwYXJzZVRvTnVtYmVyKGN1cnJlbnRTdHJpbmdWYWx1ZSwg
bmFuKTsKKyAgICBJbnB1dE51bWJlciBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGN1cnJl
bnRTdHJpbmdWYWx1ZSk7CiAgICAgaWYgKCFpc2Zpbml0ZShjdXJyZW50KSkgewogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwogICAgICAgICBjdXJyZW50ID0gZGVmYXVsdFZhbHVlRm9yU3RlcFVw
KCk7Ci0gICAgICAgIGRvdWJsZSBuZXh0RGlmZiA9IHN0ZXAgKiBuOworICAgICAgICBjb25zdCBJ
bnB1dE51bWJlciBuZXh0RGlmZiA9IHN0ZXAgKiBuOwogICAgICAgICBpZiAoY3VycmVudCA8IHN0
ZXBSYW5nZS5taW5pbXVtKCkgLSBuZXh0RGlmZikKICAgICAgICAgICAgIGN1cnJlbnQgPSBzdGVw
UmFuZ2UubWluaW11bSgpIC0gbmV4dERpZmY7CiAgICAgICAgIGlmIChjdXJyZW50ID4gc3RlcFJh
bmdlLm1heGltdW0oKSAtIG5leHREaWZmKQogICAgICAgICAgICAgY3VycmVudCA9IHN0ZXBSYW5n
ZS5tYXhpbXVtKCkgLSBuZXh0RGlmZjsKLSAgICAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUFzTnVt
YmVyKGN1cnJlbnQsIGVjLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgICAgICBz
ZXRWYWx1ZUFzSW5wdXROdW1iZXIoY3VycmVudCwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
LCBlYyk7CiAgICAgfQotICAgIGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IHN0ZXBSYW5nZS5t
aW5pbXVtKCkpIHx8IChzaWduIDwgMCAmJiBjdXJyZW50ID4gc3RlcFJhbmdlLm1heGltdW0oKSkp
Ci0gICAgICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKHNpZ24gPiAwID8gc3RlcFJh
bmdlLm1pbmltdW0oKSA6IHN0ZXBSYW5nZS5tYXhpbXVtKCkpLCBEaXNwYXRjaElucHV0QW5kQ2hh
bmdlRXZlbnQpOwotICAgIGVsc2UgeworICAgIGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IHN0
ZXBSYW5nZS5taW5pbXVtKCkpIHx8IChzaWduIDwgMCAmJiBjdXJyZW50ID4gc3RlcFJhbmdlLm1h
eGltdW0oKSkpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgc2V0VmFsdWVB
c0lucHV0TnVtYmVyKHNpZ24gPiAwID8gc3RlcFJhbmdlLm1pbmltdW0oKSA6IHN0ZXBSYW5nZS5t
YXhpbXVtKCksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCwgZWMpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGlmIChzdGVwTWlzbWF0Y2goZWxl
bWVudCgpLT52YWx1ZSgpKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0ZXApOwotICAgICAgICAg
ICAgZG91YmxlIG5ld1ZhbHVlOwotICAgICAgICAgICAgZG91YmxlIHNjYWxlID0gcG93KDEwLjAs
IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4KHN0ZXBSYW5nZS5zdGVwRGVjaW1hbFBsYWNlcygpLCBz
dGVwUmFuZ2Uuc3RlcEJhc2VEZWNpbWFsUGxhY2VzKCkpKSk7Ci0gICAgICAgICAgICBkb3VibGUg
YmFzZSA9IHN0ZXBSYW5nZS5zdGVwQmFzZSgpOworICAgICAgICAgICAgY29uc3QgSW5wdXROdW1i
ZXIgc2NhbGUgPSBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8SW5wdXROdW1iZXI+KG1heChzdGVwUmFu
Z2Uuc3RlcERlY2ltYWxQbGFjZXMoKSwgc3RlcFJhbmdlLnN0ZXBCYXNlRGVjaW1hbFBsYWNlcygp
KSkpOworICAgICAgICAgICAgY29uc3QgSW5wdXROdW1iZXIgYmFzZSA9IHN0ZXBSYW5nZS5zdGVw
QmFzZSgpOwogCisgICAgICAgICAgICBJbnB1dE51bWJlciBuZXdWYWx1ZTsKICAgICAgICAgICAg
IGlmIChzaWduIDwgMCkKICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJvdW5kKChiYXNlICsg
Zmxvb3IoKGN1cnJlbnQgLSBiYXNlKSAvIHN0ZXApICogc3RlcCkgKiBzY2FsZSkgLyBzY2FsZTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHNpZ24gPiAwKQpAQCAtMTAzMiw4ICsxMDQyLDcgQEAgdm9p
ZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKICAgICAgICAgICAgIGlmIChu
ZXdWYWx1ZSA+IHN0ZXBSYW5nZS5tYXhpbXVtKCkpCiAgICAgICAgICAgICAgICAgbmV3VmFsdWUg
PSBzdGVwUmFuZ2UubWF4aW11bSgpOwogCi0gICAgICAgICAgICBlbGVtZW50KCktPnNldFZhbHVl
QXNOdW1iZXIobmV3VmFsdWUsIGVjLCBuID09IDEgfHwgbiA9PSAtMSA/IERpc3BhdGNoSW5wdXRB
bmRDaGFuZ2VFdmVudCA6IERpc3BhdGNoTm9FdmVudCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0g
bmV3VmFsdWU7CisgICAgICAgICAgICBzZXRWYWx1ZUFzSW5wdXROdW1iZXIobmV3VmFsdWUsIG4g
PT0gMSB8fCBuID09IC0xID8gRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50IDogRGlzcGF0Y2hO
b0V2ZW50LCBlYyk7CiAgICAgICAgICAgICBpZiAobiA+IDEpCiAgICAgICAgICAgICAgICAgYXBw
bHlTdGVwKG4gLSAxLCBBbnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZl
bnQsIGVjKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAtMSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlw
ZS5oCmluZGV4IDcwNGIyMzc1ZTc0ODI2MDI5NzFmM2Y5YjBkYjU2YmQ1ZGRjYjhmNGQuLjc2ZWJk
NDg2NDc4M2M0Y2UzZTEwOGU5Mzg5MDYyMzY2MDQxMWMwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5
cGUuaApAQCAtMTM3LDggKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkZWZh
dWx0VmFsdWUoKSBjb25zdDsgLy8gQ2hlY2tlZCBhZnRlciBldmVuIGZhbGxiYWNrVmFsdWUsIG9u
bHkgd2hlbiB0aGUgdmFsdWVXaXRoRGVmYXVsdCBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICAgdmly
dHVhbCBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdmlydHVhbCBkb3Vi
bGUgdmFsdWVBc051bWJlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzTnVt
YmVyKGRvdWJsZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OworICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVBc0RvdWJsZShkb3VibGUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0lucHV0TnVt
YmVyKGNvbnN0IElucHV0TnVtYmVyJiwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OwogCiAgICAgLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnMKICAgICB2aXJ0dWFs
IFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwpAQCAtMTU1LDEyICsxNTYsMTIgQEAg
cHVibGljOgogICAgIGJvb2wgcmFuZ2VPdmVyZmxvdyhjb25zdCBTdHJpbmcmKSBjb25zdDsKICAg
ICBib29sIGlzSW5SYW5nZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBib29sIGlzT3V0T2ZS
YW5nZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0VmFs
dWVGb3JTdGVwVXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIElucHV0TnVtYmVyIGRlZmF1bHRWYWx1
ZUZvclN0ZXBVcCgpIGNvbnN0OwogICAgIGRvdWJsZSBtaW5pbXVtKCkgY29uc3Q7CiAgICAgZG91
YmxlIG1heGltdW0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2l6ZVNob3VsZEluY2x1ZGVE
ZWNvcmF0aW9uKGludCBkZWZhdWx0U2l6ZSwgaW50JiBwcmVmZXJyZWRTaXplKSBjb25zdDsKICAg
ICBib29sIHN0ZXBNaXNtYXRjaChjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0QWxsb3dlZFZhbHVlU3RlcChkb3VibGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0QWxsb3dlZFZhbHVlU3RlcChJbnB1dE51bWJlciopIGNvbnN0OwogICAgIHZpcnR1YWwgU3Rl
cFJhbmdlIGNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzdGVwVXAoaW50LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHN0
ZXBVcEZyb21SZW5kZXJlcihpbnQpOwpAQCAtMjYwLDE1ICsyNjEsMTUgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgU3RyaW5nIGRlZmF1bHRUb29sVGlwKCkgY29uc3Q7CiAKICAgICAvLyBQYXJzZXMg
dGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBlLCBhbmQgcmV0dXJuCi0gICAgLy8gdGhl
IGRvdWJsZSB2YWx1ZSBmb3IgdGhlIHBhcnNpbmcgcmVzdWx0IGlmIHRoZSBwYXJzaW5nCisgICAg
Ly8gdGhlIElucHV0TnVtYmVyIHZhbHVlIGZvciB0aGUgcGFyc2luZyByZXN1bHQgaWYgdGhlIHBh
cnNpbmcKICAgICAvLyBzdWNjZWVkczsgUmV0dXJucyBkZWZhdWx0VmFsdWUgb3RoZXJ3aXNlLiBU
aGlzIGZ1bmN0aW9uIGNhbgogICAgIC8vIHJldHVybiBOYU4gb3IgSW5maW5pdHkgb25seSBpZiBk
ZWZhdWx0VmFsdWUgaXMgTmFOIG9yIEluZmluaXR5LgotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNl
VG9OdW1iZXIoY29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3Q7CisgICAg
dmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IElu
cHV0TnVtYmVyJiBkZWZhdWx0VmFsdWUpIGNvbnN0OwogCi0gICAgLy8gUGFyc2VzIHRoZSBzcGVj
aWZpZWQgc3RyaW5nIGZvciB0aGUgdHlwZSBhcyBwYXJzZVRvRG91YmxlKCkgZG9lcy4KKyAgICAv
LyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgZm9yIHRoZSB0eXBlIGFzIHBhcnNlVG9OdW1i
ZXIoKSBkb2VzLgogICAgIC8vIEluIGFkZGl0aW9uLCBpdCBzdG9yZXMgdGhlIG51bWJlciBvZiBk
aWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQKICAgICAvLyBpbnRvICpkZWNpbWFsUGxhY2Vz
LgotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9OdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhjb25z
dCBTdHJpbmcmLCBkb3VibGUgZGVmYXVsdFZhbHVlLCB1bnNpZ25lZCogZGVjaW1hbFBsYWNlcykg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyV2l0aERlY2ltYWxQ
bGFjZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgSW5wdXROdW1iZXImIGRlZmF1bHRWYWx1ZSwgdW5z
aWduZWQqIGRlY2ltYWxQbGFjZXMpIGNvbnN0OwogCiAgICAgLy8gUGFyc2VzIHRoZSBzcGVjaWZp
ZWQgc3RyaW5nIGZvciB0aGlzIElucHV0VHlwZSwgYW5kIHJldHVybnMgdHJ1ZSBpZiBpdAogICAg
IC8vIGlzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuIEFuIGluc3RhbmNlIHBvaW50ZWQgYnkgdGhlIERh
dGVDb21wb25lbnRzKgpAQCAtMjc2LDEwICsyNzcsMTAgQEAgcHVibGljOgogICAgIC8vIGZhaWxz
LiBUaGUgRGF0ZUNvbXBvbmVudHMqIHBhcmFtZXRlciBtYXkgYmUgMC4KICAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VUb0RhdGVDb21wb25lbnRzKGNvbnN0IFN0cmluZyYsIERhdGVDb21wb25lbnRzKikg
Y29uc3Q7CiAKLSAgICAvLyBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNw
ZWNpZmllZCBkb3VibGUgdmFsdWUgZm9yIHRoZQorICAgIC8vIENyZWF0ZSBhIHN0cmluZyByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIElucHV0TnVtYmVyIHZhbHVlIGZvciB0aGUKICAg
ICAvLyBpbnB1dCB0eXBlLiBJZiBOYU4gb3IgSW5maW5pdHkgaXMgc3BlY2lmaWVkLCB0aGlzIHJl
dHVybnMgYW4gZW1wdHkKICAgICAvLyBzdHJpbmcuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
Zm9yIHR5cGVzIHdpdGhvdXQgdmFsdWVBc051bWJlci4KLSAgICB2aXJ0dWFsIFN0cmluZyBzZXJp
YWxpemUoZG91YmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUoY29uc3Qg
SW5wdXROdW1iZXImKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0luZGV0ZXJt
aW5hdGVBcHBlYXJhbmNlKCkgY29uc3Q7CiAKQEAgLTI5MywxMCArMjk0LDExIEBAIHByb3RlY3Rl
ZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50OyB9CiAgICAgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZBY3RpdmUoS2V5Ym9hcmRF
dmVudCopIGNvbnN0OwogICAgIENocm9tZSogY2hyb21lKCkgY29uc3Q7CisgICAgSW5wdXROdW1i
ZXIgcGFyc2VUb051bWJlck9yTmFOKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gQWRkcyBzdGVwIHZhbHVlICog
Y291bnQgdG8gdGhlIGN1cnJlbnQgdmFsdWUuCi0gICAgdm9pZCBhcHBseVN0ZXAoZG91YmxlIGNv
dW50LCBBbnlTdGVwSGFuZGxpbmcsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGFwcGx5U3RlcChpbnQgY291bnQsIEFueVN0ZXBIYW5kbGluZywgVGV4
dEZpZWxkRXZlbnRCZWhhdmlvciwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gUmF3IHBvaW50
ZXIgYmVjYXVzZSB0aGUgSFRNTElucHV0RWxlbWVudCBvYmplY3Qgb3ducyB0aGlzIElucHV0VHlw
ZSBvYmplY3QuCiAgICAgSFRNTElucHV0RWxlbWVudCogbV9lbGVtZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL01vbnRoSW5wdXRUeXBlLmNwcAppbmRleCBmYTM1NjYyNjY4NDg3ZWZjMWQxZmVjNGNlY2Nh
YWVmNTQ0NjRjOThmLi40YjdjZDM3NDUwM2ExNTA2OTNiNjg3ZDk1NjJkM2NmM2JhOTJiZTkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcApAQCAtODIsNyArODIsNyBAQCBT
dHJpbmcgTW9udGhJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHMoZG91YmxlIHZh
bHVlKSBjb25zdAogICAgIHJldHVybiBzZXJpYWxpemVXaXRoQ29tcG9uZW50cyhkYXRlKTsKIH0K
IAotZG91YmxlIE1vbnRoSW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAor
SW5wdXROdW1iZXIgTW9udGhJbnB1dFR5cGU6OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0
CiB7CiAgICAgZG91YmxlIGN1cnJlbnQgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgZG91YmxlIHV0
Y09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwpAQCAtMTAxLDE0ICsxMDEsMTQgQEAgU3Rl
cFJhbmdlIE1vbnRoSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFu
eVN0ZXBIYW5kbGluZykgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sIChtb250aERlZmF1bHRT
dGVwLCBtb250aERlZmF1bHRTdGVwQmFzZSwgbW9udGhTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5n
ZTo6UGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKSk7CiAKLSAgICBkb3VibGUgc3RlcEJh
c2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwg
RGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgpKTsKLSAgICBkb3VibGUgbWluaW11bSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEYXRlQ29t
cG9uZW50czo6bWluaW11bU1vbnRoKCkpOwotICAgIGRvdWJsZSBtYXhpbXVtID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIERhdGVDb21wb25lbnRz
OjptYXhpbXVtTW9udGgoKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIgc3RlcEJhc2UgPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERv
dWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgpKSk7CisgICAg
Y29uc3QgSW5wdXROdW1iZXIgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29t
cG9uZW50czo6bWluaW11bU1vbnRoKCkpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtYXhpbXVt
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIGNv
bnZlcnREb3VibGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptYXhpbXVtTW9udGgoKSkp
OwogICAgIFN0ZXBSYW5nZTo6TnVtYmVyV2l0aERlY2ltYWxQbGFjZXNPck1pc3Npbmcgc3RlcCA9
IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBl
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJh
bmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24pOwog
fQogCi1kb3VibGUgTW9udGhJbnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBz
cmMsIGRvdWJsZSBkZWZhdWx0VmFsdWUpIGNvbnN0CitJbnB1dE51bWJlciBNb250aElucHV0VHlw
ZTo6cGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNyYywgY29uc3QgSW5wdXROdW1iZXImIGRl
ZmF1bHRWYWx1ZSkgY29uc3QKIHsKICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwogICAgIGlmICgh
cGFyc2VUb0RhdGVDb21wb25lbnRzKHNyYywgJmRhdGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElu
cHV0VHlwZS5oCmluZGV4IDVlMGMzYmFlNDRkYTEzMzg1ZDQwMzQzOGNlOWViNDBhMWMxYTYxMTQu
LjJiZjM3Mjc3Y2I2Zjk4YzFiZjlmNjRiMmYxNTQxNDY0NmI5ODYzOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL01vbnRoSW5wdXRUeXBlLmgKQEAgLTQ3LDggKzQ3LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IFN0cmluZyBzZXJpYWxpemVXaXRoTWlsbGlzZWNvbmRzKGRvdWJsZSkgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmLCBkb3VibGUp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGRlZmF1bHRWYWx1ZUZvclN0ZXBV
cCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgSW5wdXROdW1iZXIgcGFyc2VUb051bWJl
cihjb25zdCBTdHJpbmcmLCBjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgSW5wdXROdW1iZXIgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBTdGVwUmFuZ2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGlu
ZykgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50
c0ludGVybmFsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBEYXRlQ29tcG9uZW50cyop
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0ZUNv
bXBvbmVudHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCmluZGV4IGQ1M2U1ZDI1NDRkM2ZiM2JhYzFj
MjAxZDVmMzYwN2Q4MWNiMjI2ZWMuLjZjMjFiMzlkMWFiZDBkNjE4ODJmNDBkNDlkZGMwMTgyMDA1
NDVlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAKQEAgLTc5LDIy
ICs3OSwzOSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE51bWJlcklucHV0VHlwZTo6Zm9ybUNvbnRy
b2xUeXBlKCkgY29uc3QKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6Om51bWJlcigpOwogfQog
Ci1kb3VibGUgTnVtYmVySW5wdXRUeXBlOjp2YWx1ZUFzTnVtYmVyKCkgY29uc3QKK2RvdWJsZSBO
dW1iZXJJbnB1dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBjb25zdAogewotICAgIHJldHVybiBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS0+dmFsdWUoKSwgbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCkpOworICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50
KCktPnZhbHVlKCkpOwogfQogCi12b2lkIE51bWJlcklucHV0VHlwZTo6c2V0VmFsdWVBc051bWJl
cihkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit2b2lkIE51bWJlcklucHV0VHlwZTo6c2V0VmFsdWVB
c0RvdWJsZShkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhh
dmlvciwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG5ld1ZhbHVlIDwgLW51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpIHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVz
ZSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXggZm9yIG51bWJlciBpbnB1dCB0eXBlLgorICAg
IGNvbnN0IGRvdWJsZSBmbG9hdE1heCA9IGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVyKG51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOworICAgIGlmIChuZXdWYWx1ZSA8IC1mbG9hdE1heCkg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChuZXdWYWx1ZSA+IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpIHsKKyAg
ICBpZiAobmV3VmFsdWUgPiBmbG9hdE1heCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2Vy
aWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1
ZShzZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7Cit9CisK
K3ZvaWQgTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFzSW5wdXROdW1iZXIoY29uc3QgSW5wdXRO
dW1iZXImIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIG51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCBmb3IgbnVtYmVyIGlucHV0IHR5cGUuCisgICAgY29u
c3QgSW5wdXROdW1iZXIgZmxvYXRNYXggPSBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihudW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKKyAgICBpZiAobmV3VmFsdWUgPCAtZmxvYXRNYXgp
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAobmV3VmFsdWUgPiBmbG9hdE1heCkgeworICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsZW1lbnQoKS0+c2V0VmFs
dWUoc2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogfQog
CiBib29sIE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbnN0IFN0cmluZyYgdmFs
dWUpIGNvbnN0CkBAIC0xMTMsMTAgKzEzMCwxMyBAQCBTdGVwUmFuZ2UgTnVtYmVySW5wdXRUeXBl
OjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29ucwog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24s
IHN0ZXBEZXNjcmlwdGlvbiwgKG51bWJlckRlZmF1bHRTdGVwLCBudW1iZXJEZWZhdWx0U3RlcEJh
c2UsIG51bWJlclN0ZXBTY2FsZUZhY3RvcikpOwogCiAgICAgdW5zaWduZWQgc3RlcEJhc2VEZWNp
bWFsUGxhY2VzOwotICAgIGRvdWJsZSBzdGVwQmFzZVZhbHVlID0gcGFyc2VUb051bWJlcldpdGhE
ZWNpbWFsUGxhY2VzKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgbnVtYmVy
RGVmYXVsdFN0ZXBCYXNlLCAmc3RlcEJhc2VEZWNpbWFsUGxhY2VzKTsKKyAgICBjb25zdCBJbnB1
dE51bWJlciBzdGVwQmFzZVZhbHVlID0gcGFyc2VUb051bWJlcldpdGhEZWNpbWFsUGxhY2VzKGVs
ZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNl
LCAmc3RlcEJhc2VEZWNpbWFsUGxhY2VzKTsKICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNp
bWFsUGxhY2VzIHN0ZXBCYXNlKHN0ZXBCYXNlVmFsdWUsIG1pbihzdGVwQmFzZURlY2ltYWxQbGFj
ZXMsIDE2dSkpOwotICAgIGRvdWJsZSBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkt
PmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgp
KTsKLSAgICBkb3VibGUgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0
QXR0cmlidXRlKG1heEF0dHIpLCBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCBmb3Ig
bnVtYmVyIGlucHV0IHR5cGUuCisgICAgY29uc3QgSW5wdXROdW1iZXIgZmxvYXRNYXggPSBjb252
ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKKyAg
ICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZh
c3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIC1mbG9hdE1heCk7CisgICAgY29uc3QgSW5wdXROdW1i
ZXIgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1h
eEF0dHIpLCBmbG9hdE1heCk7CiAKICAgICBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxh
Y2VzT3JNaXNzaW5nIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcs
IHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7
CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwg
c3RlcERlc2NyaXB0aW9uKTsKQEAgLTE4NiwxNyArMjA2LDE3IEBAIHZvaWQgTnVtYmVySW5wdXRU
eXBlOjpoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqIGV2ZW50KQogICAgIGhhbmRsZVdoZWVs
RXZlbnRGb3JTcGluQnV0dG9uKGV2ZW50KTsKIH0KIAotZG91YmxlIE51bWJlcklucHV0VHlwZTo6
cGFyc2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29u
c3QKK0lucHV0TnVtYmVyIE51bWJlcklucHV0VHlwZTo6cGFyc2VUb051bWJlcihjb25zdCBTdHJp
bmcmIHNyYywgY29uc3QgSW5wdXROdW1iZXImIGRlZmF1bHRWYWx1ZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3JjLCBkZWZhdWx0VmFsdWUpOworICAg
IHJldHVybiBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihwYXJzZVRvRG91YmxlRm9yTnVtYmVy
VHlwZShzcmMsIGRlZmF1bHRWYWx1ZSkpOwogfQogCi1kb3VibGUgTnVtYmVySW5wdXRUeXBlOjpw
YXJzZVRvTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiBzcmMsIGRvdWJsZSBk
ZWZhdWx0VmFsdWUsIHVuc2lnbmVkICpkZWNpbWFsUGxhY2VzKSBjb25zdAorSW5wdXROdW1iZXIg
TnVtYmVySW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3Ry
aW5nJiBzcmMsIGNvbnN0IElucHV0TnVtYmVyJiBkZWZhdWx0VmFsdWUsIHVuc2lnbmVkICpkZWNp
bWFsUGxhY2VzKSBjb25zdAogewotICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlw
ZVdpdGhEZWNpbWFsUGxhY2VzKHNyYywgZGVjaW1hbFBsYWNlcywgZGVmYXVsdFZhbHVlKTsKKyAg
ICByZXR1cm4gY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIocGFyc2VUb0RvdWJsZUZvck51bWJl
clR5cGVXaXRoRGVjaW1hbFBsYWNlcyhzcmMsIGRlY2ltYWxQbGFjZXMsIGRlZmF1bHRWYWx1ZSkp
OwogfQogCi1TdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzZXJpYWxpemUoZG91YmxlIHZhbHVlKSBj
b25zdAorU3RyaW5nIE51bWJlcklucHV0VHlwZTo6c2VyaWFsaXplKGNvbnN0IElucHV0TnVtYmVy
JiB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1
dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmgKaW5kZXggODc3
YmNiNDU2YzAxYzhkZDk1MWQ4MWQ0OTI1MTBlNDNjMTliN2YyMS4uYWRhZTFkMjYxZjZlMjZiZWYz
NzFkMWQxY2UyMzFkMmVkMTRhYTJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9O
dW1iZXJJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlw
ZS5oCkBAIC00Miw4ICs0Miw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTnVtYmVySW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogVGV4dEZpZWxkSW5wdXRUeXBlKGVsZW1l
bnQpIHsgfQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzTnVtYmVyKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNOdW1iZXIoZG91YmxlLCBU
ZXh0RmllbGRFdmVudEJlaGF2aW9yLCBFeGNlcHRpb25Db2RlJikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBkb3VibGUgdmFsdWVBc0RvdWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZUFzRG91YmxlKGRvdWJsZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
ciwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUFzSW5wdXROdW1iZXIoY29uc3QgSW5wdXROdW1iZXImLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yLCBFeGNlcHRpb25Db2RlJikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHR5
cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgdHlwZU1pc21hdGNoKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNp
emVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihpbnQgZGVmYXVsdFNpemUsIGludCYgcHJlZmVycmVk
U2l6ZSkgY29uc3QgT1ZFUlJJREU7CkBAIC01MSw5ICs1Miw5IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBTdGVwUmFuZ2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZykgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50
KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxFdmVu
dCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9OdW1iZXIoY29uc3QgU3Ry
aW5nJiwgZG91YmxlKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRv
TnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1bnNpZ25lZCop
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgSW5wdXROdW1iZXIgcGFyc2VUb051bWJlcihjb25z
dCBTdHJpbmcmLCBjb25zdCBJbnB1dE51bWJlciYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgSW5wdXROdW1iZXIgcGFyc2VUb051bWJlcldpdGhEZWNpbWFsUGxhY2VzKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IElucHV0TnVtYmVyJiwgdW5zaWduZWQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXImKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBTdHJpbmcgbG9jYWxpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKaW5kZXggMWVlNjhiYTUyNjc2NGQxOTYxM2Q4
N2Y4YTY0NWViMDZmNDRkZjY5YS4uYzJmNzNiZWNiNDI5NTY2YjcyN2ZmZjdjMjdiM2VmZWQwZjA5
Y2FiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgc3RhdGljIGNvbnN0IGludCByYW5nZURlZmF1bHRTdGVwID0gMTsKIHN0YXRpYyBjb25z
dCBpbnQgcmFuZ2VEZWZhdWx0U3RlcEJhc2UgPSAwOwogc3RhdGljIGNvbnN0IGludCByYW5nZVN0
ZXBTY2FsZUZhY3RvciA9IDE7CiAKLXN0YXRpYyBkb3VibGUgZW5zdXJlTWF4aW11bShkb3VibGUg
cHJvcG9zZWRWYWx1ZSwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBmYWxsYmFja1ZhbHVlKQorc3Rh
dGljIElucHV0TnVtYmVyIGVuc3VyZU1heGltdW0oY29uc3QgSW5wdXROdW1iZXImIHByb3Bvc2Vk
VmFsdWUsIGNvbnN0IElucHV0TnVtYmVyJiBtaW5pbXVtLCBjb25zdCBJbnB1dE51bWJlciYgZmFs
bGJhY2tWYWx1ZSkKIHsKICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZSA+PSBtaW5pbXVtID8gcHJv
cG9zZWRWYWx1ZSA6IHN0ZDo6bWF4KG1pbmltdW0sIGZhbGxiYWNrVmFsdWUpOwogfQpAQCAtODAs
MTIgKzgwLDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmFuZ2VJbnB1dFR5cGU6OmZvcm1Db250
cm9sVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpyYW5nZSgpOwogfQog
Ci1kb3VibGUgUmFuZ2VJbnB1dFR5cGU6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAorZG91YmxlIFJh
bmdlSW5wdXRUeXBlOjp2YWx1ZUFzRG91YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyc2VU
b051bWJlcihlbGVtZW50KCktPnZhbHVlKCksIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpKTsKKyAgICByZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZWxlbWVudCgp
LT52YWx1ZSgpKTsKIH0KIAotdm9pZCBSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWVBc051bWJlcihk
b3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvciwgRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0Cit2b2lkIFJhbmdlSW5wdXRUeXBlOjpzZXRWYWx1ZUFzSW5wdXRO
dW1iZXIoY29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9y
IGV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewogICAgIGVsZW1lbnQoKS0+
c2V0VmFsdWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiB9CkBAIC05OSw4
ICs5OSw4IEBAIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0
ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbiwgc3RlcERlc2NyaXB0aW9uLCAo
cmFuZ2VEZWZhdWx0U3RlcCwgcmFuZ2VEZWZhdWx0U3RlcEJhc2UsIHJhbmdlU3RlcFNjYWxlRmFj
dG9yKSk7CiAKLSAgICBkb3VibGUgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCByYW5nZURlZmF1bHRNaW5pbXVtKTsKLSAgICBkb3Vi
bGUgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RH
ZXRBdHRyaWJ1dGUobWF4QXR0ciksIHJhbmdlRGVmYXVsdE1heGltdW0pLCBtaW5pbXVtLCByYW5n
ZURlZmF1bHRNYXhpbXVtKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIHJhbmdlRGVmYXVs
dE1pbmltdW0pOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1heGltdW0gPSBlbnN1cmVNYXhpbXVt
KHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCByYW5n
ZURlZmF1bHRNYXhpbXVtKSwgbWluaW11bSwgcmFuZ2VEZWZhdWx0TWF4aW11bSk7CiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lvblZhbHVlID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0
cmlidXRlKHByZWNpc2lvbkF0dHIpOwogICAgIGlmICghcHJlY2lzaW9uVmFsdWUuaXNOdWxsKCkp
IHsKQEAgLTE0MSwyNSArMTQxLDE2IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIAogICAgIGNvbnN0IFN0cmluZyYga2V5ID0g
ZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKIAotICAgIGRvdWJsZSBjdXJyZW50ID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCktPnZhbHVlKCksIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFO
KGVsZW1lbnQoKS0+dmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzZmluaXRlKGN1cnJlbnQpKTsKIAog
ICAgIFN0ZXBSYW5nZSBzdGVwUmFuZ2UoY3JlYXRlU3RlcFJhbmdlKFJlamVjdEFueSkpOwogCi0g
ICAgZG91YmxlIHN0ZXAsIGJpZ1N0ZXA7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVsZW1l
bnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0ciksICJhbnkiKSkgewotICAgICAgICAvLyBG
SVhNRTogV2UgY2FuJ3QgdXNlIHN0ZXBVcCgpIGZvciB0aGUgc3RlcCB2YWx1ZSAiYW55Ii4gU28s
IHdlIGluY3JlYXNlCi0gICAgICAgIC8vIG9yIGRlY3JlYXNlIHRoZSB2YWx1ZSBieSAxLzEwMCBv
ZiB0aGUgdmFsdWUgcmFuZ2UuIElzIGl0IHJlYXNvbmFibGU/Ci0gICAgICAgIHN0ZXAgPSAoc3Rl
cFJhbmdlLm1heGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwOwotICAgICAgICBi
aWdTdGVwID0gc3RlcCAqIDEwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZWxlbWVudCgp
LT5nZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotCi0gICAgICAgIGJpZ1N0ZXAgPSAoc3RlcFJhbmdlLm1heGltdW0oKSAtIHN0ZXBS
YW5nZS5taW5pbXVtKCkpIC8gMTA7Ci0gICAgICAgIGlmIChiaWdTdGVwIDwgc3RlcCkKLSAgICAg
ICAgICAgIGJpZ1N0ZXAgPSBzdGVwOwotICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB1
c2Ugc3RlcFVwKCkgZm9yIHRoZSBzdGVwIHZhbHVlICJhbnkiLiBTbywgd2UgaW5jcmVhc2UKKyAg
ICAvLyBvciBkZWNyZWFzZSB0aGUgdmFsdWUgYnkgMS8xMDAgb2YgdGhlIHZhbHVlIHJhbmdlLiBJ
cyBpdCByZWFzb25hYmxlPworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXAgPSBlcXVhbElnbm9y
aW5nQ2FzZShlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLCAiYW55IikgPyAo
c3RlcFJhbmdlLm1heGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwIDogc3RlcFJh
bmdlLnN0ZXAoKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBiaWdTdGVwID0gbWF4KChzdGVwUmFu
Z2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0oKSkgLyAxMCwgc3RlcCk7CiAKICAgICBi
b29sIGlzVmVydGljYWwgPSBmYWxzZTsKICAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigpKSB7
CkBAIC0xNjcsNyArMTU4LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBpc1ZlcnRpY2FsID0gcGFydCA9PSBT
bGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ7CiAgICAg
fQogCi0gICAgZG91YmxlIG5ld1ZhbHVlOworICAgIElucHV0TnVtYmVyIG5ld1ZhbHVlOwogICAg
IGlmIChrZXkgPT0gIlVwIikKICAgICAgICAgbmV3VmFsdWUgPSBjdXJyZW50ICsgc3RlcDsKICAg
ICBlbHNlIGlmIChrZXkgPT0gIkRvd24iKQpAQCAtMTkyLDcgKzE4Myw3IEBAIHZvaWQgUmFuZ2VJ
bnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBp
ZiAobmV3VmFsdWUgIT0gY3VycmVudCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAg
ICAgICBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaENoYW5n
ZUV2ZW50OwotICAgICAgICBzZXRWYWx1ZUFzTnVtYmVyKG5ld1ZhbHVlLCBldmVudEJlaGF2aW9y
LCBlYyk7CisgICAgICAgIHNldFZhbHVlQXNJbnB1dE51bWJlcihuZXdWYWx1ZSwgZXZlbnRCZWhh
dmlvciwgZWMpOwogCiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpKQogICAgICAgICAgICAgZWxlbWVudCgpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPnBvc3ROb3RpZmljYXRpb24oZWxlbWVudCgpLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hl
OjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CkBAIC0yMjIsMTIgKzIxMywxMiBAQCBSZW5kZXJPYmpl
Y3QqIFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKikgYwogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTbGlkZXIoZWxlbWVu
dCgpKTsKIH0KIAotZG91YmxlIFJhbmdlSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0
cmluZyYgc3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorSW5wdXROdW1iZXIgUmFuZ2VJ
bnB1dFR5cGU6OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBzcmMsIGNvbnN0IElucHV0TnVt
YmVyJiBkZWZhdWx0VmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhcnNlVG9Eb3VibGVGb3JO
dW1iZXJUeXBlKHNyYywgZGVmYXVsdFZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydERvdWJsZVRv
SW5wdXROdW1iZXIocGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoc3JjLCBkZWZhdWx0VmFsdWUp
KTsKIH0KIAotU3RyaW5nIFJhbmdlSW5wdXRUeXBlOjpzZXJpYWxpemUoZG91YmxlIHZhbHVlKSBj
b25zdAorU3RyaW5nIFJhbmdlSW5wdXRUeXBlOjpzZXJpYWxpemUoY29uc3QgSW5wdXROdW1iZXIm
IHZhbHVlKSBjb25zdAogewogICAgIGlmICghaXNmaW5pdGUodmFsdWUpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CkBAIC0yNzIsOCArMjYzLDggQEAgU3RyaW5nIFJhbmdlSW5wdXRUeXBlOjpm
YWxsYmFja1ZhbHVlKCkgY29uc3QKIFN0cmluZyBSYW5nZUlucHV0VHlwZTo6c2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0CiB7CiAgICAgU3RlcFJhbmdlIHN0
ZXBSYW5nZShjcmVhdGVTdGVwUmFuZ2UoUmVqZWN0QW55KSk7Ci0gICAgZG91YmxlIHByb3Bvc2Vk
RG91YmxlVmFsdWUgPSBwYXJzZVRvTnVtYmVyKHByb3Bvc2VkVmFsdWUsIHN0ZXBSYW5nZS5kZWZh
dWx0VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoc3RlcFJhbmdl
LmNsYW1wVmFsdWUocHJvcG9zZWREb3VibGVWYWx1ZSkpOworICAgIGNvbnN0IElucHV0TnVtYmVy
IHByb3Bvc2VkTnVtZXJpY1ZhbHVlID0gcGFyc2VUb051bWJlcihwcm9wb3NlZFZhbHVlLCBzdGVw
UmFuZ2UuZGVmYXVsdFZhbHVlKCkpOworICAgIHJldHVybiBzZXJpYWxpemVGb3JOdW1iZXJUeXBl
KHN0ZXBSYW5nZS5jbGFtcFZhbHVlKHByb3Bvc2VkTnVtZXJpY1ZhbHVlKSk7CiB9CiAKIGJvb2wg
UmFuZ2VJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFuZ2VJbnB1dFR5cGUuaAppbmRleCAzNmZhYTFkNzIwZjVkN2ZlYWJiNTI2YWFkYTBlMDU4
ZDg0ZjQ1ZTQyLi4wYzhhMmE5MmRlYzAwZmUyYTIyOTFhZGY4ZmVlNmZjNTUzNTlhNWQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5oCkBAIC00NSw4ICs0NSw4IEBAIHByaXZhdGU6
CiAgICAgUmFuZ2VJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBJbnB1dFR5
cGUoZWxlbWVudCkgeyB9CiAgICAgdmlydHVhbCBib29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIHZhbHVlQXNOdW1iZXIoKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc051bWJlcihkb3VibGUs
IFRleHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnB1dE51bWJlcihjb25zdCBJbnB1dE51bWJlciYsIFRl
eHRGaWVsZEV2ZW50QmVoYXZpb3IsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNSZXF1aXJlZCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgU3RlcFJhbmdlIGNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcpIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1N0ZXBwYWJsZSgpIGNvbnN0IE9WRVJSSURFOwpA
QCAtNTQsOCArNTQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3du
RXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJsZSkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnB1dE51bWJlciBwYXJzZVRvTnVtYmVyKGNvbnN0IFN0
cmluZyYsIGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBT
dHJpbmcgc2VyaWFsaXplKGNvbnN0IElucHV0TnVtYmVyJikgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRNb3VzZUV2ZW50cykgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hh
bmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1N0ZXBS
YW5nZS5jcHAKaW5kZXggZmEzN2MzZWQxZWI0MzA1MzkyOTc3ZWJiZGM1MTI0ZWZiMGIxYzM3Ny4u
M2UxZTIzMzdiNzAyNGEyMzQzNWI3MzcwZDkxYzQxNTJlZjNiODA4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U3RlcFJhbmdlLmNwcApAQCAtNTUsNyArNTUsNyBAQCBTdGVwUmFuZ2U6OlN0ZXBSYW5nZShjb25z
dCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKIHsKIH0KIAotU3RlcFJhbmdlOjpTdGVwUmFuZ2UoY29u
c3QgTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMmIHN0ZXBCYXNlLCBkb3VibGUgbWluaW11bSwgZG91
YmxlIG1heGltdW0sIGNvbnN0IE51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5nJiBzdGVw
LCBjb25zdCBTdGVwRGVzY3JpcHRpb24mIHN0ZXBEZXNjcmlwdGlvbikKK1N0ZXBSYW5nZTo6U3Rl
cFJhbmdlKGNvbnN0IE51bWJlcldpdGhEZWNpbWFsUGxhY2VzJiBzdGVwQmFzZSwgY29uc3QgSW5w
dXROdW1iZXImIG1pbmltdW0sIGNvbnN0IElucHV0TnVtYmVyJiBtYXhpbXVtLCBjb25zdCBOdW1i
ZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyYgc3RlcCwgY29uc3QgU3RlcERlc2NyaXB0aW9u
JiBzdGVwRGVzY3JpcHRpb24pCiAgICAgOiBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1fbWlu
aW11bShtaW5pbXVtKQogICAgICwgbV9zdGVwKHN0ZXAudmFsdWUudmFsdWUpCkBAIC03MSwzNSAr
NzEsMzYgQEAgU3RlcFJhbmdlOjpTdGVwUmFuZ2UoY29uc3QgTnVtYmVyV2l0aERlY2ltYWxQbGFj
ZXMmIHN0ZXBCYXNlLCBkb3VibGUgbWluaW11bSwgZG8KICAgICBBU1NFUlQoaXNmaW5pdGUobV9z
dGVwQmFzZSkpOwogfQogCi1kb3VibGUgU3RlcFJhbmdlOjphY2NlcHRhYmxlRXJyb3IoKSBjb25z
dAorSW5wdXROdW1iZXIgU3RlcFJhbmdlOjphY2NlcHRhYmxlRXJyb3IoKSBjb25zdAogewogICAg
IHJldHVybiBtX3N0ZXAgLyBwb3coMi4wLCBGTFRfTUFOVF9ESUcpOwogfQogCi1kb3VibGUgU3Rl
cFJhbmdlOjphbGlnblZhbHVlRm9yU3RlcChkb3VibGUgY3VycmVudFZhbHVlLCB1bnNpZ25lZCBj
dXJyZW50RGVjaW1hbFBsYWNlcywgZG91YmxlIG5ld1ZhbHVlKSBjb25zdAorSW5wdXROdW1iZXIg
U3RlcFJhbmdlOjphbGlnblZhbHVlRm9yU3RlcChjb25zdCBJbnB1dE51bWJlciYgY3VycmVudFZh
bHVlLCB1bnNpZ25lZCBjdXJyZW50RGVjaW1hbFBsYWNlcywgY29uc3QgSW5wdXROdW1iZXImIHBy
b3Bvc2VkVmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKG5ld1ZhbHVlID49IHBvdygxMC4wLCAyMS4w
KSkKLSAgICAgICAgcmV0dXJuIG5ld1ZhbHVlOworICAgIGlmIChwcm9wb3NlZFZhbHVlID49IHBv
dygxMC4wLCAyMS4wKSkKKyAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CiAKKyAgICBJbnB1
dE51bWJlciBuZXdWYWx1ZSA9IHByb3Bvc2VkVmFsdWU7CiAgICAgaWYgKHN0ZXBNaXNtYXRjaChj
dXJyZW50VmFsdWUpKSB7Ci0gICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2VzLCBjdXJyZW50RGVjaW1hbFBsYWNl
cykpKTsKKyAgICAgICAgY29uc3QgSW5wdXROdW1iZXIgc2NhbGUgPSBwb3coMTAuMCwgc3RhdGlj
X2Nhc3Q8SW5wdXROdW1iZXI+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2VzLCBjdXJyZW50RGVjaW1h
bFBsYWNlcykpKTsKICAgICAgICAgbmV3VmFsdWUgPSByb3VuZChuZXdWYWx1ZSAqIHNjYWxlKSAv
IHNjYWxlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvdWJsZSBzY2FsZSA9IHBvdygxMC4wLCBz
dGF0aWNfY2FzdDxkb3VibGU+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2VzLCBtX3N0ZXBCYXNlRGVj
aW1hbFBsYWNlcykpKTsKKyAgICAgICAgY29uc3QgSW5wdXROdW1iZXIgc2NhbGUgPSBwb3coMTAu
MCwgc3RhdGljX2Nhc3Q8SW5wdXROdW1iZXI+KG1heChtX3N0ZXBEZWNpbWFsUGxhY2VzLCBtX3N0
ZXBCYXNlRGVjaW1hbFBsYWNlcykpKTsKICAgICAgICAgbmV3VmFsdWUgPSByb3VuZCgobV9zdGVw
QmFzZSArIHJvdW5kKChuZXdWYWx1ZSAtIG1fc3RlcEJhc2UpIC8gbV9zdGVwKSAqIG1fc3RlcCkg
KiBzY2FsZSkgLyBzY2FsZTsKICAgICB9CiAKICAgICByZXR1cm4gbmV3VmFsdWU7CiB9Ci1kb3Vi
bGUgU3RlcFJhbmdlOjpjbGFtcFZhbHVlKGRvdWJsZSB2YWx1ZSkgY29uc3QKKworSW5wdXROdW1i
ZXIgU3RlcFJhbmdlOjpjbGFtcFZhbHVlKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSkgY29uc3QK
IHsKLSAgICBkb3VibGUgY2xhbXBlZFZhbHVlID0gbWF4KG1fbWluaW11bSwgbWluKHZhbHVlLCBt
X21heGltdW0pKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBpblJhbmdlVmFsdWUgPSBtYXgobV9t
aW5pbXVtLCBtaW4odmFsdWUsIG1fbWF4aW11bSkpOwogICAgIGlmICghbV9oYXNTdGVwKQotICAg
ICAgICByZXR1cm4gY2xhbXBlZFZhbHVlOwotICAgIC8vIFJvdW5kcyBjbGFtcGVkVmFsdWUgdG8g
bWluaW11bSArIE4gKiBzdGVwLgotICAgIGNsYW1wZWRWYWx1ZSA9IG1fbWluaW11bSArIHJvdW5k
KChjbGFtcGVkVmFsdWUgLSBtX21pbmltdW0pIC8gbV9zdGVwKSAqIG1fc3RlcDsKLSAgICBpZiAo
Y2xhbXBlZFZhbHVlID4gbV9tYXhpbXVtKQotICAgICAgIGNsYW1wZWRWYWx1ZSAtPSBtX3N0ZXA7
CisgICAgICAgIHJldHVybiBpblJhbmdlVmFsdWU7CisgICAgLy8gUm91bmRzIGluUmFuZ2VWYWx1
ZSB0byBtaW5pbXVtICsgTiAqIHN0ZXAuCisgICAgY29uc3QgSW5wdXROdW1iZXIgcm91bmRlZFZh
bHVlID0gbV9taW5pbXVtICsgcm91bmQoKGluUmFuZ2VWYWx1ZSAtIG1fbWluaW11bSkgLyBtX3N0
ZXApICogbV9zdGVwOworICAgIGNvbnN0IElucHV0TnVtYmVyIGNsYW1wZWRWYWx1ZSA9IHJvdW5k
ZWRWYWx1ZSA+IG1fbWF4aW11bSA/IHJvdW5kZWRWYWx1ZSAtIG1fc3RlcCA6IHJvdW5kZWRWYWx1
ZTsKICAgICBBU1NFUlQoY2xhbXBlZFZhbHVlID49IG1fbWluaW11bSk7CiAgICAgQVNTRVJUKGNs
YW1wZWRWYWx1ZSA8PSBtX21heGltdW0pOwogICAgIHJldHVybiBjbGFtcGVkVmFsdWU7CkBAIC0x
NDgsMTYgKzE0OSwxNiBAQCBTdGVwUmFuZ2U6Ok51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNz
aW5nIFN0ZXBSYW5nZTo6cGFyc2VTdGVwKEFueVN0ZXBIYW5kbGluZwogICAgIHJldHVybiBzdGVw
OwogfQogCi1ib29sIFN0ZXBSYW5nZTo6c3RlcE1pc21hdGNoKGRvdWJsZSB2YWx1ZUZvckNoZWNr
KSBjb25zdAorYm9vbCBTdGVwUmFuZ2U6OnN0ZXBNaXNtYXRjaChjb25zdCBJbnB1dE51bWJlciYg
dmFsdWVGb3JDaGVjaykgY29uc3QKIHsKICAgICBpZiAoIW1faGFzU3RlcCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghaXNmaW5pdGUodmFsdWVGb3JDaGVjaykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBkb3VibGUgdmFsdWUgPSBmYWJzKHZhbHVlRm9yQ2hlY2sgLSBtX3N0
ZXBCYXNlKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciB2YWx1ZSA9IGZhYnModmFsdWVGb3JDaGVj
ayAtIG1fc3RlcEJhc2UpOwogICAgIGlmIChpc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAvLyBkb3VibGUncyBmcmFjdGlvbmFsIHBhcnQgc2l6ZSBpcyBEQkxfTUFOX0RJ
Ry1iaXQuIElmIHRoZSBjdXJyZW50IHZhbHVlCisgICAgLy8gSW5wdXROdW1iZXIncyBmcmFjdGlv
bmFsIHBhcnQgc2l6ZSBpcyBEQkxfTUFOX0RJRy1iaXQuIElmIHRoZSBjdXJyZW50IHZhbHVlCiAg
ICAgLy8gaXMgZ3JlYXRlciB0aGFuIHN0ZXAqMl5EQkxfTUFOVF9ESUcsIHRoZSBmb2xsb3dpbmcg
Y29tcHV0YXRpb24gZm9yCiAgICAgLy8gcmVtYWluZGVyIG1ha2VzIG5vIHNlbnNlLgogICAgIGlm
ICh2YWx1ZSAvIHBvdygyLjAsIERCTF9NQU5UX0RJRykgPiBtX3N0ZXApCkBAIC0xNjUsMTAgKzE2
NiwxMCBAQCBib29sIFN0ZXBSYW5nZTo6c3RlcE1pc21hdGNoKGRvdWJsZSB2YWx1ZUZvckNoZWNr
KSBjb25zdAogICAgIC8vIFRoZSBjb21wdXRhdGlvbiBmb2xsb3dzIEhUTUw1IDQuMTAuNy4yLjEw
IGBUaGUgc3RlcCBhdHRyaWJ1dGUnIDoKICAgICAvLyAuLi4gdGhhdCBudW1iZXIgc3VidHJhY3Rl
ZCBmcm9tIHRoZSBzdGVwIGJhc2UgaXMgbm90IGFuIGludGVncmFsIG11bHRpcGxlCiAgICAgLy8g
b2YgdGhlIGFsbG93ZWQgdmFsdWUgc3RlcCwgdGhlIGVsZW1lbnQgaXMgc3VmZmVyaW5nIGZyb20g
YSBzdGVwIG1pc21hdGNoLgotICAgIGRvdWJsZSByZW1haW5kZXIgPSBmYWJzKHZhbHVlIC0gbV9z
dGVwICogcm91bmQodmFsdWUgLyBtX3N0ZXApKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciByZW1h
aW5kZXIgPSBmYWJzKHZhbHVlIC0gbV9zdGVwICogcm91bmQodmFsdWUgLyBtX3N0ZXApKTsKICAg
ICAvLyBBY2NlcHRzIGVycm9zIGluIGxvd2VyIGZyYWN0aW9uYWwgcGFydCB3aGljaCBJRUVFIDc1
NCBzaW5nbGUtcHJlY2lzaW9uCiAgICAgLy8gY2FuJ3QgcmVwcmVzZW50LgotICAgIGRvdWJsZSBj
b21wdXRlZEFjY2VwdGFibGVFcnJvciA9IGFjY2VwdGFibGVFcnJvcigpOworICAgIGNvbnN0IElu
cHV0TnVtYmVyIGNvbXB1dGVkQWNjZXB0YWJsZUVycm9yID0gYWNjZXB0YWJsZUVycm9yKCk7CiAg
ICAgcmV0dXJuIGNvbXB1dGVkQWNjZXB0YWJsZUVycm9yIDwgcmVtYWluZGVyICYmIHJlbWFpbmRl
ciA8IChtX3N0ZXAgLSBjb21wdXRlZEFjY2VwdGFibGVFcnJvcik7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1N0
ZXBSYW5nZS5oCmluZGV4IDFhY2E3NWViYTg3ZmVlYTkzMjg4NWUyMDFiNmYzMGM1MzFlOTVlMmUu
LmNjMzA0OTdmNTM0NDZkYWI2OTllNzg0YTZmOWVkNTFmNDM3Mjk1ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9T
dGVwUmFuZ2UuaApAQCAtMzAsMTMgKzMwLDI2IEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAK
IGVudW0gQW55U3RlcEhhbmRsaW5nIHsgUmVqZWN0QW55LCBBbnlJc0RlZmF1bHRTdGVwIH07CiAK
Ky8vIEZJWE1FOiBUaGUgdHlwZSBJbnB1dE51bWJlciB3aWxsIGJlIHJlcGxhY2VkIHdpdGggRGVj
aW1hbC4KK3R5cGVkZWYgZG91YmxlIElucHV0TnVtYmVyOworCitpbmxpbmUgSW5wdXROdW1iZXIg
Y29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoZG91YmxlIGRvdWJsZVZhbHVlKQoreworICAgIHJl
dHVybiBkb3VibGVWYWx1ZTsKK30KKworaW5saW5lIGRvdWJsZSBjb252ZXJ0SW5wdXROdW1iZXJU
b0RvdWJsZShjb25zdCBJbnB1dE51bWJlciYgbnVtZXJpY1ZhbHVlKQoreworICAgIHJldHVybiBu
dW1lcmljVmFsdWU7Cit9CisKIGNsYXNzIFN0ZXBSYW5nZSB7CiBwdWJsaWM6CiAgICAgc3RydWN0
IE51bWJlcldpdGhEZWNpbWFsUGxhY2VzIHsKICAgICAgICAgdW5zaWduZWQgZGVjaW1hbFBsYWNl
czsKLSAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBJbnB1dE51bWJlciB2YWx1ZTsKIAot
ICAgICAgICBOdW1iZXJXaXRoRGVjaW1hbFBsYWNlcyhkb3VibGUgdmFsdWUgPSAwLCB1bnNpZ25l
ZCBkZWNpbWFsUGxhY2VzID0gMCkKKyAgICAgICAgTnVtYmVyV2l0aERlY2ltYWxQbGFjZXMoSW5w
dXROdW1iZXIgdmFsdWUgPSAwLCB1bnNpZ25lZCBkZWNpbWFsUGxhY2VzID0gMCkKICAgICAgICAg
ICAgIDogZGVjaW1hbFBsYWNlcyhkZWNpbWFsUGxhY2VzKQogICAgICAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKICAgICAgICAgewpAQCAtODIsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAg
ICAgICAgfQogCi0gICAgICAgIGRvdWJsZSBkZWZhdWx0VmFsdWUoKSBjb25zdAorICAgICAgICBJ
bnB1dE51bWJlciBkZWZhdWx0VmFsdWUoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZGVmYXVsdFN0ZXAgKiBzdGVwU2NhbGVGYWN0b3I7CiAgICAgICAgIH0KQEAgLTkwLDI5
ICsxMDMsMjkgQEAgcHVibGljOgogCiAgICAgU3RlcFJhbmdlKCk7CiAgICAgU3RlcFJhbmdlKGNv
bnN0IFN0ZXBSYW5nZSYpOwotICAgIFN0ZXBSYW5nZShjb25zdCBOdW1iZXJXaXRoRGVjaW1hbFBs
YWNlcyYgc3RlcEJhc2UsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSwgY29uc3QgTnVt
YmVyV2l0aERlY2ltYWxQbGFjZXNPck1pc3NpbmcmIHN0ZXAsIGNvbnN0IFN0ZXBEZXNjcmlwdGlv
biYpOwotICAgIGRvdWJsZSBhY2NlcHRhYmxlRXJyb3IoKSBjb25zdDsKLSAgICBkb3VibGUgYWxp
Z25WYWx1ZUZvclN0ZXAoZG91YmxlIGN1cnJlbnRWYWx1ZSwgdW5zaWduZWQgY3VycmVudERlY2lt
YWxQbGFjZXMsIGRvdWJsZSBuZXdWYWx1ZSkgY29uc3Q7Ci0gICAgZG91YmxlIGNsYW1wVmFsdWUo
ZG91YmxlIHZhbHVlKSBjb25zdDsKKyAgICBTdGVwUmFuZ2UoY29uc3QgTnVtYmVyV2l0aERlY2lt
YWxQbGFjZXMmIHN0ZXBCYXNlLCBjb25zdCBJbnB1dE51bWJlciYgbWluaW11bSwgY29uc3QgSW5w
dXROdW1iZXImIG1heGltdW0sIGNvbnN0IE51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNzaW5n
JiBzdGVwLCBjb25zdCBTdGVwRGVzY3JpcHRpb24mKTsKKyAgICBJbnB1dE51bWJlciBhY2NlcHRh
YmxlRXJyb3IoKSBjb25zdDsKKyAgICBJbnB1dE51bWJlciBhbGlnblZhbHVlRm9yU3RlcChjb25z
dCBJbnB1dE51bWJlciYgY3VycmVudFZhbHVlLCB1bnNpZ25lZCBjdXJyZW50RGVjaW1hbFBsYWNl
cywgY29uc3QgSW5wdXROdW1iZXImIG5ld1ZhbHVlKSBjb25zdDsKKyAgICBJbnB1dE51bWJlciBj
bGFtcFZhbHVlKGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNT
dGVwKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTdGVwOyB9Ci0gICAgZG91YmxlIG1heGltdW0oKSBj
b25zdCB7IHJldHVybiBtX21heGltdW07IH0KLSAgICBkb3VibGUgbWluaW11bSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWluaW11bTsgfQorICAgIElucHV0TnVtYmVyIG1heGltdW0oKSBjb25zdCB7IHJl
dHVybiBtX21heGltdW07IH0KKyAgICBJbnB1dE51bWJlciBtaW5pbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9taW5pbXVtOyB9CiAgICAgc3RhdGljIE51bWJlcldpdGhEZWNpbWFsUGxhY2VzT3JNaXNz
aW5nIHBhcnNlU3RlcChBbnlTdGVwSGFuZGxpbmcsIGNvbnN0IFN0ZXBEZXNjcmlwdGlvbiYsIGNv
bnN0IFN0cmluZyYpOwotICAgIGRvdWJsZSBzdGVwKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwOyB9
Ci0gICAgZG91YmxlIHN0ZXBCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwQmFzZTsgfQorICAg
IElucHV0TnVtYmVyIHN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3N0ZXA7IH0KKyAgICBJbnB1dE51
bWJlciBzdGVwQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcEJhc2U7IH0KICAgICB1bnNpZ25l
ZCBzdGVwQmFzZURlY2ltYWxQbGFjZXMoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBCYXNlRGVjaW1h
bFBsYWNlczsgfQogICAgIHVuc2lnbmVkIHN0ZXBEZWNpbWFsUGxhY2VzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGVwRGVjaW1hbFBsYWNlczsgfQogICAgIGludCBzdGVwU2NhbGVGYWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX3N0ZXBEZXNjcmlwdGlvbi5zdGVwU2NhbGVGYWN0b3I7IH0KLSAgICBib29s
IHN0ZXBNaXNtYXRjaChkb3VibGUpIGNvbnN0OworICAgIGJvb2wgc3RlcE1pc21hdGNoKGNvbnN0
IElucHV0TnVtYmVyJikgY29uc3Q7CiAKICAgICAvLyBDbGFtcCB0aGUgbWlkZGxlIHZhbHVlIGFj
Y29yZGluZyB0byB0aGUgc3RlcAotICAgIGRvdWJsZSBkZWZhdWx0VmFsdWUoKSBjb25zdAorICAg
IElucHV0TnVtYmVyIGRlZmF1bHRWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
Y2xhbXBWYWx1ZSgobV9taW5pbXVtICsgbV9tYXhpbXVtKSAvIDIpOwogICAgIH0KIAogICAgIC8v
IE1hcCB2YWx1ZSBpbnRvIDAtMSByYW5nZQotICAgIGRvdWJsZSBwcm9wb3J0aW9uRnJvbVZhbHVl
KGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAgICBJbnB1dE51bWJlciBwcm9wb3J0aW9uRnJvbVZhbHVl
KGNvbnN0IElucHV0TnVtYmVyJiB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX21p
bmltdW0gPT0gbV9tYXhpbXVtKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjEsNyArMTM0
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE1hcCBmcm9tIDAtMSByYW5nZSB0byB2YWx1
ZQotICAgIGRvdWJsZSB2YWx1ZUZyb21Qcm9wb3J0aW9uKGRvdWJsZSBwcm9wb3J0aW9uKSBjb25z
dAorICAgIElucHV0TnVtYmVyIHZhbHVlRnJvbVByb3BvcnRpb24oY29uc3QgSW5wdXROdW1iZXIm
IHByb3BvcnRpb24pIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9taW5pbXVtICsgcHJv
cG9ydGlvbiAqIChtX21heGltdW0gLSBtX21pbmltdW0pOwogICAgIH0KQEAgLTEyOSwxMCArMTQy
LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RlcFJhbmdlJiBvcGVyYXRvciA9KGNvbnN0
IFN0ZXBSYW5nZSYpOwogCi0gICAgY29uc3QgZG91YmxlIG1fbWF4aW11bTsgLy8gbWF4aW11bSBt
dXN0IGJlID49IG1pbmltdW0uCi0gICAgY29uc3QgZG91YmxlIG1fbWluaW11bTsKLSAgICBjb25z
dCBkb3VibGUgbV9zdGVwOwotICAgIGNvbnN0IGRvdWJsZSBtX3N0ZXBCYXNlOworICAgIGNvbnN0
IElucHV0TnVtYmVyIG1fbWF4aW11bTsgLy8gbWF4aW11bSBtdXN0IGJlID49IG1pbmltdW0uCisg
ICAgY29uc3QgSW5wdXROdW1iZXIgbV9taW5pbXVtOworICAgIGNvbnN0IElucHV0TnVtYmVyIG1f
c3RlcDsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtX3N0ZXBCYXNlOwogICAgIGNvbnN0IFN0ZXBE
ZXNjcmlwdGlvbiBtX3N0ZXBEZXNjcmlwdGlvbjsKICAgICBjb25zdCB1bnNpZ25lZCBtX3N0ZXBC
YXNlRGVjaW1hbFBsYWNlczsKICAgICBjb25zdCB1bnNpZ25lZCBtX3N0ZXBEZWNpbWFsUGxhY2Vz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAKaW5kZXggNDgxYWI5ZjdjZjgwZGZl
NzA2MGMxODZhZjRlY2M2ODNkNjEwYTQxMi4uODk1ODQ1MDJjZTEyYTMwYzRkMjFkMWNmYzhhMGRh
MzNiZDQ4MTliMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuY3BwCkBAIC02NCw3
ICs2NCw3IEBAIERhdGVDb21wb25lbnRzOjpUeXBlIFRpbWVJbnB1dFR5cGU6OmRhdGVUeXBlKCkg
Y29uc3QKICAgICByZXR1cm4gRGF0ZUNvbXBvbmVudHM6OlRpbWU7CiB9CiAKLWRvdWJsZSBUaW1l
SW5wdXRUeXBlOjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAorSW5wdXROdW1iZXIgVGlt
ZUlucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QKIHsKICAgICBkb3VibGUg
Y3VycmVudCA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gY2FsY3Vs
YXRlVVRDT2Zmc2V0KCk7CkBAIC03NiwxNiArNzYsMTYgQEAgZG91YmxlIFRpbWVJbnB1dFR5cGU6
OmRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0CiAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHNT
aW5jZU1pZG5pZ2h0KGN1cnJlbnQpOwogICAgIGRvdWJsZSBtaWxsaXNlY29uZHMgPSBkYXRlLm1p
bGxpc2Vjb25kc1NpbmNlRXBvY2goKTsKICAgICBBU1NFUlQoaXNmaW5pdGUobWlsbGlzZWNvbmRz
KSk7Ci0gICAgcmV0dXJuIG1pbGxpc2Vjb25kczsKKyAgICByZXR1cm4gY29udmVydERvdWJsZVRv
SW5wdXROdW1iZXIobWlsbGlzZWNvbmRzKTsKIH0KIAogU3RlcFJhbmdlIFRpbWVJbnB1dFR5cGU6
OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5nKSBjb25zdAog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRp
b24sIHN0ZXBEZXNjcmlwdGlvbiwgKHRpbWVEZWZhdWx0U3RlcCwgdGltZURlZmF1bHRTdGVwQmFz
ZSwgdGltZVN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpTY2FsZWRTdGVwVmFsdWVTaG91bGRC
ZUludGVnZXIpKTsKIAotICAgIGRvdWJsZSBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVu
dCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsKLSAgICBkb3VibGUgbWluaW11bSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEYXRl
Q29tcG9uZW50czo6bWluaW11bVRpbWUoKSk7Ci0gICAgZG91YmxlIG1heGltdW0gPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGF0ZUNvbXBvbmVu
dHM6Om1heGltdW1UaW1lKCkpOworICAgIGNvbnN0IElucHV0TnVtYmVyIHN0ZXBCYXNlID0gcGFy
c2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOworICAg
IGNvbnN0IElucHV0TnVtYmVyIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFz
dEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoRGF0ZUNv
bXBvbmVudHM6Om1pbmltdW1UaW1lKCkpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtYXhpbXVt
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIGNv
bnZlcnREb3VibGVUb0lucHV0TnVtYmVyKERhdGVDb21wb25lbnRzOjptYXhpbXVtVGltZSgpKSk7
CiAgICAgU3RlcFJhbmdlOjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZyBzdGVwID0g
U3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVs
ZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFu
Z2Uoc3RlcEJhc2UsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCmluZGV4IDFjMmMyODZlYzNhY2ZkNWVhZWVk
ZTYyODgzNmU3YWIzMDZhMjNkZDAuLjgyODc1ZTU3NDAzYjFhODJjZjMxZGY0ZDliNmEyZjk0NGJh
OGRjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oCkBAIC00NSw3ICs0NSw3IEBA
IHByaXZhdGU6CiAgICAgVGltZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6
IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgZG91YmxlIGRlZmF1bHRWYWx1ZUZvclN0ZXBVcCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgSW5wdXROdW1iZXIgZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBTdGVwUmFuZ2UgY3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5k
bGluZykgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHBhcnNlVG9EYXRlQ29tcG9u
ZW50c0ludGVybmFsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBEYXRlQ29tcG9uZW50
cyopIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzZXRNaWxsaXNlY29uZFRvRGF0
ZUNvbXBvbmVudHMoZG91YmxlLCBEYXRlQ29tcG9uZW50cyopIGNvbnN0IE9WRVJSSURFOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAKaW5kZXggOTJhYzdkYjgzZjk5NWU0ZWU5MDI1
NTExMWNiOWNiZDhlM2M1NGVlYi4uOWJiODZhZTAyMzViYWIyMzhmZTA4YTQ0NGI0YWIwN2ZmZTQx
YzE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUuY3BwCkBAIC02NSw5ICs2NSw5
IEBAIFN0ZXBSYW5nZSBXZWVrSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRs
aW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uLCBzdGVwRGVzY3JpcHRpb24sICh3ZWVrRGVm
YXVsdFN0ZXAsIHdlZWtEZWZhdWx0U3RlcEJhc2UsIHdlZWtTdGVwU2NhbGVGYWN0b3IsIFN0ZXBS
YW5nZTo6UGFyc2VkU3RlcFZhbHVlU2hvdWxkQmVJbnRlZ2VyKSk7CiAKLSAgICBkb3VibGUgc3Rl
cEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRy
KSwgd2Vla0RlZmF1bHRTdGVwQmFzZSk7Ci0gICAgZG91YmxlIG1pbmltdW0gPSBwYXJzZVRvTnVt
YmVyKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGF0ZUNvbXBvbmVudHM6
Om1pbmltdW1XZWVrKCkpOwotICAgIGRvdWJsZSBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIERhdGVDb21wb25lbnRzOjptYXhpbXVt
V2VlaygpKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCB3ZWVrRGVmYXVsdFN0ZXBCYXNl
KTsKKyAgICBjb25zdCBJbnB1dE51bWJlciBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIGNvbnZlcnREb3VibGVUb0lucHV0TnVtYmVy
KERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7CisgICAgY29uc3QgSW5wdXROdW1iZXIg
bWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKG1heEF0
dHIpLCBjb252ZXJ0RG91YmxlVG9JbnB1dE51bWJlcihEYXRlQ29tcG9uZW50czo6bWF4aW11bVdl
ZWsoKSkpOwogICAgIFN0ZXBSYW5nZTo6TnVtYmVyV2l0aERlY2ltYWxQbGFjZXNPck1pc3Npbmcg
c3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0
aW9uLCBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKICAgICByZXR1cm4g
U3RlcFJhbmdlKHN0ZXBCYXNlLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRp
b24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2FsZW5kYXJQ
aWNrZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NhbGVuZGFyUGlj
a2VyRWxlbWVudC5jcHAKaW5kZXggMWE3YjQ5ZmE2NDhmOWVlMzc4MTQ5OTU0ZTRhNjdiZWUxNjYy
Y2Q1OC4uYWI4YzJlZDkxMDliZjk4MTM0ZjZhMzgyMjU5Yjg2NzVkY2IxZDliYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9DYWxlbmRhclBpY2tlckVsZW1lbnQuY3Bw
CkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBDYWxlbmRhclBpY2tlckVsZW1lbnQ6OndyaXRlRG9j
dW1lbnQoRG9jdW1lbnRXcml0ZXImIHdyaXRlcikKICAgICBTdHJpbmcgbWluU3RyaW5nID0gZGF0
ZS50b1N0cmluZygpOwogICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUo
aW5wdXQtPm1heGltdW0oKSk7CiAgICAgU3RyaW5nIG1heFN0cmluZyA9IGRhdGUudG9TdHJpbmco
KTsKLSAgICBkb3VibGUgc3RlcDsKKyAgICBJbnB1dE51bWJlciBzdGVwOwogICAgIFN0cmluZyBz
dGVwU3RyaW5nID0gaW5wdXQtPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOwogICAgIGlmIChz
dGVwU3RyaW5nLmlzRW1wdHkoKSB8fCAhaW5wdXQtPmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0ZXAp
KQogICAgICAgICBzdGVwU3RyaW5nID0gIjEiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKaW5kZXggODQyMmEzMDE5OTAyMjk5MTFiNThi
NjAwNzhkZDE4MDk2NDVkOWQ3Yy4uMjY5ZWI4MmJmODc3Y2Y3YmI3ZThmZDQ1MjUyOWYzODJjZmM5
ODIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIHN0YXRpYyBkb3VibGUgc2xpZGVyUG9zaXRpb24oSFRN
TElucHV0RWxlbWVudCogZWxlbWVudCkKK2lubGluZSBzdGF0aWMgSW5wdXROdW1iZXIgc2xpZGVy
UG9zaXRpb24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBjb25zdCBTdGVwUmFu
Z2Ugc3RlcFJhbmdlKGVsZW1lbnQtPmNyZWF0ZVN0ZXBSYW5nZShSZWplY3RBbnkpKTsKICAgICBj
b25zdCBkb3VibGUgb2xkVmFsdWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShlbGVtZW50
LT52YWx1ZSgpLCBzdGVwUmFuZ2UuZGVmYXVsdFZhbHVlKCkpOwpAQCAtMTEwLDcgKzExMCw3IEBA
IHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OmxheW91dCgpCiAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IHN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCB8fCBzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYlBhcnQ7CiAKLSAgICBkb3VibGUgZnJhY3Rpb24gPSBzbGlkZXJQb3NpdGlvbihpbnB1
dCkgKiAxMDA7CisgICAgZG91YmxlIGZyYWN0aW9uID0gY29udmVydElucHV0TnVtYmVyVG9Eb3Vi
bGUoc2xpZGVyUG9zaXRpb24oaW5wdXQpICogMTAwKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkKICAg
ICAgICAgc3R5bGUoKS0+c2V0VG9wKExlbmd0aCgxMDAgLSBmcmFjdGlvbiwgUGVyY2VudCkpOwog
ICAgIGVsc2UgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKQEAgLTIzNiwx
MSArMjM2LDEwIEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZyb21Qb2lu
dChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgaWYgKHBvc2l0aW9uID09IGN1cnJlbnRQ
b3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIGZyYWN0aW9uID0gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihwb3NpdGlvbikgLyB0cmFja1NpemU7Ci0gICAgaWYgKGlzVmVydGljYWwg
fHwgIXJlbmRlckJveCgpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAg
ICAgIGZyYWN0aW9uID0gMSAtIGZyYWN0aW9uOworICAgIGNvbnN0IElucHV0TnVtYmVyIHJhdGlv
ID0gY29udmVydERvdWJsZVRvSW5wdXROdW1iZXIoc3RhdGljX2Nhc3Q8ZG91YmxlPihwb3NpdGlv
bikgLyB0cmFja1NpemUpOworICAgIGNvbnN0IElucHV0TnVtYmVyIGZyYWN0aW9uID0gaXNWZXJ0
aWNhbCB8fCAhcmVuZGVyQm94KCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IElucHV0TnVtYmVyKDEpIC0gcmF0aW8gOiByYXRpbzsKICAgICBTdGVwUmFuZ2Ugc3RlcFJhbmdl
KGlucHV0LT5jcmVhdGVTdGVwUmFuZ2UoUmVqZWN0QW55KSk7Ci0gICAgZG91YmxlIHZhbHVlID0g
c3RlcFJhbmdlLmNsYW1wVmFsdWUoc3RlcFJhbmdlLnZhbHVlRnJvbVByb3BvcnRpb24oZnJhY3Rp
b24pKTsKKyAgICBjb25zdCBJbnB1dE51bWJlciB2YWx1ZSA9IHN0ZXBSYW5nZS5jbGFtcFZhbHVl
KHN0ZXBSYW5nZS52YWx1ZUZyb21Qcm9wb3J0aW9uKGZyYWN0aW9uKSk7CiAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBubyBsb25nZXIgYmVpbmcgc2V0IGZyb20gcmVuZGVyZXIuIENvbnNpZGVyIHVw
ZGF0aW5nIHRoZSBtZXRob2QgbmFtZS4KICAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIo
c2VyaWFsaXplRm9yTnVtYmVyVHlwZSh2YWx1ZSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>