<?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>163542</bug_id>
          
          <creation_ts>2016-10-17 06:40:58 -0700</creation_ts>
          <short_desc>Rename setNeedsStyleRecalc to invalidateStyle</short_desc>
          <delta_ts>2016-10-18 05:32:33 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1240941</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-17 06:40:58 -0700</bug_when>
    <thetext>Also rename the associated enums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240944</commentid>
    <comment_count>1</comment_count>
      <attachid>291815</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-17 07:01:33 -0700</bug_when>
    <thetext>Created attachment 291815
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240949</commentid>
    <comment_count>2</comment_count>
      <attachid>291817</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-17 07:26:36 -0700</bug_when>
    <thetext>Created attachment 291817
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240952</commentid>
    <comment_count>3</comment_count>
      <attachid>291818</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-17 08:12:14 -0700</bug_when>
    <thetext>Created attachment 291818
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241062</commentid>
    <comment_count>4</comment_count>
      <attachid>291818</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-17 11:35:41 -0700</bug_when>
    <thetext>Comment on attachment 291818
patch

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

&gt; Source/WebCore/dom/Element.h:549
&gt; +    void invalidateStyle();
&gt; +    WEBCORE_EXPORT void invalidateStyleAndLayers();
&gt; +    void invalidateStyleForSubtree();
&gt; +    void invalidateRenderers();

There’s no question that these names are clearer than the old way.

However, I am not clear on when I should call each one of these. Is there something simple we could write in a comment to make it clear how to choose from among these four? In particular, when would I not have to invalidate layers? When I invalidate a subtree is there some reason I don’t need to worry about layers?

&gt; Source/WebCore/dom/Node.cpp:803
&gt; +    bool markAncestors = styleInvalidationScope() == Style::InvalidationScope::None || scope == Style::InvalidationScope::Renderers;

I don’t understand why this check is correct. I think this needs a  “why” comment.

&gt; Source/WebCore/dom/Node.h:322
&gt; +    void clearNeedsStyleRecalc() { clearStyleInvalidation(); }

This function seems to have a peculiar name now that it’s not paired with a setNeedsStyleRecalc function. Do we really need to keep it?

&gt; Source/WebCore/dom/ShadowRoot.cpp:121
&gt; +    // If this was ever used dynamically child styles would need to be invalidated here.

Needs a comma after the word &quot;dynamically&quot;. But also, what exactly does &quot;used dynamically&quot; mean? Can we say that in a more straightforward way?

&gt; Source/WebCore/dom/Text.cpp:224
&gt; +    if (styleInvalidationScope() == Style::InvalidationScope::Renderers)

Even though this is the highest one, I think that &gt;= makes more logical sense to me here.

&gt; Source/WebCore/style/StyleInvalidationScope.h:36
&gt; +enum class InvalidationScope {
&gt; +    None,
&gt; +    Element,
&gt; +    Subtree,
&gt; +    Renderers
&gt; +};

The word &quot;scope&quot; makes sense when telling something to invalidate. But not as much sense when it’s indicating how much is invalid. It’s also unclear to me that when renderers are &quot;invalidated&quot; that also means the entire subtree is invalidated. Maybe all this is more obvious to someone working in this area, but I am not so sure.

&gt; Source/WebCore/style/StyleInvalidationScope.h:41
&gt; +enum class InvalidationMode {
&gt; +    Normal,
&gt; +    RecompositeLayers
&gt; +};

Maybe this looks better at the call site when setting this mode. But at sites where we use this, it seems that a boolean shouldRecompositeLayers() or something like that would be easier to read.

&gt; Source/WebCore/style/StyleTreeResolver.cpp:203
&gt; +    bool shouldReconstructRenderTree = element.styleInvalidationScope() == InvalidationScope::Renderers || parent().change == Detach;

Same thought about &gt;= here.

&gt; Source/WebCore/style/StyleTreeResolver.cpp:236
&gt; +    if (update.change != Detach &amp;&amp; (parent().change == Force || element.styleInvalidationScope() == InvalidationScope::Subtree))

Why is &quot;==&quot; right here? What about the Renderers case?

&gt; Source/WebCore/style/StyleTreeResolver.cpp:365
&gt; +            if (text.styleInvalidationScope() == InvalidationScope::Renderers &amp;&amp; parent.change != Detach)

Same thought about &gt;= here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241084</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-17 12:07:19 -0700</bug_when>
    <thetext>&gt; I don’t understand why this check is correct. I think this needs a  “why”
&gt; comment.

I don&apos;t really know either (for the latter part).
 
&gt; &gt; Source/WebCore/dom/Node.h:322
&gt; &gt; +    void clearNeedsStyleRecalc() { clearStyleInvalidation(); }
&gt; 
&gt; This function seems to have a peculiar name now that it’s not paired with a
&gt; setNeedsStyleRecalc function. Do we really need to keep it?

Eliminating all NeedsStyleRecalc terminology is bit too much for one patch. This is just where the line is drawn for this one.

&gt; Needs a comma after the word &quot;dynamically&quot;. But also, what exactly does
&gt; &quot;used dynamically&quot; mean? Can we say that in a more straightforward way?

I mean &quot;changed after initialization&quot;.

&gt; The word &quot;scope&quot; makes sense when telling something to invalidate. But not
&gt; as much sense when it’s indicating how much is invalid. It’s also unclear to
&gt; me that when renderers are &quot;invalidated&quot; that also means the entire subtree
&gt; is invalidated. Maybe all this is more obvious to someone working in this
&gt; area, but I am not so sure.

I&apos;m not entirely happy with the names. Suggestions are welcome. Value &apos;InvalidationScope::Element&apos; indicates that the style of the element where it is set is invalid. Value &apos;Subtree&apos; indicates that the element and also all its descendants are invalid. Value &apos;Renderers&apos; indicates that the renderers for the subtree are invalid and need to be rebuild (also recomputing subtree styles).

&gt; &gt; Source/WebCore/style/StyleTreeResolver.cpp:236
&gt; &gt; +    if (update.change != Detach &amp;&amp; (parent().change == Force || element.styleInvalidationScope() == InvalidationScope::Subtree))
&gt; 
&gt; Why is &quot;==&quot; right here? What about the Renderers case?

In Renderers case update.change == Detach. But it could as well be &gt;=.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241398</commentid>
    <comment_count>6</comment_count>
      <attachid>291936</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-18 03:44:25 -0700</bug_when>
    <thetext>Created attachment 291936
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241401</commentid>
    <comment_count>7</comment_count>
      <attachid>291938</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-18 04:46:58 -0700</bug_when>
    <thetext>Created attachment 291938
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241408</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-18 05:30:26 -0700</bug_when>
    <thetext>I went with 

namespace Style {

enum class Validity {
    Valid,
    ElementInvalid,
    SubtreeInvalid,
    SubtreeAndRenderersInvalid
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241409</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-18 05:32:33 -0700</bug_when>
    <thetext>https://trac.webkit.org/r207458</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291815</attachid>
            <date>2016-10-17 07:01:33 -0700</date>
            <delta_ts>2016-10-17 07:26:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-enum-10.patch</filename>
            <type>text/plain</type>
            <size>101414</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzM3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBAQAorMjAxNi0xMC0xNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5
bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbHNvIHJlbmFtZSBTdHlsZUNoYW5nZVR5cGUgZW51bSBhbmQg
c29tZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY2xhcml0eS4gRm9yIGV4YW1wbGUKKworICAgICAg
ICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
KworICAgICAgICBiZWNvbWVzCisKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJzKCk7CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVk
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q1NTVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnVud3JhcEZ1bGxTY3JlZW5S
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0QW5pbWF0aW5nRnVsbFNj
cmVlbik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEZvY3VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0ZVJl
bmRlcmVycyk6CisKKyAgICAgICAgICAgIE1vdmUgcHVibGljIGludmFsaWRhdGlvbiBmdW5jdGlv
bnMgdG8gRWxlbWVudCB0aWdodGVuaW5nIHR5cGluZy4KKyAgICAgICAgICAgIFVzZSBzZXBhcmF0
ZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBlbnVtIHZhbHVlcy4KKyAgICAgICAgICAgIFRoaXMgd2F5
IHRoZSBjYWxsIHNpdGVzIGxvb2sgbmljZXIgYW5kIG9ubHkgdXNlZnVsIGNvbWJpbmF0aW9ucyBh
cmUgZXhwb3NlZC4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YWRkU2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKToKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlRWRpdGFiaWxp
dHlGcm9tQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZGp1c3RTdHls
ZUludmFsaWRhdGlvbik6CisKKyAgICAgICAgICAgIFVwZGF0ZSBzY29wZSBhbmQgbW9kZSBzZXBh
cmF0ZWx5LiBUaGVyZSB3YXMgYSBwb3RlbnRpYWwgYnVnIGhlcmUgd2hlcmUKKyAgICAgICAgICAg
IFN5bnRoZXRpY1N0eWxlQ2hhbmdlIGNvdWxkIG92ZXJ3cml0ZSBGdWxsU3R5bGVDaGFuZ2UgKG5v
IGtub3duIHJlcHJvKS4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dXBkYXRlQW5jZXN0b3Jz
Rm9yU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bmVlZHNTdHlsZVJlY2FsYyk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhck5lZWRzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6c3R5bGVJbnZhbGlkYXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzdHlsZUludmFsaWRhdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xl
YXJTdHlsZUludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzdHlsZUNoYW5n
ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0U3R5bGVDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMpOgorICAg
ICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6
OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSk6CisgICAgICAgICogZG9tL1Nsb3RBc3NpZ25tZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsb3RBc3NpZ25tZW50OjphZGRTbG90RWxlbWVudEJ5
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTbG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1l
bnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNs
b3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRl
bnRDaGFuZ2UpOgorICAgICAgICAqIGRvbS9WaXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxp
bmspOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUp
OgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNhbGN1
bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6YWRk
SW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVu
dDo6cmVtb3ZlSW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRl
VmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0ZWRGb3Jt
Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFs
aWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1dHRvbik6CisgICAgICAgICogaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGcmFtZU93bmVyRWxlbWVudDo6c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpydW5Qb3N0VHlw
ZVVwZGF0ZVRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNr
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvRmlsbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aEF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWluTGVuZ3RoQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIpOgorICAgICAg
ICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICog
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1
c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVt
b3ZlU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgICogaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xp
c3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0
aXBsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVz
ZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc1RhYmxlQ2VsbEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRhYmxlQ2Vs
bHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVDb21tb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0
eSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAq
IG1hdGhtbC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxl
Y3RlZENoaWxkKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRz
QW5kVXBkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjppbWFnZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5SUZyYW1lc09mQ29tcG9zaXRp
bmdDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCk6CisgICAgICAgICogc3R5bGUvQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpB
dHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
c3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAq
IHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBzdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBk
YXRlcjo6dXBkYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUludmFs
aWRhdGlvblNjb3BlLmg6IEFkZGVkLgorCisgICAgICAgICAgICBTdHlsZUNoYW5nZVR5cGUgZW51
bSBzcGxpdHMgaW50byBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgYW5kIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlLgorICAgICAgICAgICAgTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KKworICAg
ICAgICAqIHN0eWxlL1N0eWxlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNj
b3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVz
b2x2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3Jl
YXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVl
UmVzb2x2ZXI6OnJlc29sdmVDb21wb3NlZFRyZWUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVXBk
YXRlLmg6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NTUHJvcGVydHlU
b1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmludmFsaWRhdGVTVkdQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmludmFsaWRh
dGVTaGFkb3dUcmVlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5
bGVDaGFuZ2VUeXBlVG9TdHJpbmcpOiBEZWxldGVkLgorCiAyMDE2LTEwLTE0ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICAxMDAlIENQVSBvbiBob21lZGVwb3Qu
Y29tIHBhZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjIzNiw2ICs2
MjM2LDcgQEAKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07
CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZC
IC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAgKi87IH07CisJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHls
ZUludmFsaWRhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRpb25T
Y29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3RDgw
MEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkxNkZG
NjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4NjYsNiArMTM4Njcs
NyBAQAogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VI
YW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NDE2MDM2RUQy
MDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0eWxl
U2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4MTM3QjgxREIzQjUy
NjAwNUM1OUJGIC8qIFN0eWxlSW52YWxpZGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5
b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdEODAw
RjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzYzLDYgKzIyMzY1LDcgQEAKIAkJCQlF
NDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1OEVC
NjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJ
RTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLywK
KwkJCQlFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRpb25TY29wZS5o
ICovLAogCQkJCUU0REFDRTZCMUQxMkUxMTYwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNvdXJj
ZXMuY3BwICovLAogCQkJCUU0REFDRTY5MUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdS
ZXNvdXJjZXMuaCAqLywKIAkJCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxh
dGlvbnMuY3BwICovLApAQCAtMjUyMTEsNiArMjUyMTQsNyBAQAogCQkJCUJDOTI2RjgxMEMwNTUy
NDcwMDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MEU3QjE1MEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxIZWFkRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFFMkFBMkYwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEhlYWRpbmdFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyogU3R5
bGVJbnZhbGlkYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOTlGRTgxRDdGNUZB
NjAwQTYwMDkzIC8qIFJlbmRlclRoZW1lQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJB
QTMxMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBODVCMTkwMEExQjE4QTIwMEQ4Qzg3QyAvKiBKU0hUTUxIdG1sRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCAr
MTAwLDIzIEBAIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OkNoZWNrRGVzY2VuZGEKICAgICBp
ZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNJbkF1dGhvclNoZWV0KSB7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVhbCBydWxlIG1hdGNoaW5nIHRvby4KICAgICAg
ICAgaWYgKGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgZWxlbWVudC5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKGVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkp
IHsKLSAgICBjYXNlIE5vU3R5bGVDaGFuZ2U6IHsKKyAgICBzd2l0Y2ggKGVsZW1lbnQuc3R5bGVJ
bnZhbGlkYXRpb25TY29wZSgpKSB7CisgICAgY2FzZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6
Ok5vbmU6IHsKICAgICAgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVt
ZW50LCBtX3J1bGVTZXQsIGZpbHRlcik7CiAgICAgICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShT
ZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVk
b0VsZW1lbnRzKTsKICAgICAgICAgcnVsZUNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNl
KTsKIAogICAgICAgICBpZiAocnVsZUNvbGxlY3Rvci5oYXNNYXRjaGVkUnVsZXMoKSkKLSAgICAg
ICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7Cisg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogICAgICAgICByZXR1cm4gQ2hl
Y2tEZXNjZW5kYW50czo6WWVzOwogICAgIH0KLSAgICBjYXNlIElubGluZVN0eWxlQ2hhbmdlOgor
ICAgIGNhc2UgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpFbGVtZW50OgogICAgICAgICByZXR1
cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotICAgIGNhc2UgRnVsbFN0eWxlQ2hhbmdlOgotICAg
IGNhc2UgU3ludGhldGljU3R5bGVDaGFuZ2U6Ci0gICAgY2FzZSBSZWNvbnN0cnVjdFJlbmRlclRy
ZWU6CisgICAgY2FzZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlN1YnRyZWU6CisgICAgY2Fz
ZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlJlbmRlcmVyczoKICAgICAgICAgcmV0dXJuIENo
ZWNrRGVzY2VuZGFudHM6Ok5vOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjA3MzcyKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwMCw3ICszNTAwLDcg
QEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmlld3BvcnRVbml0c09uUmVzaQogICAgIGZvciAoRWxl
bWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3ROb2RlKCkp
OyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVk
bygqZWxlbWVudCkpIHsKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJl
cigpOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzVmlld3Bv
cnRVbml0cygpKQotICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxp
bmVTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsK
ICAgICB9CiB9CiAKQEAgLTM4MTgsMTAgKzM4MTgsMTAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmZv
Y3VzTmF2aWdhdGlvblN0YXJ0aQogdm9pZCBEb2N1bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQq
IG4pCiB7CiAgICAgaWYgKG1fY3NzVGFyZ2V0KQotICAgICAgICBtX2Nzc1RhcmdldC0+c2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgICAgICBtX2Nzc1RhcmdldC0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgIG1fY3NzVGFyZ2V0ID0gbjsKICAgICBpZiAobikKLSAgICAgICAgbi0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBuLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0
cmVlKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyTm9kZUxpc3RGb3JJbnZhbGlkYXRp
b24oTGl2ZU5vZGVMaXN0JiBsaXN0KQpAQCAtNTgzNSw4ICs1ODM1LDggQEAgc3RhdGljIHZvaWQg
dW53cmFwRnVsbFNjcmVlblJlbmRlcmVyKFJlbgogICAgIGJvb2wgcmVxdWlyZXNSZW5kZXJUcmVl
UmVidWlsZDsKICAgICBmdWxsU2NyZWVuUmVuZGVyZXItPnVud3JhcFJlbmRlcmVyKHJlcXVpcmVz
UmVuZGVyVHJlZVJlYnVpbGQpOwogCi0gICAgaWYgKHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQg
JiYgZnVsbFNjcmVlbkVsZW1lbnQgJiYgZnVsbFNjcmVlbkVsZW1lbnQtPnBhcmVudE5vZGUoKSkK
LSAgICAgICAgZnVsbFNjcmVlbkVsZW1lbnQtPnBhcmVudE5vZGUoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGlmIChyZXF1aXJlc1JlbmRlclRyZWVS
ZWJ1aWxkICYmIGZ1bGxTY3JlZW5FbGVtZW50ICYmIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpCisgICAgICAgIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmlu
dmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKQEAgLTYwMjcsNyArNjAyNyw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm8KICAgICBtX2lzQW5p
bWF0aW5nRnVsbFNjcmVlbiA9IGZsYWc7CiAKICAgICBpZiAobV9mdWxsU2NyZWVuRWxlbWVudCAm
JiBtX2Z1bGxTY3JlZW5FbGVtZW50LT5pc0Rlc2NlbmRhbnRPZih0aGlzKSkgewotICAgICAgICBt
X2Z1bGxTY3JlZW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIG1fZnVs
bFNjcmVlbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgc2No
ZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QWN0
aXZlKGJvb2wgZmxhZywgYm9vbCAKICAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUg
PSB0aGlzLT5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IChyZW5kZXJT
dHlsZSAmJiByZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2ZSgpKSB8fCBzdHlsZUFmZmVjdGVk
QnlBY3RpdmUoKTsKICAgICBpZiAocmVhY3RzVG9QcmVzcykKLSAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBp
ZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lk
IEVsZW1lbnQ6OnNldEZvY3VzKGJvb2wgZmxhZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZG9j
dW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKHRoaXMsIGZsYWcpOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKQogICAgICAgICBlbGVtZW50LT5z
ZXRIYXNGb2N1c1dpdGhpbihmbGFnKTsKQEAgLTYzMiwxMyArNjMyLDEzIEBAIHZvaWQgRWxlbWVu
dDo6c2V0SG92ZXJlZChib29sIGZsYWcpCiAgICAgICAgIC8vIHN0eWxlLCBpdCB3b3VsZCBuZXZl
ciBnbyBiYWNrIHRvIGl0cyBub3JtYWwgc3R5bGUgYW5kIHJlbWFpbgogICAgICAgICAvLyBzdHVj
ayBpbiBpdHMgaG92ZXJlZCBzdHlsZSkuCiAgICAgICAgIGlmICghZmxhZykKLSAgICAgICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCkt
PnN0eWxlKCkuYWZmZWN0ZWRCeUhvdmVyKCkgfHwgY2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSkK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigp
LCBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlKTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQg
RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWEKICAgICAgICAgICAgIGVsZW1lbnRE
YXRhKCktPnNldEhhc05hbWVBdHRyaWJ1dGUoIW5ld1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OnBzZXVkb0F0dHIpIHsKICAgICAgICAgICAgIGlm
IChuZWVkc1N0eWxlSW52YWxpZGF0aW9uKCkgJiYgaXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAg
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgICAg
ICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpzbG90QXR0cikgewogICAgICAgICAgICAgaWYgKGF1
dG8qIHBhcmVudCA9IHBhcmVudEVsZW1lbnQoKSkgewpAQCAtMTQ0MCw2ICsxNDQwLDI2IEBAIEVs
ZW1lbnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QKICAgICByZXR1cm4gc3R5bGVS
ZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywgcGFyZW50U3R5bGUpOwogfQogCit2b2lk
IEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZSgpCit7CisgICAgTm9kZTo6aW52YWxpZGF0ZVN0eWxl
KFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVudCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6
aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCkKK3sKKyAgICBOb2RlOjppbnZhbGlkYXRlU3R5bGUo
U3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpFbGVtZW50LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9k
ZTo6UmVjb21wb3NpdGVMYXllcnMpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxp
ZGF0aW9uU2NvcGU6OlN1YnRyZWUpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVSZW5k
ZXJlcnMoKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxpZGF0aW9u
U2NvcGU6OlJlbmRlcmVycyk7Cit9CisKICNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCiBXZWJB
bmltYXRpb25WZWN0b3IgRWxlbWVudDo6Z2V0QW5pbWF0aW9ucygpCiB7CkBAIC0xNzU0LDcgKzE3
NzQsNyBAQCB2b2lkIEVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QoUmVmPFNoYWRvd1JvCiAgICAgZm9y
IChhdXRvJiB0YXJnZXQgOiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cykKICAgICAg
ICAgdGFyZ2V0LT5maW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKIAotICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRlUmVuZGVyZXJz
KCk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KCp0
aGlzLCBzaGFkb3dSb290KTsKIApAQCAtMTkzNiw3ICsxOTU2LDcgQEAgc3RhdGljIHZvaWQgY2hl
Y2tGb3JFbXB0eVN0eWxlQ2hhbmdlKEVsZQogICAgIGlmIChlbGVtZW50LnN0eWxlQWZmZWN0ZWRC
eUVtcHR5KCkpIHsKICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7
CiAgICAgICAgIGlmICghc3R5bGUgfHwgKCFzdHlsZS0+ZW1wdHlTdGF0ZSgpIHx8IGVsZW1lbnQu
aGFzQ2hpbGROb2RlcygpKSkKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAg
ICAgfQogfQogCkBAIC0xOTQ3LDcgKzE5NjcsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxp
bmdTdHlsZUNoYW5nZXMoCiAgICAgLy8gOmVtcHR5IHNlbGVjdG9yLgogICAgIGNoZWNrRm9yRW1w
dHlTdHlsZUNoYW5nZShwYXJlbnQpOwogCi0gICAgaWYgKHBhcmVudC5zdHlsZUNoYW5nZVR5cGUo
KSA+PSBGdWxsU3R5bGVDaGFuZ2UpCisgICAgaWYgKHBhcmVudC5zdHlsZUludmFsaWRhdGlvblNj
b3BlKCkgPj0gU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpTdWJ0cmVlKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyA6Zmlyc3QtY2hpbGQuICBJbiB0aGUgcGFyc2VyIGNhbGxiYWNrIGNhc2Us
IHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgYW55dGhpbmcsIHNpbmNlIHdlIHdlcmUgcmlnaHQgdGhl
IGZpcnN0IHRpbWUuCkBAIC0xOTYyLDE0ICsxOTgyLDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9y
U2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVt
ZW50QWZ0ZXJDaGFuZ2UpIHsKICAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVy
Q2hhbmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+
Zmlyc3RDaGlsZFN0YXRlKCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdl
LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBX
ZSBhbHNvIGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlw
ZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgJiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRB
ZnRlckNoYW5nZSAmJiBuZXdGaXJzdEVsZW1lbnQpIHsKICAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHls
ZSB8fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIG5ld0ZpcnN0
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIG5ld0ZpcnN0
RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xOTgyLDcgKzIwMDIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNo
YW5nZXMoCiAgICAgICAgIGlmIChuZXdMYXN0RWxlbWVudCAhPSBlbGVtZW50QmVmb3JlQ2hhbmdl
KSB7CiAgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnJlbmRl
clN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5sYXN0Q2hpbGRTdGF0
ZSgpKQotICAgICAgICAgICAgICAgIGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50QmVmb3JlQ2hhbmdlLT5pbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
dG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBpcyBzaW1p
bGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxsIGluIHRoYXQgd2UgbmVlZCB0byBjaGFuZ2UgdGhl
IGxhc3QgY2hpbGQKQEAgLTE5OTAsMTMgKzIwMTAsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JT
aWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICBpZiAoKGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxl
bWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09IEZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBu
ZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVmb3JlQ2hhbmdlICYmIG5ld0xhc3RFbGVtZW50KSB7
CiAgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCi0g
ICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICAgICAgICAgICAgICBuZXdMYXN0RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnRBZnRlckNoYW5nZSkgewogICAg
ICAgICBpZiAoZWxlbWVudEFmdGVyQ2hhbmdlLT5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZygpKQotICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBlbGVtZW50QWZ0ZXJDaGFuZ2UtPmludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKICAgICAgICAgZWxzZSBpZiAoZWxlbWVudEFmdGVyQ2hhbmdlLT5hZmZlY3Rz
TmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dFRvSW52YWxpZGF0ZSA9IGVsZW1lbnRBZnRlckNoYW5nZTsKICAgICAgICAgICAgIGRvIHsKQEAg
LTIwMDQsNyArMjAyNCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdl
cygKICAgICAgICAgICAgIH0gd2hpbGUgKGVsZW1lbnRUb0ludmFsaWRhdGUgJiYgIWVsZW1lbnRU
b0ludmFsaWRhdGUtPnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZWxlbWVudFRvSW52YWxpZGF0ZSkKLSAgICAgICAgICAgICAgICBlbGVtZW50
VG9JbnZhbGlkYXRlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxl
bWVudFRvSW52YWxpZGF0ZS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0yMDE1LDcgKzIwMzUsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxp
bmdTdHlsZUNoYW5nZXMoCiAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UganVzdCBt
YXJrIHRoZSBwYXJlbnQgbm9kZSBhcyBjaGFuZ2VkLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG1h
a2UgY2hpbGRyZW5DaGFuZ2VkIE8obl4yKSBieSBjcmF3bGluZyBhbGwgb3VyIGtpZHMKICAgICAv
LyBoZXJlLiAgcmVjYWxjU3R5bGUgd2lsbCB0aGVuIGZvcmNlIGEgd2FsayBvZiB0aGUgY2hpbGRy
ZW4gd2hlbiBpdCBzZWVzIHRoYXQgdGhpcyBoYXMgaGFwcGVuZWQuCiAgICAgaWYgKHBhcmVudC5j
aGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpICYmIGVsZW1lbnRCZWZv
cmVDaGFuZ2UpCi0gICAgICAgIHBhcmVudC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
IHBhcmVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCkBAIC0yNzA0LDcgKzI3
MjQsNyBAQCBib29sIEVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24oKSBjCiB7CiAgICAg
aWYgKCFpblJlbmRlcmVkRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChzdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCisgICAgaWYgKHN0eWxlSW52
YWxpZGF0aW9uU2NvcGUoKSA+PSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlN1YnRyZWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZG9jdW1lbnQoKS5oYXNQZW5kaW5nRm9yY2Vk
U3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA3MSw3ICszMDkxLDcg
QEAgYm9vbCBFbGVtZW50Ojpjb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KAogdm9pZCBFbGVtZW50
OjpzZXRDb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGJvb2wgZmxhZykKIHsKICAgICBlbnN1cmVF
bGVtZW50UmFyZURhdGEoKS5zZXRDb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGZsYWcpOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRh
dGVTdHlsZUFuZExheWVycygpOwogfQogCiBzdGF0aWMgRWxlbWVudCogcGFyZW50Q3Jvc3NpbmdG
cmFtZUJvdW5kYXJpZXMoRWxlbWVudCogZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAko
cmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQzLDYgKzU0MywxMSBAQCBwdWJsaWM6CiAgICAgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcigpOwogICAgIEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKKyAgICB2
b2lkIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICB2b2lkIGludmFsaWRhdGVSZW5k
ZXJlcnMoKTsKKwogICAgIGJvb2wgaGFzRGlzcGxheUNvbnRlbnRzKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRIYXNEaXNwbGF5Q29udGVudHMoYm9vbCk7CiAKQEAgLTgwOCw3ICs4MTMsNyBAQCBpbmxp
bmUgdm9pZCBFbGVtZW50OjpzZXRIYXNGb2N1c1dpdGhpbihiCiAgICAgICAgIHJldHVybjsKICAg
ICBzZXRGbGFnKGZsYWcsIEhhc0ZvY3VzV2l0aGluKTsKICAgICBpZiAoc3R5bGVBZmZlY3RlZEJ5
Rm9jdXNXaXRoaW4oKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBp
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgTm9k
ZTo6aW5zcGVjdCgpCiBzdGF0aWMgTm9kZTo6RWRpdGFiaWxpdHkgY29tcHV0ZUVkaXRhYmlsaXR5
RnJvbUNvbXB1dGVkU3R5bGUoY29uc3QgTm9kZSYgc3RhcnROb2RlLCBOb2RlOjpVc2VyU2VsZWN0
QWxsVHJlYXRtZW50IHRyZWF0bWVudCkKIHsKICAgICAvLyBJZGVhbGx5IHdlJ2QgY2FsbCBBU1NF
UlQoIW5lZWRzU3R5bGVSZWNhbGMoKSkgaGVyZSwgYnV0Ci0gICAgLy8gQ29udGFpbmVyTm9kZTo6
c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVkc1N0eWxlUmVjYWxjKCksIHNvIHRoZSBhc3NlcnRpb24K
KyAgICAvLyBDb250YWluZXJOb2RlOjpzZXRGb2N1cygpIGNhbGxzIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKSwgc28gdGhlIGFzc2VydGlvbgogICAgIC8vIHdvdWxkIGZpcmUgaW4gdGhlIG1p
ZGRsZSBvZiBEb2N1bWVudDo6c2V0Rm9jdXNlZEVsZW1lbnQoKS4KIAogICAgIGZvciAoY29uc3Qg
Tm9kZSogbm9kZSA9ICZzdGFydE5vZGU7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
IHsKQEAgLTc1MCw2ICs3NTAsMTYgQEAgdm9pZCBOb2RlOjpkZXJlZkV2ZW50VGFyZ2V0KCkKICAg
ICBkZXJlZigpOwogfQogCit2b2lkIE5vZGU6OmFkanVzdFN0eWxlSW52YWxpZGF0aW9uKFN0eWxl
OjpJbnZhbGlkYXRpb25TY29wZSBzY29wZSwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBpZiAoc2NvcGUgPiBzdHlsZUludmFsaWRhdGlvblNjb3BlKCkpIHsKKyAgICAgICAg
bV9ub2RlRmxhZ3MgJj0gflN0eWxlSW52YWxpZGF0aW9uU2NvcGVNYXNrOworICAgICAgICBtX25v
ZGVGbGFncyB8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2NvcGUpIDw8IFN0eWxlSW52YWxpZGF0
aW9uU2NvcGVTaGlmdDsKKyAgICB9CisgICAgaWYgKG1vZGUgPT0gU3R5bGU6OkludmFsaWRhdGlv
bk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKQorICAgICAgICBzZXRGbGFnKFN0eWxlSW52YWxpZGF0
aW9uTW9kZUZsYWcpOworfQorCiBpbmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JT
dHlsZVJlY2FsYygpCiB7CiAgICAgYXV0byBjb21wb3NlZEFuY2VzdG9ycyA9IGNvbXBvc2VkVHJl
ZUFuY2VzdG9ycygqdGhpcyk7CkBAIC03NTgsMTAgKzc2OCw4IEBAIGlubGluZSB2b2lkIE5vZGU6
OnVwZGF0ZUFuY2VzdG9yc0ZvclN0eWwKICAgICBpZiAoaXQgIT0gZW5kKSB7CiAgICAgICAgIGl0
LT5zZXREaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAgICAgICBpZiAoaXQtPmNo
aWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpKSB7
Ci0gICAgICAgICAgICBpZiAoaXQtPnN0eWxlQ2hhbmdlVHlwZSgpIDwgRnVsbFN0eWxlQ2hhbmdl
KQotICAgICAgICAgICAgICAgIGl0LT5zZXRTdHlsZUNoYW5nZShGdWxsU3R5bGVDaGFuZ2UpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChpdC0+Y2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNl
ZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkpCisgICAgICAgICAgICBhZGp1c3RTdHlsZUludmFs
aWRhdGlvbihTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlN1YnRyZWUsIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlOjpOb3JtYWwpOwogCiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHNraXBzIG92ZXIgc2hhZG93IHJvb3RzLgpAQCAtNzgy
LDkgKzc5MCw5IEBAIGlubGluZSB2b2lkIE5vZGU6OnVwZGF0ZUFuY2VzdG9yc0ZvclN0eWwKICAg
ICBkb2N1bWVudCgpLnNjaGVkdWxlU3R5bGVSZWNhbGMoKTsKIH0KIAotdm9pZCBOb2RlOjpzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQordm9pZCBOb2RlOjpp
bnZhbGlkYXRlU3R5bGUoU3R5bGU6OkludmFsaWRhdGlvblNjb3BlIHNjb3BlLCBTdHlsZTo6SW52
YWxpZGF0aW9uTW9kZSBtb2RlKQogewotICAgIEFTU0VSVChjaGFuZ2VUeXBlICE9IE5vU3R5bGVD
aGFuZ2UpOworICAgIEFTU0VSVChzY29wZSAhPSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6Ok5v
bmUpOwogICAgIGlmICghaW5SZW5kZXJlZERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNzkyLDExICs4MDAsMTEgQEAgdm9pZCBOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxl
Q2hhbgogICAgIGlmIChkb2N1bWVudCgpLmluUmVuZGVyVHJlZVVwZGF0ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHlsZUNoYW5nZVR5cGUgZXhpc3RpbmdDaGFuZ2VUeXBlID0gc3R5bGVD
aGFuZ2VUeXBlKCk7Ci0gICAgaWYgKGNoYW5nZVR5cGUgPiBleGlzdGluZ0NoYW5nZVR5cGUpCi0g
ICAgICAgIHNldFN0eWxlQ2hhbmdlKGNoYW5nZVR5cGUpOworICAgIGJvb2wgbWFya0FuY2VzdG9y
cyA9IHN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6
Ok5vbmUgfHwgc2NvcGUgPT0gU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnM7CisK
KyAgICBhZGp1c3RTdHlsZUludmFsaWRhdGlvbihzY29wZSwgbW9kZSk7CiAKLSAgICBpZiAoZXhp
c3RpbmdDaGFuZ2VUeXBlID09IE5vU3R5bGVDaGFuZ2UgfHwgY2hhbmdlVHlwZSA9PSBSZWNvbnN0
cnVjdFJlbmRlclRyZWUpCisgICAgaWYgKG1hcmtBbmNlc3RvcnMpCiAgICAgICAgIHVwZGF0ZUFu
Y2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7CiB9CiAKQEAgLTExOTYsNyArMTIwNCw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgTm9kZToKICAgICBpZiAocGFyZW50T3JTaGFk
b3dIb3N0Tm9kZSgpLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICBzZXRGbGFnKElzSW5TaGFk
b3dUcmVlRmxhZyk7CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVy
VHJlZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6UmVu
ZGVyZXJzKTsKIAogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1
ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5o
IgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJUcmVlU2Nv
cGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgpAQCAtNjEsMTkgKzYyLDYgQEAgY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZl
bnQ7CiBjbGFzcyBVSVJlcXVlc3RFdmVudDsKIAotY29uc3QgaW50IG5vZGVTdHlsZUNoYW5nZVNo
aWZ0ID0gMTQ7Ci0KLS8vIFN5bnRoZXRpY1N0eWxlQ2hhbmdlIG1lYW5zIHRoYXQgd2UgbmVlZCB0
byBnbyB0aHJvdWdoIHRoZSBlbnRpcmUgc3R5bGUgY2hhbmdlIGxvZ2ljIGV2ZW4gdGhvdWdoCi0v
LyBubyBzdHlsZSBwcm9wZXJ0eSBoYXMgYWN0dWFsbHkgY2hhbmdlZC4gSXQgaXMgdXNlZCB0byBy
ZXN0cnVjdHVyZSB0aGUgdHJlZSB3aGVuLCBmb3IgaW5zdGFuY2UsCi0vLyBSZW5kZXJMYXllcnMg
YXJlIGNyZWF0ZWQgb3IgZGVzdHJveWVkIGR1ZSB0byBhbmltYXRpb24gY2hhbmdlcy4KLWVudW0g
U3R5bGVDaGFuZ2VUeXBlIHsgCi0gICAgTm9TdHlsZUNoYW5nZSA9IDAsIAotICAgIElubGluZVN0
eWxlQ2hhbmdlID0gMSA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCwgCi0gICAgRnVsbFN0eWxlQ2hh
bmdlID0gMiA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCwgCi0gICAgU3ludGhldGljU3R5bGVDaGFu
Z2UgPSAzIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0LAotICAgIFJlY29uc3RydWN0UmVuZGVyVHJl
ZSA9IDQgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQsCi19OwotCiBjbGFzcyBOb2RlUmFyZURhdGFC
YXNlIHsKIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJlcjsgfQpAQCAtMzE5LDggKzMwNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFVzZXJBY3Rpb25FbGVtZW50KGJvb2wgZmxhZykgeyBzZXRGbGFnKGZsYWcsIElzVXNlckFjdGlv
bkVsZW1lbnQpOyB9CiAKICAgICBib29sIGluUmVuZGVyZWREb2N1bWVudCgpIGNvbnN0OwotICAg
IGJvb2wgbmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlQ2hhbmdlVHlwZSgp
ICE9IE5vU3R5bGVDaGFuZ2U7IH0KLSAgICBTdHlsZUNoYW5nZVR5cGUgc3R5bGVDaGFuZ2VUeXBl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVDaGFuZ2VUeXBlPihtX25vZGVGbGFn
cyAmIFN0eWxlQ2hhbmdlTWFzayk7IH0KKyAgICBib29sIG5lZWRzU3R5bGVSZWNhbGMoKSBjb25z
dCB7IHJldHVybiBzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgIT0gU3R5bGU6OkludmFsaWRhdGlv
blNjb3BlOjpOb25lOyB9CisgICAgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlIHN0eWxlSW52YWxp
ZGF0aW9uU2NvcGUoKSBjb25zdDsKKyAgICBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSBzdHlsZUlu
dmFsaWRhdGlvbk1vZGUoKSBjb25zdDsKICAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygp
IGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoQ2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KICAg
ICBib29sIHN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4g
Z2V0RmxhZyhTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7IH0KICAgICBib29sIGlz
RWRpdGluZ1RleHQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzVGV4dEZsYWcpICYmIGdldEZs
YWcoSXNFZGl0aW5nVGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxlbWVudEZsYWcpOyB9CkBAIC0zMjgs
OCArMzE3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCkg
eyBzZXRGbGFnKENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcpOyB9CiAgICAgdm9pZCBjbGVhckNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgbV9ub2RlRmxhZ3MgJj0gfihDaGlsZE5lZWRzU3R5bGVS
ZWNhbGNGbGFnIHwgRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgPSBG
dWxsU3R5bGVDaGFuZ2UpOwotICAgIHZvaWQgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCkgeyBtX25v
ZGVGbGFncyAmPSB+U3R5bGVDaGFuZ2VNYXNrOyB9CisgICAgdm9pZCBjbGVhck5lZWRzU3R5bGVS
ZWNhbGMoKSB7IGNsZWFyU3R5bGVJbnZhbGlkYXRpb24oKTsgfQogCiAgICAgYm9vbCBpc0xpbmso
KSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzTGlua0ZsYWcpOyB9CiAgICAgdm9pZCBzZXRJc0xp
bmsoYm9vbCBmbGFnKSB7IHNldEZsYWcoZmxhZywgSXNMaW5rRmxhZyk7IH0KQEAgLTU5NSw4ICs1
ODMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIC8vIFRoZXNlIGJpdHMgYXJlIHVzZWQgYnkgZGVy
aXZlZCBjbGFzc2VzLCBwdWxsZWQgdXAgaGVyZSBzbyB0aGV5IGNhbgogICAgICAgICAvLyBiZSBz
dG9yZWQgaW4gdGhlIHNhbWUgbWVtb3J5IHdvcmQgYXMgdGhlIE5vZGUgYml0cyBhYm92ZS4KICAg
ICAgICAgSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcgPSAxIDw8IDEzLCAvLyBFbGVtZW50
Ci0KLSAgICAgICAgU3R5bGVDaGFuZ2VNYXNrID0gMSA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCB8
IDEgPDwgKG5vZGVTdHlsZUNoYW5nZVNoaWZ0ICsgMSkgfCAxIDw8IChub2RlU3R5bGVDaGFuZ2VT
aGlmdCArIDIpLAorICAgICAgICBTdHlsZUludmFsaWRhdGlvblNjb3BlU2hpZnQgPSAxNCwKKyAg
ICAgICAgU3R5bGVJbnZhbGlkYXRpb25TY29wZU1hc2sgPSAzIDw8IFN0eWxlSW52YWxpZGF0aW9u
U2NvcGVTaGlmdCwKKyAgICAgICAgU3R5bGVJbnZhbGlkYXRpb25Nb2RlRmxhZyA9IDEgPDwgMTYs
CiAgICAgICAgIElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnID0gMSA8
PCAxNywKICAgICAgICAgSGFzRm9jdXNXaXRoaW4gPSAxIDw8IDE4LAogICAgICAgICBIYXNTeW50
aGV0aWNBdHRyQ2hpbGROb2Rlc0ZsYWcgPSAxIDw8IDE5LApAQCAtNjU3LDcgKzY0Niw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIHZvaWQgc2V0VHJlZVNjb3BlKFRyZWVTY29wZSYgc2NvcGUpIHsgbV90
cmVlU2NvcGUgPSAmc2NvcGU7IH0KIAotICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFu
Z2VUeXBlIGNoYW5nZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVD
aGFuZ2VNYXNrKSB8IGNoYW5nZVR5cGU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShTdHls
ZTo6SW52YWxpZGF0aW9uU2NvcGUsIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlID0gU3R5bGU6Oklu
dmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHls
ZVJlY2FsYygpOwogCiAgICAgUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9O
b2RlKFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CkBAIC02ODAsNiArNjY5LDkg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24+PiogbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7CiAgICAgSGFzaFNldDxN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSgpOwogCisgICAgdm9pZCBhZGp1c3RTdHlsZUludmFsaWRhdGlvbihTdHlsZTo6SW52
YWxpZGF0aW9uU2NvcGUsIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlKTsKKyAgICB2b2lkIGNsZWFy
U3R5bGVJbnZhbGlkYXRpb24oKTsKKwogICAgIGludCBtX3JlZkNvdW50OwogICAgIG11dGFibGUg
dWludDMyX3QgbV9ub2RlRmxhZ3M7CiAKQEAgLTc3MSw2ICs3NjMsMjIgQEAgaW5saW5lIENvbnRh
aW5lck5vZGUqIE5vZGU6OnBhcmVudE5vZGVHdQogICAgIHJldHVybiBwYXJlbnROb2RlKCk7CiB9
CiAKK2lubGluZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgTm9kZTo6c3R5bGVJbnZhbGlkYXRp
b25TY29wZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlOjpJbnZhbGlk
YXRpb25TY29wZT4oKG1fbm9kZUZsYWdzICYgU3R5bGVJbnZhbGlkYXRpb25TY29wZU1hc2spID4+
IFN0eWxlSW52YWxpZGF0aW9uU2NvcGVTaGlmdCk7Cit9CisKK2lubGluZSBTdHlsZTo6SW52YWxp
ZGF0aW9uTW9kZSBOb2RlOjpzdHlsZUludmFsaWRhdGlvbk1vZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTdHlsZTo6SW52YWxpZGF0aW9uTW9kZT4oZ2V0RmxhZyhTdHlsZUlu
dmFsaWRhdGlvbk1vZGVGbGFnKSk7Cit9CisKK2lubGluZSB2b2lkIE5vZGU6OmNsZWFyU3R5bGVJ
bnZhbGlkYXRpb24oKQoreworICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZUludmFsaWRhdGlvblNj
b3BlTWFzazsKKyAgICBjbGVhckZsYWcoU3R5bGVJbnZhbGlkYXRpb25Nb2RlRmxhZyk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkocmV2aXNpb24gMjA3
MzcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3Zl
KEhUTUxJbnB1dEUKICAgICAgICAgLS1tX3JlcXVpcmVkQ291bnQ7CiAgICAgfQogICAgIGlmICht
X2NoZWNrZWRCdXR0b24pIHsKLSAgICAgICAgYnV0dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgIGJ1dHRvbi0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBp
ZiAobV9jaGVja2VkQnV0dG9uID09IGJ1dHRvbikgewogICAgICAgICAgICAgbV9jaGVja2VkQnV0
dG9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0
b25zKCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpzZXROZWVk
c1N0eWxlUmVjYQogewogICAgIGZvciAoYXV0byYgYnV0dG9uIDogbV9tZW1iZXJzKSB7CiAgICAg
ICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgICAgIGJ1dHRvbi0+c2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJl
dmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDE0ICsxMTgsOCBAQCBib29sIFNoYWRvd1Jvb3Q6OmNoaWxkVHlw
ZUFsbG93ZWQoTm9kZVR5CiAKIHZvaWQgU2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUluaGVyaXRh
bmNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgaWYgKGlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICh2YWx1ZSAhPSBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSkgewotICAgICAgICBt
X3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA9IHZhbHVlOwotICAgICAgICBpZiAoaG9zdCgpKQotICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0KKyAgICAvLyBJZiB0aGlzIHdh
cyBldmVyIHVzZWQgZHluYW1pY2FsbHkgY2hpbGQgc3R5bGVzIHdvdWxkIG5lZWQgdG8gYmUgaW52
YWxpZGF0ZWQgaGVyZS4KKyAgICBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA9IHZhbHVlOwogfQog
CiBSZWY8Tm9kZT4gU2hhZG93Um9vdDo6Y2xvbmVOb2RlSW50ZXJuYWwoRG9jdW1lbnQmLCBDbG9u
aW5nT3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCShy
ZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgU2xvdEFzc2lnbm1lbnQ6OmFk
ZFNsb3RFbGVtZW50QnlOYW0KICNlbmRpZgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIGRvIGEgdGFyZ2V0ZWQgcmVjb25zdHJ1Y3Rpb24uCi0gICAgc2hhZG93Um9vdC5ob3N0
KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBzaGFk
b3dSb290Lmhvc3QoKS0+aW52YWxpZGF0ZVJlbmRlcmVycygpOwogCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzbG90TmFtZSA9IHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKG5hbWUpOwogICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9zbG90cy5hZGQoc2xvdE5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxT
bG90SW5mbz4oKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6cmVt
b3ZlU2xvdEVsZW1lbnRCeQogI2VuZGlmCiAKICAgICBpZiAoYXV0byogaG9zdCA9IHNoYWRvd1Jv
b3QuaG9zdCgpKSAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYSB0YXJnZXRlZCBy
ZWNvbnN0cnVjdGlvbi4KLSAgICAgICAgaG9zdC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0
cnVjdFJlbmRlclRyZWUpOworICAgICAgICBob3N0LT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAK
ICAgICBhdXRvIGl0ID0gbV9zbG90cy5maW5kKHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKG5h
bWUpKTsKICAgICBSRUxFQVNFX0FTU0VSVChpdCAhPSBtX3Nsb3RzLmVuZCgpKTsKQEAgLTE1NCw3
ICsxNTQsNyBAQCB2b2lkIFNsb3RBc3NpZ25tZW50OjpkaWRDaGFuZ2VTbG90KGNvbnN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChjaGFuZ2VUeXBlID09IENoYW5nZVR5cGU6OkRpcmVjdENo
aWxkKSB7Ci0gICAgICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFJl
Y29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5pbnZhbGlk
YXRlUmVuZGVyZXJzKCk7CiAgICAgICAgIG1fc2xvdEFzc2lnbm1lbnRzSXNWYWxpZCA9IGZhbHNl
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKGNvbgogICAgICAgICBzdHlsZUF0dHJpYnV0ZUNoYW5nZWQobmV3VmFsdWUsIHJl
YXNvbik7CiAgICAgZWxzZSBpZiAoaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSkpIHsKICAg
ICAgICAgZWxlbWVudERhdGEoKS0+c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5
KHRydWUpOwotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsK
KyAgICAgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogCiAgICAgRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7CkBAIC0yMTYsNyAr
MjE2LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpzdHlsZUF0dHJpYnV0ZUNoYW5nZQogCiAgICAg
ZWxlbWVudERhdGEoKS0+c2V0U3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKTsKIAotICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHls
ZSgpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0
cihkb2N1bWVudCgpLCAqdGhpcyk7CiB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpCiAgICAgICAgIGRvY3VtZW50KCkuc2V0SGFz
RWxlbWVudFVzaW5nU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCk7CiAKICAgICBlbGVtZW50RGF0YSgp
LT5zZXRTdHlsZUF0dHJpYnV0ZUlzRGlydHkodHJ1ZSk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiB9CiAKIHZvaWQg
U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAJ
KHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZjxUZXh0PiBUZXh0OjpjcmVhdGVXaXRoTGVu
Z3RoTGltaXQoRG8KIHZvaWQgVGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2Uo
dW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVwbGFjZWRE
YXRhKQogewogICAgIEFTU0VSVChwYXJlbnROb2RlKCkpOwotICAgIGlmIChzdHlsZUNoYW5nZVR5
cGUoKSA9PSBSZWNvbnN0cnVjdFJlbmRlclRyZWUpCisgICAgaWYgKHN0eWxlSW52YWxpZGF0aW9u
U2NvcGUoKSA9PSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlJlbmRlcmVycykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byB0ZXh0VXBkYXRlID0gc3RkOjptYWtlX3VuaXF1ZTxTdHlsZTo6
VXBkYXRlPihkb2N1bWVudCgpKTsKQEAgLTIzNCw3ICsyMzQsNiBAQCB2b2lkIFRleHQ6OnVwZGF0
ZVJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhCiAgICAgICAgIHJlbmRlcmVyLT5zZXRUZXh0V2l0aE9m
ZnNldChkYXRhKCksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7
CiB9CiAKLQogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIHZvaWQgVGV4dDo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCShyZXZpc2lvbiAyMDczNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVG
bwogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNP
ZlR5cGU8RWxlbWVudD4obV9kb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNMaW5r
KCkpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAt
ODIsNyArODIsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAg
ICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlw
ZTxFbGVtZW50PihtX2RvY3VtZW50KSkgewogICAgICAgICBpZiAobGlua0hhc2hGb3JFbGVtZW50
KG1fZG9jdW1lbnQsIGVsZW1lbnQpID09IGxpbmtIYXNoKQotICAgICAgICAgICAgZWxlbWVudC5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4Myw3ICsxOTgz
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdAogICAgIC8vIFJl
bmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBo
YXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVk
IG9uIHRob3NlLgogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRF
bGVtZW50KCkpIHsKLSAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAg
ICAgICAgICAgICAgcmVuZGVyZXItPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlciwgQ29u
dHJvbFN0YXRlczo6Rm9jdXNTdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VE
YXRlQW5kVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzU3Rl
cHBhYgogCiB2b2lkIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVD
aGFuZ2VkKCkKIHsKLSAgICBlbGVtZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVs
ZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIERlY2ltYWwgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBEZWNpbWFsJiBkZWZhdWx0VmFsdWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
RmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCB2
b2lkIEZpbGVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluCiAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBjbGVhciB0aGUgZmlsZSBsaXN0LCBvciByZXBsYWNlIGl0IHdpdGggYSBuZXcgZW1w
dHkgb25lIGhlcmU/IFRoaXMgaXMgb2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQgdGhyb3VnaCBj
dXN0b20gcHJvcGVydGllcy4KICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIG1faWNvbiA9
IG51bGxwdHI7Ci0gICAgZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVt
ZW50KCkuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBGaWxlSW5wdXRUeXBlOjpjcmVhdGVGaWxlTGlzdChjb25zdCBWZWN0b3I8RmlsZUNob29z
ZXJGaWxlSW5mbz4mIGZpbGVzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcg
QEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBib29s
IHdhc0xpbmsgPSBpc0xpbmsoKTsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwoKSAm
JiAhc2hvdWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3YXNMaW5rICE9IGlz
TGluaygpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoaXNMaW5rKCkpIHsKICAg
ICAgICAgICAgIFN0cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxT
cGFjZXModmFsdWUpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVu
YWJsZWQoKSAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3
IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24g
MjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBI
VE1MQ2FudmFzRWxlbWVuCiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0
ZWQgZm9yIHRoZSBDYW52YXMKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhl
dGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7
CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwpAQCAt
MjUwLDcgKzI1MCw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4K
ICAgICAgICAgICAgICAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
cmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwg
dHlwZSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBs
YXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcwotICAgICAgICAgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKQEAgLTY2Miw3ICs2
NjIsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAjaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKQogICAgICAg
ICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9u
IHN0YXRlIGNoYW5nZWQuCi0gICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0
aGlzKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAg
IGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+aW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsNyArODk3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6
YWRqdXN0RGlyZWN0aW9uYWxpdHlJZgogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBl
bGVtZW50VG9BZGp1c3QgOiBlbGVtZW50TGluZWFnZSh0aGlzKSkgewogICAgICAgICBpZiAoZWxl
bWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShlbGVtZW50VG9BZGp1c3QpKSB7Ci0gICAgICAgICAg
ICBlbGVtZW50VG9BZGp1c3Quc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxl
bWVudFRvQWRqdXN0LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTkwOSw3ICs5MDksNyBAQCB2b2lkIEhUTUxFbGVt
ZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJlCiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uID0gZGlyZWN0aW9uYWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOwogICAg
IHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkodGhpcywgdHJ1ZSwgc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZSk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS5kaXJlY3Rpb24oKSAhPSB0ZXh0RGlyZWN0aW9uKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBI
VE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRyZW5DaGFu
Z2VkKEVsZW1lbnQqIGJlZm9yZUNoYW5nZSwgQ2hpbGRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmFkZEludmFsaWREZXNjCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pbnZhbGlk
RGVzY2VuZGFudHMuY29udGFpbnMoJmludmFsaWRGb3JtQ29udHJvbEVsZW1lbnQpLCAiVXBkYXRp
bmcgdGhlIGZpZWxkc2V0IG9uIHZhbGlkaXR5IGNoYW5nZSBpcyBub3QgYW4gZWZmaWNpZW50IG9w
ZXJhdGlvbiwgaXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuIG5lY2Vzc2FyeS4iKTsKIAogICAg
IGlmIChtX2ludmFsaWREZXNjZW5kYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIG1f
aW52YWxpZERlc2NlbmRhbnRzLmFkZCgmaW52YWxpZEZvcm1Db250cm9sRWxlbWVudCk7CiB9CiAK
QEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlbW92ZUludmFs
aWRECiAKICAgICBtX2ludmFsaWREZXNjZW5kYW50cy5yZW1vdmUoJmZvcm1Db250cm9sRWxlbWVu
dCk7CiAgICAgaWYgKG1faW52YWxpZERlc2NlbmRhbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NCw3ICsxNzQsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkQXR0CiB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKCkKIHsKICAg
ICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVyZXIo
KS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJs
ZWRTdGF0ZSk7CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkaXNhYmxlZFN0YQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seUF0
dHJpYnV0ZUNoYW5nZWQoKQogewogICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKLSAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hh
bmdlZCgpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpy
ZXF1aXJlZEF0dAogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgLy8gU3R5bGUgcmVjYWxjdWxh
dGlvbiBpcyBuZWVkZWQgYmVjYXVzZSBzdHlsZSBzZWxlY3RvcnMgbWF5IGluY2x1ZGUKICAgICAv
LyA6cmVxdWlyZWQgYW5kIDpvcHRpb25hbCBwc2V1ZG8tY2xhc3Nlcy4KLSAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiBzdGF0
aWMgYm9vbCBzaG91bGRBdXRvZm9jdXMoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkK
QEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRz
V2lsCiAgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxsVmFsaWRhdGU7CiAKICAgICB1cGRhdGVW
YWxpZGl0eSgpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoIW1fd2lsbFZhbGlkYXRlICYmICF3YXNWYWxpZCkg
ewogICAgICAgICByZW1vdmVJbnZhbGlkRWxlbWVudFRvQW5jZXN0b3JGcm9tSW5zZXJ0aW9uUG9p
bnQoKnRoaXMsIHBhcmVudE5vZGUoKSk7CkBAIC01MjIsNyArNTIyLDcgQEAgdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZAogCiAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiBt
X2lzVmFsaWQgIT0gd2FzVmFsaWQpIHsKICAgICAgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1
ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6aW52YWxpZC4KLSAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAg
ICAgaWYgKCFtX2lzVmFsaWQpIHsKICAgICAgICAgICAgIGFkZEludmFsaWRFbGVtZW50VG9BbmNl
c3RvckZyb21JbnNlcnRpb25Qb2ludCgqdGhpcywgcGFyZW50Tm9kZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTk4LDcgKzU5OCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW4K
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+KCplKTsKICAgICAgICAgaWYgKGNvbnRyb2wuaXNTdWNjZXNzZnVs
U3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgIGlmICghbV9kZWZhdWx0QnV0dG9uKQotICAg
ICAgICAgICAgICAgIGNvbnRyb2wuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAg
ICAgIGNvbnRyb2wuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHJlc2V0RGVmYXVsdEJ1dHRvbigpOwogICAgICAgICB9CkBAIC02
MjYsNyArNjI2LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzcwog
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Jj4oZm9ybUNvbnRyb2xFbGVtZW50
KS5tYXRjaGVzSW52YWxpZFBzZXVkb0NsYXNzKCkpOwogCiAgICAgaWYgKG1faW52YWxpZEFzc29j
aWF0ZWRGb3JtQ29udHJvbHMuaXNFbXB0eSgpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBtX2ludmFsaWRB
c3NvY2lhdGVkRm9ybUNvbnRyb2xzLmFkZCgmZm9ybUNvbnRyb2xFbGVtZW50KTsKIH0KIApAQCAt
NjM0LDcgKzYzNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbnZhbGlkQXNzb2MK
IHsKICAgICBpZiAobV9pbnZhbGlkQXNzb2NpYXRlZEZvcm1Db250cm9scy5yZW1vdmUoJmZvcm1D
b250cm9sRWxlbWVudCkpIHsKICAgICAgICAgaWYgKG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29u
dHJvbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtNzQ0
LDkgKzc0NCw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldERlZmF1bHRCdXR0b24KICAg
ICBkZWZhdWx0QnV0dG9uKCk7CiAgICAgaWYgKG1fZGVmYXVsdEJ1dHRvbiAhPSBvbGREZWZhdWx0
KSB7CiAgICAgICAgIGlmIChvbGREZWZhdWx0KQotICAgICAgICAgICAgb2xkRGVmYXVsdC0+c2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgb2xkRGVmYXVsdC0+aW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAobV9kZWZhdWx0QnV0dG9uKQotICAgICAgICAg
ICAgbV9kZWZhdWx0QnV0dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBt
X2RlZmF1bHRCdXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShy
ZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OmZpbmlzaGVkSW5zZXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFy
ZW5kZXJlcigpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVy
VHJlZSk7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICBzZXROYW1lQW5kT3Bl
blVSTCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxNSArMTIyLDE1
IEBAIFNWR0RvY3VtZW50KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFMKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVkdWxlU2V0TmVl
ZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKK3ZvaWQgSFRNTEZyYW1l
T3duZXJFbGVtZW50OjpzY2hlZHVsZUludmFsaWRhdGVTdHlsZUFuZExheWVycygpCiB7CiAgICAg
aWYgKFN0eWxlOjpwb3N0UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZCgpKSB7CiAgICAg
ICAgIFJlZlB0cjxIVE1MRnJhbWVPd25lckVsZW1lbnQ+IGVsZW1lbnQgPSB0aGlzOwotICAgICAg
ICBTdHlsZTo6cXVldWVQb3N0UmVzb2x1dGlvbkNhbGxiYWNrKFtlbGVtZW50LCBjaGFuZ2VUeXBl
XXsKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoY2hhbmdlVHlwZSk7
CisgICAgICAgIFN0eWxlOjpxdWV1ZVBvc3RSZXNvbHV0aW9uQ2FsbGJhY2soW2VsZW1lbnRdIHsK
KyAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAg
ICB9KTsKICAgICB9IGVsc2UKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhjaGFuZ2VUeXBl
KTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiB9CiAKIGJvb2wgU3ViZnJh
bWVMb2FkaW5nRGlzYWJsZXI6OmNhbkxvYWRGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQmIG93
bmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5o
CShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAg
IFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hGbGFn
czsgfQogCi0gICAgdm9pZCBzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VU
eXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICB2b2lkIHNjaGVkdWxlSW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJzKCk7CiAKIHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fcm93TGVu
Z3RocyA9IG5ld0xlbmd0aEFycmF5KHZhbHVlLnN0cmluZygpLCBtX3RvdGFsUm93cyk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVy
ZSBtX3Jvd0xlbmd0aHMgZGlkIG5vdCBjaGFuZ2UuCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIVE1M
RnJhbWVTZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZQogICAgICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKSB7CiAgICAgICAgICAgICBtX2NvbExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheSh2YWx1ZS5z
dHJpbmcoKSwgbV90b3RhbENvbHMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5p
Y2UgdG8gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgbV9jb2xMZW5ndGhzIGRpZCBub3QgY2hhbmdl
LgotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMDIsMTAgKzIwMiw4IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGEKIAogYm9vbCBIVE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6
OkNoYW5nZSkKIHsKLSAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkpIHsK
KyAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRl
cmVyKCktPnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygp
OwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5
LDcgQEAgaW5saW5lIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cnVuUG9zdFR5cAogI2VuZGlmCiAK
ICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0
cnVjdFJlbmRlclRyZWUpOworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICBp
ZiAoZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpID09IHRoaXMpCiAgICAgICAgIHVwZGF0ZUZv
Y3VzQXBwZWFyYW5jZShTZWxlY3Rpb25SZXN0b3JhdGlvbk1vZGU6OlJlc3RvcmUsIFNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbCk7CkBAIC02OTUsMTQgKzY5NSwxNCBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBz
ZXRDaGFuZ2VkIGlmIHRoZSBmb3JtIGlzIGxvb2tpbmcgYXQgdGhlIGRlZmF1bHQgdmFsdWUgcmln
aHQgbm93LgogICAgICAgICBpZiAoIWhhc0RpcnR5VmFsdWUoKSkgewogICAgICAgICAgICAgdXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAg
ICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgICAgIG1fdmFsdWVBdHRyaWJ1dGVXYXNVcGRh
dGVkQWZ0ZXJQYXJzaW5nID0gIW1fcGFyc2luZ0luUHJvZ3Jlc3M7CiAgICAgfSBlbHNlIGlmIChu
YW1lID09IGNoZWNrZWRBdHRyKSB7CiAgICAgICAgIGlmIChtX2lucHV0VHlwZS0+aXNDaGVja2Fi
bGUoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgICAgICAvLyBBbm90aGVyIHJhZGlvIGJ1
dHRvbiBpbiB0aGUgc2FtZSBncm91cCBtaWdodCBiZSBjaGVja2VkIGJ5IHN0YXRlCiAgICAgICAg
IC8vIHJlc3RvcmUuIFdlIHNob3VsZG4ndCBjYWxsIHNldENoZWNrZWQoKSBldmVuIGlmIHRoaXMg
aGFzIHRoZSBjaGVja2VkCkBAIC03MzEsOSArNzMxLDkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICBtX21heFJlc3VsdHMgPSAhdmFsdWUuaXNOdWxs
KCkgPyBzdGQ6Om1pbih2YWx1ZS50b0ludCgpLCBtYXhTYXZlZFJlc3VsdHMpIDogLTE7CiAgICAg
ICAgIG1faW5wdXRUeXBlLT5tYXhSZXN1bHRzQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSBhdXRvc2F2ZUF0dHIpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfSBlbHNlIGlm
IChuYW1lID09IGluY3JlbWVudGFsQXR0cikgewotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gbWluQXR0cikgewogICAgICAgICBtX2lucHV0VHlwZS0+bWluT3JNYXhBdHRyaWJ1
dGVDaGFuZ2VkKCk7CiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CkBAIC04OTUsNyArODk1LDcg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbgogCiAgICAgbV9yZWZs
ZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICBtX2lzQ2hlY2tlZCA9IG5vd0NoZWNr
ZWQ7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIAogICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0
dG9uR3JvdXBzKCkpCiAgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0aGlzKTsK
QEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9v
bCBuCiAgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIH0KIAot
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIG5l
d1ZhbHVlKQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5k
ZXRlcm1pbmF0ZSgKIAogICAgIG1faXNJbmRldGVybWluYXRlID0gbmV3VmFsdWU7CiAKLSAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigp
LCBDb250cm9sU3RhdGVzOjpDaGVja2VkU3RhdGUpOwpAQCAtMTMzMCw3ICsxMzMwLDcgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvRmlsbGVkKGJvbwogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2lzQXV0b0ZpbGxlZCA9IGF1dG9GaWxsZWQ7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRTaG93QXV0b0ZpbGxCdXR0b24oQXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9G
aWxsQnV0dG9uVHlwZSkKQEAgLTE3ODYsNyArMTc4Niw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6bWF4TGVuZ3RoQXR0cmlidXQKICAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOwogCiAg
ICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRvIGRvIHRoaXMgaWYgdGhlIGVmZmVjdGl2
ZSBtYXhMZW5ndGggaGFzIG5vdCBjaGFuZ2VkPwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
KyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgdXBkYXRlVmFsaWRpdHkoKTsK
IH0KIApAQCAtMTgwMiw3ICsxODAyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjptaW5MZW5n
dGhBdHRyaWJ1dAogICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhN
RTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgZWZmZWN0aXZlIG1pbkxlbmd0
aCBoYXMgbm90IGNoYW5nZWQ/Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDczNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoY29uCiAgICAgICAgIGJvb2wgd2FzTGluayA9IGlzTGluaygpOwogICAgICAgICBzZXRJc0xp
bmsoIXZhbHVlLmlzTnVsbCgpICYmICFzaG91bGRQcm9oaWJpdExpbmtzKHRoaXMpKTsKICAgICAg
ICAgaWYgKHdhc0xpbmsgIT0gaXNMaW5rKCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAg
IHByb2Nlc3MoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU3Niw3
ICs0NTc2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlbmRlcgogICAg
IExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNo
YW5nZWQoJXApIiwgdGhpcyk7CiAKICAgICAvLyBLaWNrIG9mZiBhIGZha2UgcmVjYWxjU3R5bGUg
dGhhdCB3aWxsIHVwZGF0ZSB0aGUgY29tcG9zaXRpbmcgdHJlZS4KLSAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXll
cnMoKTsKIH0KIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKEFWRk9VTkRBVElPTikKQEAgLTU1
OTAsNyArNTU5MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWUK
ICAgICB9CiAgICAgCiAgICAgbV9wbGF5ZXItPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHBsYXRm
b3JtTGF5ZXIsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFyVXNlRmFs
bGJhY2tDb250ZW50KCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRl
clRyZWUpOworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0KIAogc3RhdGljIHZvaWQgbWFw
RGF0YVBhcmFtVG9TcmMoVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKQEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoCiAgICAgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CiAgICAgaWYgKGlu
RG9jdW1lbnQoKSAmJiAhdXNlRmFsbGJhY2tDb250ZW50KCkpIHsKICAgICAgICAgc2V0TmVlZHNX
aWRnZXRVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KICAgICBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKIH0KQEAgLTM3OCw3ICszNzgsNyBA
QCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJGYWxsYmFja0NvCiAgICAgaWYgKCFpbkRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVj
b25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICAv
LyBCZWZvcmUgd2UgZ2l2ZSB1cCBhbmQgdXNlIGZhbGxiYWNrIGNvbnRlbnQsIGNoZWNrIHRvIHNl
ZSBpZiB0aGlzIGlzIGEgTUlNRSB0eXBlIGlzc3VlLgogICAgIGF1dG8qIGxvYWRlciA9IGltYWdl
TG9hZGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBIVE1M
T3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZQogICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMo
KTsKIAogICAgIGlmIChuYW1lID09IGRpc2FibGVkQXR0cikKLSAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZv
aWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCwxMiArMTc0LDEyIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGMKICAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CiAgICAgICAg
IG1fZGlzYWJsZWQgPSAhdmFsdWUuaXNOdWxsKCk7CiAgICAgICAgIGlmIChvbGREaXNhYmxlZCAh
PSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAg
ICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29u
dHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFt
ZSA9PSBzZWxlY3RlZEF0dHIpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KICAgICAg
ICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5nIHRoZSBzZWxlY3Rl
ZCBhdHRyaWJ1dGUgb3IKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50
OjpzZXRTZWxlY3RlZFN0YXRlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTZWxlY3RlZCA9
IHNlbGVjdGVkOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93
bmVyU2VsZWN0RWxlbWVudCgpKQogICAgICAgICBzZWxlY3QtPmludmFsaWRhdGVTZWxlY3RlZEl0
ZW1zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEhUTUxQbHVnSW5F
bGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTCiAgICAgcm9vdC0+c2V0UmVzZXRTdHlsZUluaGVyaXRh
bmNlKHRydWUpOwogICAgIGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1l
bnQoKnJvb3QpKSB7CiAgICAgICAgIHNldERpc3BsYXlTdGF0ZShEaXNwbGF5aW5nUGx1Z2luUmVw
bGFjZW1lbnQpOwotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVy
VHJlZSk7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVMKICAgICBpZiAoc3RhdGUgPT0gUmVzdGFydGluZ1dp
dGhQZW5kaW5nTW91c2VDbGljayB8fCBzdGF0ZSA9PSBSZXN0YXJ0aW5nKSB7CiAgICAgICAgIG1f
aXNSZXN0YXJ0ZWRQbHVnaW4gPSB0cnVlOwogICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24gPSBO
ZXZlclNuYXBzaG90OwotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxl
Q2hhbmdlKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIGlm
IChkaXNwbGF5U3RhdGUoKSA9PSBEaXNwbGF5aW5nU25hcHNob3QpCiAgICAgICAgICAgICBtX3Jl
bW92ZVNuYXBzaG90VGltZXIuc3RhcnRPbmVTaG90KHJlbW92ZVNuYXBzaG90VGltZXJEZWxheSk7
CiAgICAgfQpAQCAtMjM5LDEzICsyMzksMTMgQEAgYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpjaGlsZFNob3VsZAogYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5
bGUoU3R5bGU6OkNoYW5nZSBjaGFuZ2UpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHN0eWxlIHJlY2Fs
Y3Mgc2NoZWR1bGVkIGJ5IGEgY2hpbGQgc2hhZG93IHRyZWUgZG9uJ3QgdHJpZ2dlciByZWNvbnN0
cnVjdGlvbiBhbmQgY2F1c2UgZmxpY2tlci4KLSAgICBpZiAoY2hhbmdlID09IFN0eWxlOjpOb0No
YW5nZSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA9PSBOb1N0eWxlQ2hhbmdlKQorICAgIGlmIChjaGFu
Z2UgPT0gU3R5bGU6Ok5vQ2hhbmdlICYmIHN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBTdHls
ZTo6SW52YWxpZGF0aW9uU2NvcGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Ly8gRklYTUU6IFRoZXJlIHNob3Vkbid0IGJlIG5lZWQgdG8gZm9yY2UgcmVuZGVyIHRyZWUgcmVj
b25zdHJ1Y3Rpb24gaGVyZS4KICAgICAvLyBJdCBpcyBvbmx5IGRvbmUgYmVjYXVzZSBsb2FkaW5n
IGFuZCBsb2FkIGV2ZW50IGRpc3BhdGNoaW5nIGlzIHRpZWQgdG8gcmVuZGVyIHRyZWUgY29uc3Ry
dWN0aW9uLgogICAgIGlmICghdXNlRmFsbGJhY2tDb250ZW50KCkgJiYgbmVlZHNXaWRnZXRVcGRh
dGUoKSAmJiByZW5kZXJlcigpICYmICFpc0ltYWdlVHlwZSgpICYmIChkaXNwbGF5U3RhdGUoKSAh
PSBEaXNwbGF5aW5nU25hcHNob3QpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29u
c3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZmluaXNoUGFyc2kKIAogICAgIHNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwog
ICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkK
QEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnByZXBhcmVG
b3JECiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3Vz
cGVuc2lvbigpCiB7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIAogICAgIEhUTUxQbHVnSW5FbGVtZW50
OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCk7CiB9CkBAIC00MzcsNyArNDM3LDcgQEAg
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW1vdmVTbmFwcwogewogICAgIG1fc25hcHNo
b3RJbWFnZSA9IG51bGxwdHI7CiAgICAgbV9pc1Jlc3RhcnRlZFBsdWdpbiA9IGZhbHNlOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRh
dGVTdHlsZUFuZExheWVycygpOwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJl
cigpLT5yZXBhaW50KCk7CiB9CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpyZXN0YXJ0U25hcAogICAgICAgICByZXR1cm47CiAKICAgICBzZXREaXNwbGF5
U3RhdGUoUmVzdGFydGluZyk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJl
bmRlclRyZWUpOworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0KIAogdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpkaXNwYXRjaFBlbmRpbmdNb3VzZUNsaWNrKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3Mzcx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlk
RWxlbWVudFN0YXQKICAgICAgICAgYm9vbCB3YXNEZXRlcm1pbmF0ZSA9IHJlbmRlci0+aXNEZXRl
cm1pbmF0ZSgpOwogICAgICAgICByZW5kZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgICAg
IGlmICh3YXNEZXRlcm1pbmF0ZSAhPSBpc0RldGVybWluYXRlKCkpCi0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIG1fc2l6ZSA9IHNpemU7
CiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgICAgIGlmIChtX3NpemUgIT0gb2xkU2l6
ZSkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgICAgICAgICAgaW52YWxpZGF0ZVJlbmRlcmVycygpOwogICAgICAgICAgICAgc2V0
UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOwogICAgICAg
ICB9CkBAIC03NDQsNyArNzQ0LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxj
TGlzdEl0ZQogICAgIC8vIE1hbnVhbCBzZWxlY3Rpb24gYW5jaG9yIGlzIHJlc2V0IHdoZW4gbWFu
aXB1bGF0aW5nIHRoZSBzZWxlY3QgcHJvZ3JhbW1hdGljYWxseS4KICAgICBtX2FjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4ID0gLTE7CiAgICAgc2V0T3B0aW9uc0NoYW5nZWRPblJlbmRlcmVyKCk7
Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICBpZiAoIWluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoSFRNTENvbGxlY3Rp
b24qIGNvbGxlY3Rpb24gPSBjYWNoZWRIVE1MQ29sbGVjdGlvbihTZWxlY3RPcHRpb25zKSkKICAg
ICAgICAgICAgIGNvbGxlY3Rpb24tPmludmFsaWRhdGVDYWNoZShkb2N1bWVudCgpKTsKQEAgLTEw
MjIsNyArMTAyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHQK
ICAgICBtX211bHRpcGxlID0gIXZhbHVlLmlzTnVsbCgpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7
CiAgICAgaWYgKG9sZFVzZXNNZW51TGlzdCAhPSB1c2VzTWVudUxpc3QoKSkKLSAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgICAgICBpbnZhbGlk
YXRlUmVuZGVyZXJzKCk7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1E
YXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCkKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgZmlyc3RPcHRpb24tPnNldFNlbGVj
dGVkU3RhdGUodHJ1ZSk7CiAKICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKLSAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxk
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0
aW9uLmgiCkBAIC0yNjUsMjcgKzI2NiwyOCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmRlbGV0
ZVJvdyhpbnQgaW5kCiAgICAgcm93LT5yZW1vdmUoZWMpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNUYWJsZUNlbGxBbmNlc3RvcihOb2RlKiBuKQorc3RhdGljIGlubGluZSBib29sIGlzVGFi
bGVDZWxsQW5jZXN0b3IoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gbi0+
aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwKLSAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZSh0Zm9vdFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0clRhZykgfHwK
LSAgICAgICAgICAgbi0+aGFzVGFnTmFtZSh0aFRhZyk7CisgICAgcmV0dXJuIGVsZW1lbnQuaGFz
VGFnTmFtZSh0aGVhZFRhZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRib2R5VGFn
KQorICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGZvb3RUYWcpCisgICAgICAgIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZSh0clRhZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRo
VGFnKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0VGFibGVDZWxsc0NoYW5nZWQoTm9kZSogbikKK3N0
YXRpYyBib29sIHNldFRhYmxlQ2VsbHNDaGFuZ2VkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
QVNTRVJUKG4pOwogICAgIGJvb2wgY2VsbENoYW5nZWQgPSBmYWxzZTsKIAotICAgIGlmIChuLT5o
YXNUYWdOYW1lKHRkVGFnKSkKKyAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRkVGFnKSkKICAg
ICAgICAgY2VsbENoYW5nZWQgPSB0cnVlOwotICAgIGVsc2UgaWYgKGlzVGFibGVDZWxsQW5jZXN0
b3IobikpIHsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG4tPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgZWxzZSBpZiAoaXNUYWJsZUNl
bGxBbmNlc3RvcihlbGVtZW50KSkgeworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgICAgICBjZWxsQ2hhbmdlZCB8PSBz
ZXRUYWJsZUNlbGxzQ2hhbmdlZChjaGlsZCk7CiAgICAgfQogCiAgICAgaWYgKGNlbGxDaGFuZ2Vk
KQotICAgICAgIG4tPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgZWxlbWVudC5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICByZXR1cm4gY2VsbENoYW5nZWQ7CiB9CkBA
IC00MjIsMTAgKzQyNCwxMCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvCiAgICAgaWYgKGJvcmRlcnNCZWZvcmUgIT0gY2VsbEJvcmRlcnMoKSB8fCBvbGRQYWRkaW5n
ICE9IG1fcGFkZGluZykgewogICAgICAgICBtX3NoYXJlZENlbGxTdHlsZSA9IG51bGxwdHI7CiAg
ICAgICAgIGJvb2wgY2VsbENoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChOb2RlKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisg
ICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqdGhpcykp
CiAgICAgICAgICAgICBjZWxsQ2hhbmdlZCB8PSBzZXRUYWJsZUNlbGxzQ2hhbmdlZChjaGlsZCk7
CiAgICAgICAgIGlmIChjZWxsQ2hhbmdlZCkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgSFRNTFRleHRB
cmVhRWxlbWVudDo6c2V0VmFsdWVDb21tb24KICAgICBzZXRJbm5lclRleHRWYWx1ZShtX3ZhbHVl
KTsKICAgICBzZXRMYXN0Q2hhbmdlV2FzTm90VXNlckVkaXQoKTsKICAgICB1cGRhdGVQbGFjZWhv
bGRlclZpc2liaWxpdHkoKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIodHJ1ZSk7CiAKICAgICAvLyBTZXQgdGhlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIHRl
eHQgdmFsdWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Niw3ICsxNjYsNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQCiAg
ICAgaWYgKHBsYWNlSG9sZGVyV2FzVmlzaWJsZSA9PSBtX2lzUGxhY2Vob2xkZXJWaXNpYmxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Myw3ICs2ODMsNyBAQCBib29sIElucHV0VHlw
ZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BCiB2b2lkIElucHV0VHlwZTo6c2V0VmFsdWUoY29u
c3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2
ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKICAgICBlbGVtZW50KCkuc2V0VmFsdWVJbnRl
cm5hbChzYW5pdGl6ZWRWYWx1ZSwgZXZlbnRCZWhhdmlvcik7Ci0gICAgZWxlbWVudCgpLnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJl
ZSgpOwogICAgIGlmICghdmFsdWVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNo
IChldmVudEJlaGF2aW9yKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5
cGUuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklu
cHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIE51bWJl
cklucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDCiB7CiAgICAgSW5wdXRUeXBlOjptaW5Pck1h
eEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gdGhp
cy0+ZWxlbWVudCgpOwotICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVs
ZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
MCw3ICs1NTAsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nCiAg
ICAgZWxlbWVudCgpLnNldFZhbHVlRnJvbVJlbmRlcmVyKGlubmVyVGV4dCk7CiAgICAgZWxlbWVu
dCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwogICAgIC8vIFJlY2FsYyBmb3IgOmlu
dmFsaWQgY2hhbmdlLgotICAgIGVsZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ZWxlbWVudCgpLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGRpZFNldFZhbHVl
QnlVc2VyRWRpdCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50
LmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgTWF0aE1MRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QKICAgICAgICAgYm9vbCB3YXNMaW5rID0gaXNMaW5r
KCk7CiAgICAgICAgIHNldElzTGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0
TGlua3ModGhpcykpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKLSAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcm93c3BhbkF0dHIpIHsKICAgICAg
ICAgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4ocmVuZGVyZXIoKSkgJiYgaGFzVGFnTmFtZShtdGRU
YWcpKQogICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyZXIoKSku
Y29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9N
YXRoTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRo
bWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA2LDcgKzIwNiw3IEBAIHZvaWQgTWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWQK
ICAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKCptX3NlbGVjdGVk
Q2hpbGQpOwogCiAgICAgbV9zZWxlY3RlZENoaWxkID0gbmV3U2VsZWN0ZWRDaGlsZDsKLSAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwog
fQogCiB2b2lkIE1hdGhNTFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQm
IGV2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0TmVlZHNTdHlsZVJlY2FsYygKIHsKICAgICBBU1NFUlQo
IWVsZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3Vt
ZW50OjpOb3RJblBhZ2VDYWNoZSk7CiAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQt
PnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVt
ZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogZG91YmxlIEFuaW1hdGlvbkJh
c2U6OmR1cmF0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDczNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmNsZWFyKFIKICAgICB9KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
d2UgZGlkbid0IGRvIGFueXRoaW5nIE9SIHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRy
eSB0bwotICAgIC8vIGRvIGEgc2V0TmVlZHNTdHlsZVJlY2FsYygpIHdoZW4gc3VzcGVuZGVkKS4K
KyAgICAvLyBkbyBhIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCku
CiAgICAgUmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLnRha2UoJnJlbmRlcmVyKTsKICAgICBBU1NFUlQoYW5pbWF0aW9uKTsKICAgICBy
ZW5kZXJlci5zZXRJc0NTU0FuaW1hdGluZyhmYWxzZSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgZG91
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdAogICAgICAgICAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBjb21wb3NpdGVBbmltYXRpb24ua2V5LT5lbGVtZW50KCk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNh
Y2hlKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRo
ZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5
bGVBbmRMYXllcnMoKTsKICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmZpcmVFdmUKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGNo
YW5nZSA6IG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoKQotICAgICAgICBjaGFuZ2UtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBjaGFuZ2UtPmlu
dmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogCiAgICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0
Y2guY2xlYXIoKTsKIApAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXNlQW4KIAogICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5p
bWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpyZW5kZXJlcik7CiAgICAgaWYgKGNv
bXBvc2l0ZUFuaW1hdGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAg
ICByZW5kZXJlci0+ZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxl
Q2hhbmdlKTsKKyAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJzKCk7CiAgICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlVHIKIAogICAgIENvbXBvc2l0ZUFuaW1hdGlv
biYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpyZW5kZXJl
cik7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5zaXRpb25BdFRpbWUoY3Nz
UHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCkt
PnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICByZW5k
ZXJlci0+ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgc3Rh
cnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5j
ZWxBbmltYXRpbwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCk7CiAg
ICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUo
KSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOwogICAgIGlmIChlbGVtZW50KQotICAgICAg
ICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAg
ICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiB9CiAKIGJvb2wgQW5p
bWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+JiBhbmltYXRlZFN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBS
ZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbQogICAgICAgICAgICAgQVNTRVJUKGVs
ZW1lbnQoKSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
bV9uZWVkc1RvU2V0U2l6ZUZvckFsdFRleHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsZW1l
bnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAg
ICAgICAgICAgZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTg1
LDcgKzY5ODUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQogewog
ICAgIC8vIFdlIHVzZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgc28gdGhhdCB3ZSByZWNhbGN1bGF0
ZSBzdHlsZSBmb3IgdGhlIGFuY2VzdG9yIG9mIGFuIGFub255bW91cyBvYmplY3QuCiAgICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSBlbmNsb3NpbmdFbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQt
PnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVt
ZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICByZW5kZXJlcigpLnJlcGFpbnQo
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQ5
LDcgKzM1NDksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExhCiAg
ICAgICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewogICAgICAg
ICAgICAgLy8gVGhlIGxheWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKCkKICAgICAgICAgICAgIC8vIGZvciB0aGUgZnJhbWUn
cyByZW5kZXJlciBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgICAgICAgICAgbV9yZW5kZXJW
aWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCktPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBtX3JlbmRlclZpZXcuZG9jdW1l
bnQoKS5vd25lckVsZW1lbnQoKS0+c2NoZWR1bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU3OCw3ICszNTc4LDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYQogICAgICAgICAgICAg
bV9yb290Q29udGVudExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKICAgICAgICAgaWYgKEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxlU2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBvd25l
ckVsZW1lbnQtPnNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhQ2hyb21lQ2xpZW50OiB7
CkBAIC0zNjM3LDcgKzM2MzcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5
SUZyYW1lCiAgICAgLy8gQ29tcG9zaXRpbmcgYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJlbmRlcklG
cmFtZTo6cmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCksIHNvCiAgICAgLy8gd2UgbmVl
ZCB0byBzY2hlZHVsZSBhIHN0eWxlIHJlY2FsYyBpbiBvdXIgcGFyZW50IGRvY3VtZW50LgogICAg
IGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQotICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxl
U2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIG93bmVy
RWxlbWVudC0+c2NoZWR1bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVy
JiBsYXllcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4OCwxMyArMTQ4OCwxNSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgCiB7CiAgICAgYm9vbCB2YWx1ZUNo
YW5nZWQgPSAoZHJhZ09uICE9IGlzRHJhZ2dpbmcoKSk7CiAgICAgc2V0SXNEcmFnZ2luZyhkcmFn
T24pOwotICAgIGlmICh2YWx1ZUNoYW5nZWQgJiYgbm9kZSgpICYmIChzdHlsZSgpLmFmZmVjdGVk
QnlEcmFnKCkgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQotICAgICAgICBub2RlKCktPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpKQog
ICAgICAgICByZXR1cm47CisgICAgYXV0byYgcmVuZGVyRWxlbWVudCA9IGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCp0aGlzKTsKIAotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJPYmplY3Q+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkpCisgICAgaWYg
KHZhbHVlQ2hhbmdlZCAmJiByZW5kZXJFbGVtZW50LmVsZW1lbnQoKSAmJiAoc3R5bGUoKS5hZmZl
Y3RlZEJ5RHJhZygpIHx8IHJlbmRlckVsZW1lbnQuZWxlbWVudCgpLT5jaGlsZHJlbkFmZmVjdGVk
QnlEcmFnKCkpKQorICAgICAgICByZW5kZXJFbGVtZW50LmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlck9iamVjdD4ocmVuZGVyRWxlbWVudCkpCiAgICAgICAgIGNoaWxkLnVwZGF0ZURyYWdT
dGF0ZShkcmFnT24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jlc291cmNlc0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHls
ZUNoYW5nCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihyZW5kZXJlciwgZmFsc2UpOwogCiAgICAgaWYgKHJlbmRlcmVyLmVs
ZW1lbnQoKSAmJiAhcmVuZGVyZXIuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAg
cmVuZGVyZXIuZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICAgICAgcmVuZGVyZXIuZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXll
cnMoKTsKIH0KIAogdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUo
UmVuZGVyT2JqZWN0JiByZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJp
YnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3MzcxKQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMTYgKzY1LDE2IEBAIHZvaWQgQXR0cmlidXRlQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0hUTUwpIHsK
LSAgICAgICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsK
KyAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVT
ZXRzLmF1dGhvclN0eWxlKCkuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKLSAgICAg
ICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxl
Q2hhbmdlKTsKKyAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7CiAKICAgICBpZiAoIWNo
aWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KG1fZWxlbWVudCkuZmlyc3QoKSkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0
aW9uLmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3ND
aGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTEgKzExNiwxMSBA
QCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChzaGFkb3dSb290ICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuaGFzU2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LnNldE5lZWRzU3R5
bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZWxlbWVu
dC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBtX2VsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7CiAKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KG1f
ZWxlbWVudCkuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3MzcxKQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwxOSArNjEsMTkgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxp
ZGF0ZVN0eQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3Qo
KSAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygp
KSB7Ci0gICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5n
ZSk7CisgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhJ
bmxpbmVTdHlsZUNoYW5nZSk7CisgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogCiAg
ICAgLy8gVGhpcyBjb3VsZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQgZGVz
Y2VuZGFudCBpbnZhbGlkYXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi4K
ICAgICAvLyBIb3dldmVyIHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUgYW5k
IHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVxdWly
ZWQgZGF0YSBzdHJ1Y3R1cmVzLgogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlID0g
cnVsZVNldHMuZmVhdHVyZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29udGFpbnMo
Y2hhbmdlZElkLmltcGwoKSk7CiAgICAgaWYgKG1heUFmZmVjdERlc2NlbmRhbnRTdHlsZSkKLSAg
ICAgICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAg
ICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBlbHNlCi0g
ICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsK
KyAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMDczNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVF
bGVtZW50UmVuCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiByZW5kZXJlciA9ICplbGVtZW50
LnJlbmRlcmVyKCk7CiAKLSAgICBpZiAodXBkYXRlLmlzU3ludGhldGljKSB7CisgICAgaWYgKHVw
ZGF0ZS5yZWNvbXBvc2l0ZUxheWVycykgewogICAgICAgICByZW5kZXJlci5zZXRTdHlsZShXVEZN
b3ZlKCp1cGRhdGUuc3R5bGUpLCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52
YWxpZGF0aW9uU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUludmFsaWRhdGlvblNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVJbnZhbGlkYXRpb25TY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFN0eWxlIHsKKworZW51bSBjbGFzcyBJbnZhbGlkYXRpb25TY29wZSB7CisgICAgTm9u
ZSwKKyAgICBFbGVtZW50LAorICAgIFN1YnRyZWUsCisgICAgUmVuZGVyZXJzCit9OworCitlbnVt
IGNsYXNzIEludmFsaWRhdGlvbk1vZGUgeworICAgIE5vcm1hbCwKKyAgICBSZWNvbXBvc2l0ZUxh
eWVycworfTsKKworfQorfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHJl
dmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBTY29wZTo6dXBkYXRlQWN0aXZl
U3R5bGVTaGVldHMoVXBkYQogICAgIGlmIChyZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykgewogICAg
ICAgICBpZiAobV9zaGFkb3dSb290KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHNoYWRvd0No
aWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKm1fc2hhZG93Um9vdCkpCi0gICAgICAgICAg
ICAgICAgc2hhZG93Q2hpbGQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAg
IHNoYWRvd0NoaWxkLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBtX2RvY3VtZW50LnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCShy
ZXZpc2lvbiAyMDczNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMyArMjAwLDEzIEBAIEVsZW1lbnRVcGRhdGUg
VHJlZVJlc29sdmVyOjpyZXNvbHZlRWxlbWUKICAgICBpZiAoIWFmZmVjdHNSZW5kZXJlZFN1YnRy
ZWUoZWxlbWVudCwgKm5ld1N0eWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGJvb2wg
c2hvdWxkUmVjb25zdHJ1Y3RSZW5kZXJUcmVlID0gZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA9
PSBSZWNvbnN0cnVjdFJlbmRlclRyZWUgfHwgcGFyZW50KCkuY2hhbmdlID09IERldGFjaDsKKyAg
ICBib29sIHNob3VsZFJlY29uc3RydWN0UmVuZGVyVHJlZSA9IGVsZW1lbnQuc3R5bGVJbnZhbGlk
YXRpb25TY29wZSgpID09IEludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnMgfHwgcGFyZW50KCku
Y2hhbmdlID09IERldGFjaDsKICAgICBhdXRvKiByZW5kZXJlclRvVXBkYXRlID0gc2hvdWxkUmVj
b25zdHJ1Y3RSZW5kZXJUcmVlID8gbnVsbHB0ciA6IGVsZW1lbnQucmVuZGVyZXIoKTsKIAogICAg
IGF1dG8gdXBkYXRlID0gY3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKFdURk1vdmUobmV3U3R5
bGUpLCByZW5kZXJlclRvVXBkYXRlLCBtX2RvY3VtZW50KTsKIAotICAgIGlmIChlbGVtZW50LnN0
eWxlQ2hhbmdlVHlwZSgpID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKQotICAgICAgICB1cGRhdGUu
aXNTeW50aGV0aWMgPSB0cnVlOworICAgIGlmIChlbGVtZW50LnN0eWxlSW52YWxpZGF0aW9uTW9k
ZSgpID09IEludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKQorICAgICAgICB1cGRh
dGUucmVjb21wb3NpdGVMYXllcnMgPSB0cnVlOwogCiAgICAgYXV0byogZXhpc3RpbmdTdHlsZSA9
IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsKIApAQCAtMjMzLDcgKzIzMyw3IEBAIEVsZW1lbnRVcGRh
dGUgVHJlZVJlc29sdmVyOjpyZXNvbHZlRWxlbWUKICAgICAgICAgICAgIHVwZGF0ZS5jaGFuZ2Ug
PSBEZXRhY2g7CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZS5jaGFuZ2UgIT0gRGV0YWNoICYmIChw
YXJlbnQoKS5jaGFuZ2UgPT0gRm9yY2UgfHwgZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBG
dWxsU3R5bGVDaGFuZ2UpKQorICAgIGlmICh1cGRhdGUuY2hhbmdlICE9IERldGFjaCAmJiAocGFy
ZW50KCkuY2hhbmdlID09IEZvcmNlIHx8IGVsZW1lbnQuc3R5bGVJbnZhbGlkYXRpb25TY29wZSgp
ID09IEludmFsaWRhdGlvblNjb3BlOjpTdWJ0cmVlKSkKICAgICAgICAgdXBkYXRlLmNoYW5nZSA9
IEZvcmNlOwogCiAgICAgcmV0dXJuIHVwZGF0ZTsKQEAgLTI0NSw3ICsyNDUsNyBAQCBFbGVtZW50
VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7CiAgICAgaWYgKHJlbmRlcmVyVG9VcGRhdGUgJiYg
ZG9jdW1lbnQuZnJhbWUoKS0+YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqcmVuZGVyZXJU
b1VwZGF0ZSwgKm5ld1N0eWxlLCBhbmltYXRlZFN0eWxlKSkKLSAgICAgICAgdXBkYXRlLmlzU3lu
dGhldGljID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlLnJlY29tcG9zaXRlTGF5ZXJzID0gdHJ1ZTsK
IAogICAgIGlmIChhbmltYXRlZFN0eWxlKSB7CiAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBkZXRl
cm1pbmVDaGFuZ2UocmVuZGVyZXJUb1VwZGF0ZS0+c3R5bGUoKSwgKmFuaW1hdGVkU3R5bGUpOwpA
QCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVl
KCkKIAogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHRl
eHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKLSAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlQ2hh
bmdlVHlwZSgpID09IFJlY29uc3RydWN0UmVuZGVyVHJlZSAmJiBwYXJlbnQuY2hhbmdlICE9IERl
dGFjaCkKKyAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBJ
bnZhbGlkYXRpb25TY29wZTo6UmVuZGVyZXJzICYmIHBhcmVudC5jaGFuZ2UgIT0gRGV0YWNoKQog
ICAgICAgICAgICAgICAgIG1fdXBkYXRlLT5hZGRUZXh0KHRleHQsIHBhcmVudC5lbGVtZW50KTsK
IAogICAgICAgICAgICAgdGV4dC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjA3MzcyKQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBu
YW1lc3BhY2UgU3R5bGUgewogc3RydWN0IEVsZW1lbnRVcGRhdGUgewogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CiAgICAgQ2hhbmdlIGNoYW5nZSB7IE5vQ2hhbmdlIH07
Ci0gICAgYm9vbCBpc1N5bnRoZXRpYyB7IGZhbHNlIH07CisgICAgYm9vbCByZWNvbXBvc2l0ZUxh
eWVycyB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBVcGRhdGUgewpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU1ZH
QUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY28KICAgICAgICAgc2V0SXNMaW5rKCFocmVm
KCkuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwogICAgICAgICBpZiAo
d2FzTGluayAhPSBpc0xpbmsoKSkgewogICAgICAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25H
dWFyZCBndWFyZCgqdGhpcyk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3Bw
CShyZXZpc2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDE0ICsyMzksMTQgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGFwcGx5Q1NTUHJvcGVydHlUb1RhcgogICAgIGlmICghdGFyZ2V0RWxlbWVudC5l
bnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5zZXRQcm9wZXJ0eShpZCwgdmFsdWUs
IGZhbHNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFs
aWRhdGVTdHlsZUFuZExheWVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlQ1NT
UHJvcGVydHlGcm9tVGFyZ2V0KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIENTU1Byb3BlcnR5
SUQgaWQpCiB7CiAgICAgQVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7
CiAgICAgdGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5y
ZW1vdmVQcm9wZXJ0eShpZCk7Ci0gICAgdGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFsaWRhdGVTdHls
ZUFuZExheWVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRv
VGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMw
MSw3IEBAIGludCBTVkdFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAKIGJvb2wgU1ZHRWxlbWVu
dDo6d2lsbFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmICghbV9z
dmdSYXJlRGF0YSB8fCBzdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNTdHlsZUNoYW5nZSkK
KyAgICBpZiAoIW1fc3ZnUmFyZURhdGEgfHwgc3R5bGVJbnZhbGlkYXRpb25Nb2RlKCkgPT0gU3R5
bGU6OkludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAvLyBJZiB0aGUgc3R5bGUgY2hhbmdlcyBiZWNhdXNlIG9mIGEgcmVndWxhciBw
cm9wZXJ0eSBjaGFuZ2UgKG5vdCBpbmR1Y2VkIGJ5IFNNSUwgYW5pbWF0aW9ucyB0aGVtc2VsdmVz
KQogICAgIC8vIHJlc2V0IHRoZSAiY29tcHV0ZWQgc3R5bGUgd2l0aG91dCBTTUlMIHN0eWxlIHBy
b3BlcnRpZXMiLCBzbyB0aGUgYmFzZSB2YWx1ZSBjaGFuZ2UgZ2V0cyByZWZsZWN0ZWQuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS5zZXRQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkodHJ1ZSk7CiAgICAgICAgIC8vIFRyaWdnZXIgc3R5
bGUgcmVjYWxjdWxhdGlvbiBmb3IgImVsZW1lbnRzIGFzIHJlc291cmNlIiAoZS5nLiByZWZlcmVu
Y2VkIGJ5IGZlSW1hZ2UpLgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxl
Q2hhbmdlKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogCiAgICAgLy8gVGhl
IGluc3RhbmNlcyBvZiBhbiBlbGVtZW50IGFyZSBjbG9uZXMgbWFkZSBpbiBzaGFkb3cgdHJlZXMg
dG8gaW1wbGVtZW50IDx1c2U+LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCShyZXZpc2lv
biAyMDczNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgYm9vbCBTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hh
bmdlKFNWRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50LT5p
bkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHRhcmdldEVsZW1lbnQtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICB0YXJnZXRFbGVt
ZW50LT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0
LDcgKzUxNCw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW52YWxpZGF0ZVNoYWRvd1RyZWUKICAg
ICBpZiAobV9zaGFkb3dUcmVlTmVlZHNVcGRhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3No
YWRvd1RyZWVOZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNv
bnN0cnVjdFJlbmRlclRyZWUpOworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICBpbnZh
bGlkYXRlRGVwZW5kZW50U2hhZG93VHJlZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMjA3MzcyKQorKysgU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsMTggKzQ4NiwxNiBAQCBi
b29sIEludGVybmFsczo6bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kCiAgICAgcmV0dXJuIG5vZGUu
bmVlZHNTdHlsZVJlY2FsYygpOwogfQogCi1zdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRv
U3RyaW5nKFN0eWxlQ2hhbmdlVHlwZSB0eXBlKQorc3RhdGljIFN0cmluZyBzdHlsZUludmFsaWRh
dGlvblNjb3BlVG9TdHJpbmcoU3R5bGU6OkludmFsaWRhdGlvblNjb3BlIHNjb3BlKQogewotICAg
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTm9TdHlsZUNoYW5nZToKKyAgICBzd2l0Y2ggKHNj
b3BlKSB7CisgICAgY2FzZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6Ok5vbmU6CiAgICAgICAg
IHJldHVybiAiTm9TdHlsZUNoYW5nZSI7Ci0gICAgY2FzZSBJbmxpbmVTdHlsZUNoYW5nZToKKyAg
ICBjYXNlIFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVudDoKICAgICAgICAgcmV0dXJu
ICJJbmxpbmVTdHlsZUNoYW5nZSI7Ci0gICAgY2FzZSBGdWxsU3R5bGVDaGFuZ2U6CisgICAgY2Fz
ZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OlN1YnRyZWU6CiAgICAgICAgIHJldHVybiAiRnVs
bFN0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAgICAgICBy
ZXR1cm4gIlN5bnRoZXRpY1N0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIFJlY29uc3RydWN0UmVuZGVy
VHJlZToKKyAgICBjYXNlIFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6UmVuZGVyZXJzOgogICAg
ICAgICByZXR1cm4gIlJlY29uc3RydWN0UmVuZGVyVHJlZSI7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtNTA2LDcgKzUwNCw3IEBAIHN0YXRpYyBTdHJpbmcgc3R5bGVDaGFu
Z2VUeXBlVG9TdHJpbmcoU3QKIAogU3RyaW5nIEludGVybmFsczo6c3R5bGVDaGFuZ2VUeXBlKE5v
ZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKG5vZGUuc3R5
bGVDaGFuZ2VUeXBlKCkpOworICAgIHJldHVybiBzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJp
bmcobm9kZS5zdHlsZUludmFsaWRhdGlvblNjb3BlKCkpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxz
OjpkZXNjcmlwdGlvbihKU0M6OkpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDczNzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxNi0xMC0xNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0
eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1
NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6ZGlkSW5pdGlhbGl6ZVBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6
OnBsdWdpblByb2Nlc3NDcmFzaGVkKToKKwogMjAxNi0xMC0xNCAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBNYWMgYnVpbGQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMDczNzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmRpZEluaXRpYWxpemVQbHVnaW4oKQogICAgIGlmIChtX3BsdWdpbkVsZW1lbnQtPmRpc3Bs
YXlTdGF0ZSgpIDwgSFRNTFBsdWdJbkVsZW1lbnQ6OlJlc3RhcnRpbmcpIHsKICAgICAgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5MYXllcigpICYmIGZyYW1lKCkpIHsKICAgICAgICAgICAgIGZyYW1l
KCktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIG1fcGx1Z2lu
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChmcmFtZSgpICYmICFmcmFtZSgpLT5zZXR0aW5ncygpLm1heGlt
dW1QbHVnSW5TbmFwc2hvdEF0dGVtcHRzKCkpIHsKICAgICAgICAgICAgIGJlZ2luU25hcHNob3R0
aW5nUnVubmluZ1BsdWdpbigpOwpAQCAtNjczLDcgKzY3Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
ZGlkSW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fcGx1Z2lu
LT5wbHVnaW5MYXllcigpICYmIGZyYW1lKCkpIHsKICAgICAgICAgICAgIGZyYW1lKCktPnZpZXco
KS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+
c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBt
X3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChtX3BsdWdpbkVsZW1lbnQtPmRpc3BsYXlTdGF0ZSgpID09IEhUTUxQbHVnSW5F
bGVtZW50OjpSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNrKQogICAgICAgICAgICAgbV9w
bHVnaW5FbGVtZW50LT5kaXNwYXRjaFBlbmRpbmdNb3VzZUNsaWNrKCk7CkBAIC0xNTcwLDcgKzE1
NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblByb2Nlc3NDcmFzaGVkKCkKICAgICBpZiAo
IWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgbV9wbHVnaW5FbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsK
IAogICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpLnNldFBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVk
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYt
MTAtMTcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFt
ZSBzZXROZWVkc1N0eWxlUmVjYWxjIHRvIGludmFsaWRhdGVTdHlsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJIb3N0
ZWROZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldyBjcmVhdGVQbHVnaW5MYXllcl0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3JlYXRl
UGx1Z2luXSk6CisKIDIwMTYtMTAtMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIE1vdmUgQ1NTIGNsYXNzZXMgZnJvbSBFeGNlcHRpb25Db2RlIHRvIEV4Y2VwdGlv
bgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0JKHJldmlzaW9uIDIwNzM3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk5LDEwICsx
MDk5LDEwIEBAIC0gKEJPT0wpY3JlYXRlUGx1Z2luCiAgICAgICAgICAgICAgICAgcmVhbFBsdWdp
bkxheWVyLmdldCgpLmF1dG9yZXNpemluZ01hc2sgPSBrQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtD
QUxheWVySGVpZ2h0U2l6YWJsZTsKICAgICAgICAgICAgICAgICBbX3BsdWdpbkxheWVyLmdldCgp
IGFkZFN1YmxheWVyOnJlYWxQbHVnaW5MYXllci5nZXQoKV07CiAKLSAgICAgICAgICAgICAgICAv
LyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNpbmNlIHdlIGtub3cgd2UnbGwgbmVl
ZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5bGVSZWNhbGMoKQorICAgICAgICAg
ICAgICAgIC8vIEVhZ2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3
ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lkcyBmaXJpbmcgaW52YWxpZGF0ZVN0eWxlKCkKICAgICAg
ICAgICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5z
IGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
MDMzCiAgICAgICAgICAgICAgICAgY29yZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVy
Q29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgIFtz
ZWxmIGVsZW1lbnRdLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIFtzZWxmIHNldFdhbnRzTGF5ZXI6WUVTXTsKIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dl
Ykhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMjA3MzcxKQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgLSAodm9pZCljcmVhdGVQbHVnaW5M
YXllcgogICAgICAgICAvLyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNpbmNlIHdl
IGtub3cgd2UnbGwgbmVlZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5bGVSZWNh
bGMoKQogICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVn
aW5zIGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5MDMzCiAgICAgICAgIGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+dmlldygpLT5lbnRlckNvbXBv
c2l0aW5nTW9kZSgpOwotICAgICAgICBbc2VsZiBlbGVtZW50XS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIFtzZWxmIGVsZW1lbnRdLT5pbnZhbGlk
YXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICB9IGVsc2UKICAgICAgICAgc2VsZi53YW50c0xheWVy
ID0gWUVTOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291817</attachid>
            <date>2016-10-17 07:26:36 -0700</date>
            <delta_ts>2016-10-17 08:12:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-enum-11.patch</filename>
            <type>text/plain</type>
            <size>101638</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBAQAorMjAxNi0xMC0xNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5
bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbHNvIHJlbmFtZSBTdHlsZUNoYW5nZVR5cGUgZW51bSBhbmQg
c29tZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY2xhcml0eS4gRm9yIGV4YW1wbGUKKworICAgICAg
ICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
KworICAgICAgICBiZWNvbWVzCisKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJzKCk7CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVk
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q1NTVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnVud3JhcEZ1bGxTY3JlZW5S
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0QW5pbWF0aW5nRnVsbFNj
cmVlbik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEZvY3VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0ZVJl
bmRlcmVycyk6CisKKyAgICAgICAgICAgIE1vdmUgcHVibGljIGludmFsaWRhdGlvbiBmdW5jdGlv
bnMgdG8gRWxlbWVudCB0aWdodGVuaW5nIHR5cGluZy4KKyAgICAgICAgICAgIFVzZSBzZXBhcmF0
ZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBlbnVtIHZhbHVlcy4KKyAgICAgICAgICAgIFRoaXMgd2F5
IHRoZSBjYWxsIHNpdGVzIGxvb2sgbmljZXIgYW5kIG9ubHkgdXNlZnVsIGNvbWJpbmF0aW9ucyBh
cmUgZXhwb3NlZC4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YWRkU2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKToKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlRWRpdGFiaWxp
dHlGcm9tQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZGp1c3RTdHls
ZUludmFsaWRhdGlvbik6CisKKyAgICAgICAgICAgIFVwZGF0ZSBzY29wZSBhbmQgbW9kZSBzZXBh
cmF0ZWx5LiBUaGVyZSB3YXMgYSBwb3RlbnRpYWwgYnVnIGhlcmUgd2hlcmUKKyAgICAgICAgICAg
IFN5bnRoZXRpY1N0eWxlQ2hhbmdlIGNvdWxkIG92ZXJ3cml0ZSBGdWxsU3R5bGVDaGFuZ2UgKG5v
IGtub3duIHJlcHJvKS4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dXBkYXRlQW5jZXN0b3Jz
Rm9yU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bmVlZHNTdHlsZVJlY2FsYyk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhck5lZWRzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6c3R5bGVJbnZhbGlkYXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzdHlsZUludmFsaWRhdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xl
YXJTdHlsZUludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzdHlsZUNoYW5n
ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0U3R5bGVDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMpOgorICAg
ICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6
OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSk6CisgICAgICAgICogZG9tL1Nsb3RBc3NpZ25tZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsb3RBc3NpZ25tZW50OjphZGRTbG90RWxlbWVudEJ5
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTbG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1l
bnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNs
b3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRl
bnRDaGFuZ2UpOgorICAgICAgICAqIGRvbS9WaXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxp
bmspOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUp
OgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNhbGN1
bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6YWRk
SW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVu
dDo6cmVtb3ZlSW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRl
VmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0ZWRGb3Jt
Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFs
aWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1dHRvbik6CisgICAgICAgICogaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGcmFtZU93bmVyRWxlbWVudDo6c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpydW5Qb3N0VHlw
ZVVwZGF0ZVRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNr
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvRmlsbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aEF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWluTGVuZ3RoQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIpOgorICAgICAg
ICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICog
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1
c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVt
b3ZlU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgICogaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xp
c3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0
aXBsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVz
ZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc1RhYmxlQ2VsbEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRhYmxlQ2Vs
bHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVDb21tb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0
eSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAq
IG1hdGhtbC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxl
Y3RlZENoaWxkKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRz
QW5kVXBkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjppbWFnZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5SUZyYW1lc09mQ29tcG9zaXRp
bmdDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCk6CisgICAgICAgICogc3R5bGUvQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpB
dHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
c3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAq
IHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBzdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBk
YXRlcjo6dXBkYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUludmFs
aWRhdGlvblNjb3BlLmg6IEFkZGVkLgorCisgICAgICAgICAgICBTdHlsZUNoYW5nZVR5cGUgZW51
bSBzcGxpdHMgaW50byBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgYW5kIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlLgorICAgICAgICAgICAgTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KKworICAg
ICAgICAqIHN0eWxlL1N0eWxlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNj
b3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVz
b2x2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3Jl
YXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVl
UmVzb2x2ZXI6OnJlc29sdmVDb21wb3NlZFRyZWUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVXBk
YXRlLmg6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NTUHJvcGVydHlU
b1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmludmFsaWRhdGVTVkdQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmludmFsaWRh
dGVTaGFkb3dUcmVlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5
bGVDaGFuZ2VUeXBlVG9TdHJpbmcpOiBEZWxldGVkLgorCiAyMDE2LTEwLTE3ICBLb25zdGFudGlu
IFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBFbGVtaW5hdGUgY29kZSBk
dXBsaWNhdGlvbiBiZXR3ZWVuIFJlc291cmNlUmVxdWVzdCBlbmNvZGluZy9kZWNvZGluZyBpbXBs
ZW1lbnRhdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjIzNCw2
ICs2MjM0LDcgQEAKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNl
SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87
IH07CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQx
NjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUy
QUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHAgKi87IH07CisJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBT
dHlsZUludmFsaWRhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRp
b25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkx
NkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4NjIsNiArMTM4
NjMsNyBAQAogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NDE2MDM2
RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0
eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4MTM3QjgxREIz
QjUyNjAwNUM1OUJGIC8qIFN0eWxlSW52YWxpZGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxh
eW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5l
TGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzU3LDYgKzIyMzU5LDcgQEAKIAkJ
CQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1
OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJ
CQkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAq
LywKKwkJCQlFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRpb25TY29w
ZS5oICovLAogCQkJCUU0REFDRTZCMUQxMkUxMTYwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNv
dXJjZXMuY3BwICovLAogCQkJCUU0REFDRTY5MUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBlbmRp
bmdSZXNvdXJjZXMuaCAqLywKIAkJCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVS
ZWxhdGlvbnMuY3BwICovLApAQCAtMjUyMTYsNiArMjUyMTksOCBAQAogCQkJCUJDOTI2RjgxMEMw
NTUyNDcwMDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU3QjE1MEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxIZWFkRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMkFBMkYwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEhlYWRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyog
U3R5bGVJbnZhbGlkYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUEyOTlGRTgxRDdG
NUZBNjAwQTYwMDkzIC8qIFJlbmRlclRoZW1lQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTJBQTMxMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBODVCMTkwMEExQjE4QTIwMEQ4Qzg3QyAvKiBKU0hUTUxIdG1sRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM0OTE4QzkwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFt
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsMjQgKzEwMCwyMyBAQCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjpDaGVj
a0Rlc2NlbmRhCiAgICAgaWYgKG1faGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzSW5BdXRob3JT
aGVldCkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBkbyBhY3R1YWwgcnVsZSBtYXRj
aGluZyB0b28uCiAgICAgICAgIGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAg
IGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudC5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogCi0gICAgc3dpdGNoIChlbGVtZW50LnN0
eWxlQ2hhbmdlVHlwZSgpKSB7Ci0gICAgY2FzZSBOb1N0eWxlQ2hhbmdlOiB7CisgICAgc3dpdGNo
IChlbGVtZW50LnN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSkgeworICAgIGNhc2UgU3R5bGU6Oklu
dmFsaWRhdGlvblNjb3BlOjpOb25lOiB7CiAgICAgICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIHJ1
bGVDb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0LCBmaWx0ZXIpOwogICAgICAgICBydWxlQ29s
bGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25v
cmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cyk7CiAgICAgICAgIHJ1bGVDb2xsZWN0b3IubWF0Y2hB
dXRob3JSdWxlcyhmYWxzZSk7CiAKICAgICAgICAgaWYgKHJ1bGVDb2xsZWN0b3IuaGFzTWF0Y2hl
ZFJ1bGVzKCkpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKICAg
ICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKICAgICB9Ci0gICAgY2FzZSBJbmxp
bmVTdHlsZUNoYW5nZToKKyAgICBjYXNlIFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVu
dDoKICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICBjYXNlIEZ1bGxT
dHlsZUNoYW5nZToKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAgIGNhc2UgUmVj
b25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpT
dWJ0cmVlOgorICAgIGNhc2UgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnM6CiAg
ICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpObzsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwNzQw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1MDAsNyArMzUwMCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJl
c2kKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbihyb290Tm9kZSgpKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG8oKmVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5z
dHlsZSgpLmhhc1ZpZXdwb3J0VW5pdHMoKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRz
U3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgZWxlbWVudC0+aW52
YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogfQogCkBAIC0zODE4LDEwICszODE4LDEwIEBAIEVsZW1l
bnQqIERvY3VtZW50Ojpmb2N1c05hdmlnYXRpb25TdGFydGkKIHZvaWQgRG9jdW1lbnQ6OnNldENT
U1RhcmdldChFbGVtZW50KiBuKQogewogICAgIGlmIChtX2Nzc1RhcmdldCkKLSAgICAgICAgbV9j
c3NUYXJnZXQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgbV9jc3NUYXJnZXQtPmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBtX2Nzc1RhcmdldCA9IG47CiAgICAgaWYg
KG4pCi0gICAgICAgIG4tPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgbi0+aW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3Rlck5vZGVM
aXN0Rm9ySW52YWxpZGF0aW9uKExpdmVOb2RlTGlzdCYgbGlzdCkKQEAgLTU4MzUsOCArNTgzNSw4
IEBAIHN0YXRpYyB2b2lkIHVud3JhcEZ1bGxTY3JlZW5SZW5kZXJlcihSZW4KICAgICBib29sIHJl
cXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQ7CiAgICAgZnVsbFNjcmVlblJlbmRlcmVyLT51bndyYXBS
ZW5kZXJlcihyZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKTsKIAotICAgIGlmIChyZXF1aXJlc1Jl
bmRlclRyZWVSZWJ1aWxkICYmIGZ1bGxTY3JlZW5FbGVtZW50ICYmIGZ1bGxTY3JlZW5FbGVtZW50
LT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnROb2RlKCkt
PnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpZiAocmVx
dWlyZXNSZW5kZXJUcmVlUmVidWlsZCAmJiBmdWxsU2NyZWVuRWxlbWVudCAmJiBmdWxsU2NyZWVu
RWxlbWVudC0+cGFyZW50RWxlbWVudCgpKQorICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpLT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC02MDI3LDcgKzYwMjcsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRBbmltYXRpbmdGdWxsU2NyZWVu
KGJvCiAgICAgbV9pc0FuaW1hdGluZ0Z1bGxTY3JlZW4gPSBmbGFnOwogCiAgICAgaWYgKG1fZnVs
bFNjcmVlbkVsZW1lbnQgJiYgbV9mdWxsU2NyZWVuRWxlbWVudC0+aXNEZXNjZW5kYW50T2YodGhp
cykpIHsKLSAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgICAgIHNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lk
IEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgCiAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlID0gdGhpcy0+cmVuZGVyU3R5bGUoKTsKICAgICBib29sIHJlYWN0c1Rv
UHJlc3MgPSAocmVuZGVyU3R5bGUgJiYgcmVuZGVyU3R5bGUtPmFmZmVjdGVkQnlBY3RpdmUoKSkg
fHwgc3R5bGVBZmZlY3RlZEJ5QWN0aXZlKCk7CiAgICAgaWYgKHJlYWN0c1RvUHJlc3MpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CkBAIC02MTIs
NyArNjEyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRGb2N1cyhib29sIGZsYWcpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNlZCh0
aGlzLCBmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogCiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxl
bWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkKICAg
ICAgICAgZWxlbWVudC0+c2V0SGFzRm9jdXNXaXRoaW4oZmxhZyk7CkBAIC02MzIsMTMgKzYzMiwx
MyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQoYm9vbCBmbGFnKQogICAgICAgICAvLyBzdHls
ZSwgaXQgd291bGQgbmV2ZXIgZ28gYmFjayB0byBpdHMgbm9ybWFsIHN0eWxlIGFuZCByZW1haW4K
ICAgICAgICAgLy8gc3R1Y2sgaW4gaXRzIGhvdmVyZWQgc3R5bGUpLgogICAgICAgICBpZiAoIWZs
YWcpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmFmZmVjdGVkQnlIb3ZlcigpIHx8IGNoaWxkcmVuQWZm
ZWN0ZWRCeUhvdmVyKCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hh
bmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CkBAIC0xMzIyLDcg
KzEzMjIsNyBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhCiAgICAg
ICAgICAgICBlbGVtZW50RGF0YSgpLT5zZXRIYXNOYW1lQXR0cmlidXRlKCFuZXdWYWx1ZS5pc051
bGwoKSk7CiAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpwc2V1ZG9BdHRyKSB7
CiAgICAgICAgICAgICBpZiAobmVlZHNTdHlsZUludmFsaWRhdGlvbigpICYmIGlzSW5TaGFkb3dU
cmVlKCkpCi0gICAgICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFu
Z2UpOworICAgICAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6c2xvdEF0dHIpIHsKICAg
ICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCkpIHsKQEAgLTE0NDAs
NiArMTQ0MCwyNiBAQCBFbGVtZW50U3R5bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKGNvbnN0CiAg
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudFN0
eWxlKTsKIH0KIAordm9pZCBFbGVtZW50OjppbnZhbGlkYXRlU3R5bGUoKQoreworICAgIE5vZGU6
OmludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OkVsZW1lbnQpOworfQor
Cit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUFuZExheWVycygpCit7CisgICAgTm9kZTo6
aW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVudCwgU3R5bGU6
OkludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKTsKK30KKwordm9pZCBFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCkKK3sKKyAgICBOb2RlOjppbnZhbGlkYXRlU3R5
bGUoU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpTdWJ0cmVlKTsKK30KKwordm9pZCBFbGVtZW50
OjppbnZhbGlkYXRlUmVuZGVyZXJzKCkKK3sKKyAgICBOb2RlOjppbnZhbGlkYXRlU3R5bGUoU3R5
bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnMpOworfQorCiAjaWYgRU5BQkxFKFdFQl9B
TklNQVRJT05TKQogV2ViQW5pbWF0aW9uVmVjdG9yIEVsZW1lbnQ6OmdldEFuaW1hdGlvbnMoKQog
ewpAQCAtMTc1NCw3ICsxNzc0LDcgQEAgdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxT
aGFkb3dSbwogICAgIGZvciAoYXV0byYgdGFyZ2V0IDogcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHMpCiAgICAgICAgIHRhcmdldC0+ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7CiAK
LSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52
YWxpZGF0ZVJlbmRlcmVycygpOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQ
dXNoU2hhZG93Um9vdCgqdGhpcywgc2hhZG93Um9vdCk7CiAKQEAgLTE5MzYsNyArMTk1Niw3IEBA
IHN0YXRpYyB2b2lkIGNoZWNrRm9yRW1wdHlTdHlsZUNoYW5nZShFbGUKICAgICBpZiAoZWxlbWVu
dC5zdHlsZUFmZmVjdGVkQnlFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVu
dC5yZW5kZXJTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8ICghc3R5bGUtPmVtcHR5U3Rh
dGUoKSB8fCBlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkpCi0gICAgICAgICAgICBlbGVtZW50LnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtMTk0Nyw3ICsxOTY3LDcgQEAgc3RhdGljIHZv
aWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgIC8vIDplbXB0eSBzZWxlY3Rvci4K
ICAgICBjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UocGFyZW50KTsKIAotICAgIGlmIChwYXJlbnQu
c3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQorICAgIGlmIChwYXJlbnQuc3R5
bGVJbnZhbGlkYXRpb25TY29wZSgpID49IFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6U3VidHJl
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gOmZpcnN0LWNoaWxkLiAgSW4gdGhlIHBhcnNl
ciBjYWxsYmFjayBjYXNlLCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGFueXRoaW5nLCBzaW5jZSB3
ZSB3ZXJlIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLgpAQCAtMTk2MiwxNCArMTk4MiwxNCBAQCBzdGF0
aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIGlmIChuZXdGaXJz
dEVsZW1lbnQgIT0gZWxlbWVudEFmdGVyQ2hhbmdlKSB7CiAgICAgICAgICAgICBhdXRvKiBzdHls
ZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICgh
c3R5bGUgfHwgc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIGVsZW1l
bnRBZnRlckNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIGVs
ZW1lbnRBZnRlckNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRvIGhhbmRsZSBub2RlIHJlbW92YWwuCiAgICAg
ICAgIGlmIChjaGVja1R5cGUgPT0gU2libGluZ0VsZW1lbnRSZW1vdmVkICYmIG5ld0ZpcnN0RWxl
bWVudCA9PSBlbGVtZW50QWZ0ZXJDaGFuZ2UgJiYgbmV3Rmlyc3RFbGVtZW50KSB7CiAgICAgICAg
ICAgICBhdXRvKiBzdHlsZSA9IG5ld0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5maXJzdENoaWxkU3RhdGUoKSkKLSAgICAgICAg
ICAgICAgICBuZXdGaXJzdEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgICAgICBuZXdGaXJzdEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTk4Miw3ICsyMDAyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tG
b3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxl
bWVudEJlZm9yZUNoYW5nZSkgewogICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50QmVm
b3JlQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHls
ZS0+bGFzdENoaWxkU3RhdGUoKSkKLSAgICAgICAgICAgICAgICBlbGVtZW50QmVmb3JlQ2hhbmdl
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9yZUNo
YW5nZS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gV2UgYWxzbyBoYXZlIHRvIGhhbmRsZSBub2RlIHJlbW92YWwuICBUaGUgcGFyc2VyIGNhbGxi
YWNrIGNhc2UgaXMgc2ltaWxhciB0byBub2RlIHJlbW92YWwgYXMgd2VsbCBpbiB0aGF0IHdlIG5l
ZWQgdG8gY2hhbmdlIHRoZSBsYXN0IGNoaWxkCkBAIC0xOTkwLDEzICsyMDEwLDEzIEBAIHN0YXRp
YyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgaWYgKChjaGVja1R5
cGUgPT0gU2libGluZ0VsZW1lbnRSZW1vdmVkIHx8IGNoZWNrVHlwZSA9PSBGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbikgJiYgbmV3TGFzdEVsZW1lbnQgPT0gZWxlbWVudEJlZm9yZUNoYW5nZSAmJiBu
ZXdMYXN0RWxlbWVudCkgewogICAgICAgICAgICAgYXV0byogc3R5bGUgPSBuZXdMYXN0RWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sYXN0
Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIG5ld0xhc3RFbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1lbnQtPmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50QWZ0
ZXJDaGFuZ2UpIHsKICAgICAgICAgaWYgKGVsZW1lbnRBZnRlckNoYW5nZS0+c3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgICAgIGVsZW1lbnRBZnRlckNoYW5nZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnRBZnRl
ckNoYW5nZS0+YWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpIHsKICAgICAgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnRUb0ludmFsaWRhdGUgPSBlbGVtZW50QWZ0ZXJDaGFuZ2U7CiAgICAg
ICAgICAgICBkbyB7CkBAIC0yMDA0LDcgKzIwMjQsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNp
YmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgICAgICB9IHdoaWxlIChlbGVtZW50VG9JbnZhbGlk
YXRlICYmICFlbGVtZW50VG9JbnZhbGlkYXRlLT5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZygpKTsKIAogICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0ludmFsaWRhdGUpCi0gICAgICAg
ICAgICAgICAgZWxlbWVudFRvSW52YWxpZGF0ZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICAgICAgICAgIGVsZW1lbnRUb0ludmFsaWRhdGUtPmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAxNSw3ICsyMDM1LDcgQEAgc3RhdGljIHZv
aWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgIC8vIEZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zIHdlIGp1c3QgbWFyayB0aGUgcGFyZW50IG5vZGUgYXMgY2hhbmdlZCwgc2luY2Ugd2Ug
ZG9uJ3Qgd2FudCB0byBtYWtlIGNoaWxkcmVuQ2hhbmdlZCBPKG5eMikgYnkgY3Jhd2xpbmcgYWxs
IG91ciBraWRzCiAgICAgLy8gaGVyZS4gIHJlY2FsY1N0eWxlIHdpbGwgdGhlbiBmb3JjZSBhIHdh
bGsgb2YgdGhlIGNoaWxkcmVuIHdoZW4gaXQgc2VlcyB0aGF0IHRoaXMgaGFzIGhhcHBlbmVkLgog
ICAgIGlmIChwYXJlbnQuY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KSAmJiBlbGVtZW50QmVmb3JlQ2hhbmdlKQotICAgICAgICBwYXJlbnQuc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICBwYXJlbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQog
CiB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdl
KQpAQCAtMjcwNCw3ICsyNzI0LDcgQEAgYm9vbCBFbGVtZW50OjpuZWVkc1N0eWxlSW52YWxpZGF0
aW9uKCkgYwogewogICAgIGlmICghaW5SZW5kZXJlZERvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQor
ICAgIGlmIChzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgPj0gU3R5bGU6OkludmFsaWRhdGlvblNj
b3BlOjpTdWJ0cmVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGRvY3VtZW50KCku
aGFzUGVuZGluZ0ZvcmNlZFN0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMwNzEsNyArMzA5MSw3IEBAIGJvb2wgRWxlbWVudDo6Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVu
dCgKIHZvaWQgRWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChib29sIGZsYWcp
CiB7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0Q29udGFpbnNGdWxsU2NyZWVuRWxl
bWVudChmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogc3RhdGljIEVsZW1lbnQq
IHBhcmVudENyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw2ICs1NDMsMTEgQEAgcHVibGljOgogICAg
IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKICAgICBFbGVtZW50U3R5bGUgcmVzb2x2
ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKKyAgICB2b2lkIGludmFs
aWRhdGVTdHlsZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJzKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgdm9p
ZCBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CisKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygp
IGNvbnN0OwogICAgIHZvaWQgc2V0SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwogCkBAIC04MDgs
NyArODEzLDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SGFzRm9jdXNXaXRoaW4oYgogICAg
ICAgICByZXR1cm47CiAgICAgc2V0RmxhZyhmbGFnLCBIYXNGb2N1c1dpdGhpbik7CiAgICAgaWYg
KHN0eWxlQWZmZWN0ZWRCeUZvY3VzV2l0aGluKCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Niw3ICs2
NjYsNyBAQCB2b2lkIE5vZGU6Omluc3BlY3QoKQogc3RhdGljIE5vZGU6OkVkaXRhYmlsaXR5IGNv
bXB1dGVFZGl0YWJpbGl0eUZyb21Db21wdXRlZFN0eWxlKGNvbnN0IE5vZGUmIHN0YXJ0Tm9kZSwg
Tm9kZTo6VXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQpCiB7CiAgICAgLy8gSWRlYWxs
eSB3ZSdkIGNhbGwgQVNTRVJUKCFuZWVkc1N0eWxlUmVjYWxjKCkpIGhlcmUsIGJ1dAotICAgIC8v
IENvbnRhaW5lck5vZGU6OnNldEZvY3VzKCkgY2FsbHMgc2V0TmVlZHNTdHlsZVJlY2FsYygpLCBz
byB0aGUgYXNzZXJ0aW9uCisgICAgLy8gQ29udGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBp
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCksIHNvIHRoZSBhc3NlcnRpb24KICAgICAvLyB3b3Vs
ZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50KCkuCiAK
ICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAmc3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7CkBAIC03NTAsNiArNzUwLDE2IEBAIHZvaWQgTm9kZTo6ZGVyZWZF
dmVudFRhcmdldCgpCiAgICAgZGVyZWYoKTsKIH0KIAordm9pZCBOb2RlOjphZGp1c3RTdHlsZUlu
dmFsaWRhdGlvbihTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgc2NvcGUsIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHNjb3BlID4gc3R5bGVJbnZhbGlkYXRpb25TY29w
ZSgpKSB7CisgICAgICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZUludmFsaWRhdGlvblNjb3BlTWFz
azsKKyAgICAgICAgbV9ub2RlRmxhZ3MgfD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNjb3BlKSA8
PCBTdHlsZUludmFsaWRhdGlvblNjb3BlU2hpZnQ7CisgICAgfQorICAgIGlmIChtb2RlID09IFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlOjpSZWNvbXBvc2l0ZUxheWVycykKKyAgICAgICAgc2V0Rmxh
ZyhTdHlsZUludmFsaWRhdGlvbk1vZGVGbGFnKTsKK30KKwogaW5saW5lIHZvaWQgTm9kZTo6dXBk
YXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKQogewogICAgIGF1dG8gY29tcG9zZWRBbmNlc3Rv
cnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtNzU4LDEwICs3NjgsOCBAQCBp
bmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsCiAgICAgaWYgKGl0ICE9IGVu
ZCkgewogICAgICAgICBpdC0+c2V0RGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAKLSAg
ICAgICAgaWYgKGl0LT5jaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zdHlsZUNoYW5nZVR5cGUoKSA8
IEZ1bGxTdHlsZUNoYW5nZSkKLSAgICAgICAgICAgICAgICBpdC0+c2V0U3R5bGVDaGFuZ2UoRnVs
bFN0eWxlQ2hhbmdlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXQtPmNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpKQorICAgICAgICAgICAg
YWRqdXN0U3R5bGVJbnZhbGlkYXRpb24oU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpTdWJ0cmVl
LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZTo6Tm9ybWFsKTsKIAogICAgICAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAvLyBJdGVyYXRvciBza2lwcyBvdmVyIHNoYWRv
dyByb290cy4KQEAgLTc4Miw5ICs3OTAsOSBAQCBpbmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNl
c3RvcnNGb3JTdHlsCiAgICAgZG9jdW1lbnQoKS5zY2hlZHVsZVN0eWxlUmVjYWxjKCk7CiB9CiAK
LXZvaWQgTm9kZTo6c2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlw
ZSkKK3ZvaWQgTm9kZTo6aW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZSBz
Y29wZSwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBBU1NFUlQoY2hhbmdl
VHlwZSAhPSBOb1N0eWxlQ2hhbmdlKTsKKyAgICBBU1NFUlQoc2NvcGUgIT0gU3R5bGU6OkludmFs
aWRhdGlvblNjb3BlOjpOb25lKTsKICAgICBpZiAoIWluUmVuZGVyZWREb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTc5MiwxMSArODAwLDExIEBAIHZvaWQgTm9kZTo6c2V0TmVlZHNT
dHlsZVJlY2FsYyhTdHlsZUNoYW4KICAgICBpZiAoZG9jdW1lbnQoKS5pblJlbmRlclRyZWVVcGRh
dGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3R5bGVDaGFuZ2VUeXBlIGV4aXN0aW5nQ2hh
bmdlVHlwZSA9IHN0eWxlQ2hhbmdlVHlwZSgpOwotICAgIGlmIChjaGFuZ2VUeXBlID4gZXhpc3Rp
bmdDaGFuZ2VUeXBlKQotICAgICAgICBzZXRTdHlsZUNoYW5nZShjaGFuZ2VUeXBlKTsKKyAgICBi
b29sIG1hcmtBbmNlc3RvcnMgPSBzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgPT0gU3R5bGU6Oklu
dmFsaWRhdGlvblNjb3BlOjpOb25lIHx8IHNjb3BlID09IFN0eWxlOjpJbnZhbGlkYXRpb25TY29w
ZTo6UmVuZGVyZXJzOworCisgICAgYWRqdXN0U3R5bGVJbnZhbGlkYXRpb24oc2NvcGUsIG1vZGUp
OwogCi0gICAgaWYgKGV4aXN0aW5nQ2hhbmdlVHlwZSA9PSBOb1N0eWxlQ2hhbmdlIHx8IGNoYW5n
ZVR5cGUgPT0gUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKQorICAgIGlmIChtYXJrQW5jZXN0b3JzKQog
ICAgICAgICB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygpOwogfQogCkBAIC0xMTk2LDcg
KzEyMDQsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IE5vZGU6CiAgICAg
aWYgKHBhcmVudE9yU2hhZG93SG9zdE5vZGUoKS0+aXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAg
c2V0RmxhZyhJc0luU2hhZG93VHJlZUZsYWcpOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhS
ZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxp
ZGF0aW9uU2NvcGU6OlJlbmRlcmVycyk7CiAKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KQEAgLTYxLDIxICs2Miw4IEBAIGNsYXNzIFNoYWRvd1Jvb3Q7
CiBjbGFzcyBUb3VjaEV2ZW50OwogY2xhc3MgVUlSZXF1ZXN0RXZlbnQ7CiAKLWNvbnN0IGludCBu
b2RlU3R5bGVDaGFuZ2VTaGlmdCA9IDE0OwotCiB1c2luZyBOb2RlT3JTdHJpbmcgPSBzdGQ6OmV4
cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz47CiAKLS8vIFN5bnRoZXRp
Y1N0eWxlQ2hhbmdlIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBlbnRpcmUg
c3R5bGUgY2hhbmdlIGxvZ2ljIGV2ZW4gdGhvdWdoCi0vLyBubyBzdHlsZSBwcm9wZXJ0eSBoYXMg
YWN0dWFsbHkgY2hhbmdlZC4gSXQgaXMgdXNlZCB0byByZXN0cnVjdHVyZSB0aGUgdHJlZSB3aGVu
LCBmb3IgaW5zdGFuY2UsCi0vLyBSZW5kZXJMYXllcnMgYXJlIGNyZWF0ZWQgb3IgZGVzdHJveWVk
IGR1ZSB0byBhbmltYXRpb24gY2hhbmdlcy4KLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsgCi0gICAg
Tm9TdHlsZUNoYW5nZSA9IDAsIAotICAgIElubGluZVN0eWxlQ2hhbmdlID0gMSA8PCBub2RlU3R5
bGVDaGFuZ2VTaGlmdCwgCi0gICAgRnVsbFN0eWxlQ2hhbmdlID0gMiA8PCBub2RlU3R5bGVDaGFu
Z2VTaGlmdCwgCi0gICAgU3ludGhldGljU3R5bGVDaGFuZ2UgPSAzIDw8IG5vZGVTdHlsZUNoYW5n
ZVNoaWZ0LAotICAgIFJlY29uc3RydWN0UmVuZGVyVHJlZSA9IDQgPDwgbm9kZVN0eWxlQ2hhbmdl
U2hpZnQsCi19OwotCiBjbGFzcyBOb2RlUmFyZURhdGFCYXNlIHsKIHB1YmxpYzoKICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQpAQCAtMzIx
LDggKzMwOSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZXJBY3Rpb25FbGVtZW50KGJvb2wg
ZmxhZykgeyBzZXRGbGFnKGZsYWcsIElzVXNlckFjdGlvbkVsZW1lbnQpOyB9CiAKICAgICBib29s
IGluUmVuZGVyZWREb2N1bWVudCgpIGNvbnN0OwotICAgIGJvb2wgbmVlZHNTdHlsZVJlY2FsYygp
IGNvbnN0IHsgcmV0dXJuIHN0eWxlQ2hhbmdlVHlwZSgpICE9IE5vU3R5bGVDaGFuZ2U7IH0KLSAg
ICBTdHlsZUNoYW5nZVR5cGUgc3R5bGVDaGFuZ2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8U3R5bGVDaGFuZ2VUeXBlPihtX25vZGVGbGFncyAmIFN0eWxlQ2hhbmdlTWFzayk7IH0K
KyAgICBib29sIG5lZWRzU3R5bGVSZWNhbGMoKSBjb25zdCB7IHJldHVybiBzdHlsZUludmFsaWRh
dGlvblNjb3BlKCkgIT0gU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpOb25lOyB9CisgICAgU3R5
bGU6OkludmFsaWRhdGlvblNjb3BlIHN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSBjb25zdDsKKyAg
ICBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSBzdHlsZUludmFsaWRhdGlvbk1vZGUoKSBjb25zdDsK
ICAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWco
Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KICAgICBib29sIHN0eWxlSXNBZmZlY3RlZEJ5
UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhTdHlsZUlzQWZmZWN0ZWRC
eVByZXZpb3VzU2libGluZyk7IH0KICAgICBib29sIGlzRWRpdGluZ1RleHQoKSBjb25zdCB7IHJl
dHVybiBnZXRGbGFnKElzVGV4dEZsYWcpICYmIGdldEZsYWcoSXNFZGl0aW5nVGV4dE9yVW5kZWZp
bmVkQ3VzdG9tRWxlbWVudEZsYWcpOyB9CkBAIC0zMzAsOCArMzE5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgeyBzZXRGbGFnKENoaWxkTmVlZHNTdHls
ZVJlY2FsY0ZsYWcpOyB9CiAgICAgdm9pZCBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsg
bV9ub2RlRmxhZ3MgJj0gfihDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnIHwgRGlyZWN0Q2hpbGRO
ZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVl
ZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgPSBGdWxsU3R5bGVDaGFuZ2UpOwotICAgIHZv
aWQgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCkgeyBtX25vZGVGbGFncyAmPSB+U3R5bGVDaGFuZ2VN
YXNrOyB9CisgICAgdm9pZCBjbGVhck5lZWRzU3R5bGVSZWNhbGMoKSB7IGNsZWFyU3R5bGVJbnZh
bGlkYXRpb24oKTsgfQogCiAgICAgYm9vbCBpc0xpbmsoKSBjb25zdCB7IHJldHVybiBnZXRGbGFn
KElzTGlua0ZsYWcpOyB9CiAgICAgdm9pZCBzZXRJc0xpbmsoYm9vbCBmbGFnKSB7IHNldEZsYWco
ZmxhZywgSXNMaW5rRmxhZyk7IH0KQEAgLTU5Nyw4ICs1ODUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIC8vIFRoZXNlIGJpdHMgYXJlIHVzZWQgYnkgZGVyaXZlZCBjbGFzc2VzLCBwdWxsZWQgdXAg
aGVyZSBzbyB0aGV5IGNhbgogICAgICAgICAvLyBiZSBzdG9yZWQgaW4gdGhlIHNhbWUgbWVtb3J5
IHdvcmQgYXMgdGhlIE5vZGUgYml0cyBhYm92ZS4KICAgICAgICAgSXNQYXJzaW5nQ2hpbGRyZW5G
aW5pc2hlZEZsYWcgPSAxIDw8IDEzLCAvLyBFbGVtZW50Ci0KLSAgICAgICAgU3R5bGVDaGFuZ2VN
YXNrID0gMSA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCB8IDEgPDwgKG5vZGVTdHlsZUNoYW5nZVNo
aWZ0ICsgMSkgfCAxIDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDIpLAorICAgICAgICBTdHls
ZUludmFsaWRhdGlvblNjb3BlU2hpZnQgPSAxNCwKKyAgICAgICAgU3R5bGVJbnZhbGlkYXRpb25T
Y29wZU1hc2sgPSAzIDw8IFN0eWxlSW52YWxpZGF0aW9uU2NvcGVTaGlmdCwKKyAgICAgICAgU3R5
bGVJbnZhbGlkYXRpb25Nb2RlRmxhZyA9IDEgPDwgMTYsCiAgICAgICAgIElzRWRpdGluZ1RleHRP
clVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnID0gMSA8PCAxNywKICAgICAgICAgSGFzRm9jdXNX
aXRoaW4gPSAxIDw8IDE4LAogICAgICAgICBIYXNTeW50aGV0aWNBdHRyQ2hpbGROb2Rlc0ZsYWcg
PSAxIDw8IDE5LApAQCAtNjU5LDcgKzY0OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0
VHJlZVNjb3BlKFRyZWVTY29wZSYgc2NvcGUpIHsgbV90cmVlU2NvcGUgPSAmc2NvcGU7IH0KIAot
ICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpIHsgbV9u
b2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8IGNoYW5nZVR5cGU7
IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUsIFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlID0gU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7
CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygpOwogCiAgICAgUmVmUHRy
PE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxOb2RlT3JTdHJpbmc+
JiYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTY4Miw2ICs2NzEsOSBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4+KiBtdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7CiAKKyAgICB2
b2lkIGFkanVzdFN0eWxlSW52YWxpZGF0aW9uKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZSwgU3R5
bGU6OkludmFsaWRhdGlvbk1vZGUpOworICAgIHZvaWQgY2xlYXJTdHlsZUludmFsaWRhdGlvbigp
OworCiAgICAgaW50IG1fcmVmQ291bnQ7CiAgICAgbXV0YWJsZSB1aW50MzJfdCBtX25vZGVGbGFn
czsKIApAQCAtNzczLDYgKzc2NSwyMiBAQCBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFy
ZW50Tm9kZUd1CiAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKIH0KIAoraW5saW5lIFN0eWxlOjpJ
bnZhbGlkYXRpb25TY29wZSBOb2RlOjpzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGU6OkludmFsaWRhdGlvblNjb3BlPigobV9ub2Rl
RmxhZ3MgJiBTdHlsZUludmFsaWRhdGlvblNjb3BlTWFzaykgPj4gU3R5bGVJbnZhbGlkYXRpb25T
Y29wZVNoaWZ0KTsKK30KKworaW5saW5lIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlIE5vZGU6OnN0
eWxlSW52YWxpZGF0aW9uTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlPihnZXRGbGFnKFN0eWxlSW52YWxpZGF0aW9uTW9kZUZsYWcp
KTsKK30KKworaW5saW5lIHZvaWQgTm9kZTo6Y2xlYXJTdHlsZUludmFsaWRhdGlvbigpCit7Cisg
ICAgbV9ub2RlRmxhZ3MgJj0gflN0eWxlSW52YWxpZGF0aW9uU2NvcGVNYXNrOworICAgIGNsZWFy
RmxhZyhTdHlsZUludmFsaWRhdGlvbk1vZGVGbGFnKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyAr
MTUzLDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUoSFRNTElucHV0RQogICAgICAg
ICAtLW1fcmVxdWlyZWRDb3VudDsKICAgICB9CiAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbikgewot
ICAgICAgICBidXR0b24tPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgYnV0dG9uLT5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24g
PT0gYnV0dG9uKSB7CiAgICAgICAgICAgICBtX2NoZWNrZWRCdXR0b24gPSBudWxscHRyOwogICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsKQEAgLTE3Niw3ICsx
NzYsNyBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnNldE5lZWRzU3R5bGVSZWNhCiB7CiAgICAg
Zm9yIChhdXRvJiBidXR0b24gOiBtX21lbWJlcnMpIHsKICAgICAgICAgQVNTRVJUKGJ1dHRvbi0+
aXNSYWRpb0J1dHRvbigpKTsKLSAgICAgICAgYnV0dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgIGJ1dHRvbi0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
MTQgKzExOCw4IEBAIGJvb2wgU2hhZG93Um9vdDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHkKIAog
dm9pZCBTaGFkb3dSb290OjpzZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UoYm9vbCB2YWx1ZSkKIHsK
LSAgICBpZiAoaXNPcnBoYW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZhbHVlICE9
IG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlKSB7Ci0gICAgICAgIG1fcmVzZXRTdHlsZUluaGVyaXRh
bmNlID0gdmFsdWU7Ci0gICAgICAgIGlmIChob3N0KCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7Ci0gICAgfQorICAgIC8vIElmIHRoaXMgd2FzIGV2ZXIgdXNlZCBkeW5hbWlj
YWxseSBjaGlsZCBzdHlsZXMgd291bGQgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBoZXJlLgorICAg
IG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlID0gdmFsdWU7CiB9CiAKIFJlZjxOb2RlPiBTaGFkb3dS
b290OjpjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRpb24pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6YWRkU2xvdEVsZW1lbnRCeU5hbQog
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYSB0YXJnZXRl
ZCByZWNvbnN0cnVjdGlvbi4KLSAgICBzaGFkb3dSb290Lmhvc3QoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5pbnZh
bGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNsb3ROYW1lID0g
c2xvdE5hbWVGcm9tQXR0cmlidXRlVmFsdWUobmFtZSk7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3Nsb3RzLmFkZChzbG90TmFtZSwgc3RkOjp1bmlxdWVfcHRyPFNsb3RJbmZvPigpKTsKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIFNsb3RBc3NpZ25tZW50OjpyZW1vdmVTbG90RWxlbWVudEJ5CiAj
ZW5kaWYKIAogICAgIGlmIChhdXRvKiBob3N0ID0gc2hhZG93Um9vdC5ob3N0KCkpIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBkbyBhIHRhcmdldGVkIHJlY29uc3RydWN0aW9uLgotICAg
ICAgICBob3N0LT5zZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7Cisg
ICAgICAgIGhvc3QtPmludmFsaWRhdGVSZW5kZXJlcnMoKTsKIAogICAgIGF1dG8gaXQgPSBtX3Ns
b3RzLmZpbmQoc2xvdE5hbWVGcm9tQXR0cmlidXRlVmFsdWUobmFtZSkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ICE9IG1fc2xvdHMuZW5kKCkpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU2xv
dEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNsb3QoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGNoYW5nZVR5cGUgPT0gQ2hhbmdlVHlwZTo6RGlyZWN0Q2hpbGQpIHsKLSAgICAgICAgc2hh
ZG93Um9vdC5ob3N0KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVl
KTsKKyAgICAgICAgc2hhZG93Um9vdC5ob3N0KCktPmludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAg
ICAgICAgbV9zbG90QXNzaWdubWVudHNJc1ZhbGlkID0gZmFsc2U7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3
ICsxNTksNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uCiAgICAg
ICAgIHN0eWxlQXR0cmlidXRlQ2hhbmdlZChuZXdWYWx1ZSwgcmVhc29uKTsKICAgICBlbHNlIGlm
IChpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKSkgewogICAgICAgICBlbGVtZW50RGF0YSgp
LT5zZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkodHJ1ZSk7Ci0gICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICBpbnZhbGlkYXRl
U3R5bGUoKTsKICAgICB9CiAKICAgICBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9s
ZFZhbHVlLCBuZXdWYWx1ZSwgcmVhc29uKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlCiAKICAgICBlbGVtZW50RGF0YSgpLT5zZXRT
dHlsZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJ
bmxpbmVTdHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGRvY3VtZW50KCksICp0aGlz
KTsKIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQXR0cmkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNFbGVtZW50VXNpbmdTdHlsZUJh
c2VkRWRpdGFiaWxpdHkoKTsKIAogICAgIGVsZW1lbnREYXRhKCktPnNldFN0eWxlQXR0cmlidXRl
SXNEaXJ0eSh0cnVlKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdl
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGUoKTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50Ojppbmxp
bmVTdHlsZUNoYW5nZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAkocmV2aXNpb24gMjA3NDA3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyAr
MjIxLDcgQEAgUmVmPFRleHQ+IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChEbwogdm9pZCBU
ZXh0Ojp1cGRhdGVSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZSh1bnNpZ25lZCBvZmZzZXRPZlJl
cGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpCiB7CiAgICAgQVNTRVJU
KHBhcmVudE5vZGUoKSk7Ci0gICAgaWYgKHN0eWxlQ2hhbmdlVHlwZSgpID09IFJlY29uc3RydWN0
UmVuZGVyVHJlZSkKKyAgICBpZiAoc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09IFN0eWxlOjpJ
bnZhbGlkYXRpb25TY29wZTo6UmVuZGVyZXJzKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IHRleHRVcGRhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0eWxlOjpVcGRhdGU+KGRvY3VtZW50KCkp
OwpAQCAtMjM0LDcgKzIzNCw2IEBAIHZvaWQgVGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRl
bnRDaGEKICAgICAgICAgcmVuZGVyZXItPnNldFRleHRXaXRoT2Zmc2V0KGRhdGEoKSwgb2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKIH0KIAotCiAjaWYgRU5BQkxF
KFRSRUVfREVCVUdHSU5HKQogdm9pZCBUZXh0Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9W
aXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVmlz
aXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2
b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihtX2Rv
Y3VtZW50KSkgewogICAgICAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSkKLSAgICAgICAgICAgIGVs
ZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQogCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICAgICAgcmV0dXJuOwogICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KG1fZG9jdW1l
bnQpKSB7CiAgICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQobV9kb2N1bWVudCwgZWxlbWVu
dCkgPT0gbGlua0hhc2gpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJ
KHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDcgKzE5ODMsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0CiAgICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNl
ZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8KICAgICAvLyB1cGRh
dGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCiAgICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgewotICAgICAg
ICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGVsZW1lbnQtPmludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJl
ci0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyLCBDb250cm9sU3RhdGVzOjpGb2N1c1N0
YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBA
QCBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6aXNTdGVwcGFiCiAKIHZvaWQgQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAgIGVs
ZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKIH0KIAogRGVjaW1hbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnBhcnNlVG9OdW1iZXIoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IERlY2ltYWwmIGRlZmF1
bHRWYWx1ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW4KICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNsZWFyIHRoZSBm
aWxlIGxpc3QsIG9yIHJlcGxhY2UgaXQgd2l0aCBhIG5ldyBlbXB0eSBvbmUgaGVyZT8gVGhpcyBp
cyBvYnNlcnZhYmxlIGZyb20gSmF2YVNjcmlwdCB0aHJvdWdoIGN1c3RvbSBwcm9wZXJ0aWVzLgog
ICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CiAgICAgbV9pY29uID0gbnVsbHB0cjsKLSAgICBlbGVt
ZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IEZpbGVJbnB1dFR5cGU6
OmNyZWF0ZUZpbGVMaXN0KGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIGJvb2wgd2FzTGluayA9IGlzTGluaygp
OwogICAgICAgICBzZXRJc0xpbmsoIXZhbHVlLmlzTnVsbCgpICYmICFzaG91bGRQcm9oaWJpdExp
bmtzKHRoaXMpKTsKICAgICAgICAgaWYgKHdhc0xpbmsgIT0gaXNMaW5rKCkpCi0gICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAgICAgICAgIGlmIChpc0xpbmsoKSkgewogICAgICAgICAgICAgU3RyaW5nIHBh
cnNlZFVSTCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQoKS5pc0ROU1ByZWZldGNoRW5hYmxlZCgpICYmIGRvY3VtZW50
KCkuZnJhbWUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBIVE1MQm9keUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1
LDcgKzIzNSw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRl
ckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcwot
ICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Cisg
ICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICNlbmRpZgogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CkBAIC0yNTAsNyArMjUwLDcgQEAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbgogICAgICAgICAgICAgICAgIG1f
Y29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSh0aGlzLCBzdGF0aWNf
Y2FzdDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpLCB0eXBlKTsKICAgICAgICAgICAg
ICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZv
ciB0aGUgQ2FudmFzCi0gICAgICAgICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3lu
dGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVB
bmRMYXllcnMoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmICht
X2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNv
bXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAg
ICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5Nyw3ICs4OTcsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0
eUlmCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnRUb0FkanVzdCA6IGVs
ZW1lbnRMaW5lYWdlKHRoaXMpKSB7CiAgICAgICAgIGlmIChlbGVtZW50QWZmZWN0c0RpcmVjdGlv
bmFsaXR5KGVsZW1lbnRUb0FkanVzdCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRUb0FkanVzdC5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50VG9BZGp1c3QuaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtOTA5LDcgKzkwOSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuZEFk
anVzdERpcmUKICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0
eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgc2V0SGFzRGlyQXV0b0ZsYWdS
ZWN1cnNpdmVseSh0aGlzLCB0cnVlLCBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsKICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmRpcmVjdGlvbigpICE9IHRl
eHREaXJlY3Rpb24pCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3RE
aXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoRWxlbWVudCogYmVmb3Jl
Q2hhbmdlLCBDaGlsZENoYW5nZVR5cGUgY2hhbmdlVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6YWRkSW52YWxpZERl
c2MKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2ludmFsaWREZXNjZW5kYW50cy5jb250YWlu
cygmaW52YWxpZEZvcm1Db250cm9sRWxlbWVudCksICJVcGRhdGluZyB0aGUgZmllbGRzZXQgb24g
dmFsaWRpdHkgY2hhbmdlIGlzIG5vdCBhbiBlZmZpY2llbnQgb3BlcmF0aW9uLCBpdCBzaG91bGQg
b25seSBiZSBkb25lIHdoZW4gbmVjZXNzYXJ5LiIpOwogCiAgICAgaWYgKG1faW52YWxpZERlc2Nl
bmRhbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgbV9pbnZhbGlkRGVzY2VuZGFudHMu
YWRkKCZpbnZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KTsKIH0KIApAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6cmVtb3ZlSW52YWxpZEQKIAogICAgIG1faW52YWxp
ZERlc2NlbmRhbnRzLnJlbW92ZSgmZm9ybUNvbnRyb2xFbGVtZW50KTsKICAgICBpZiAobV9pbnZh
bGlkRGVzY2VuZGFudHMuaXNFbXB0eSgpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWRBdHQKIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogewogICAgIHNldE5lZWRzV2lsbFZhbGlk
YXRlQ2hlY2soKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hh
bmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxlZFN0YXRlKTsKIH0KQEAgLTE4
Miw3ICsxODIsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkU3RhCiB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlYWRPbmx5QXR0cmlidXRlQ2hhbmdlZCgpCiB7
CiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwotICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTE5MCw3ICsx
OTAsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0CiAgICAgdXBk
YXRlVmFsaWRpdHkoKTsKICAgICAvLyBTdHlsZSByZWNhbGN1bGF0aW9uIGlzIG5lZWRlZCBiZWNh
dXNlIHN0eWxlIHNlbGVjdG9ycyBtYXkgaW5jbHVkZQogICAgIC8vIDpyZXF1aXJlZCBhbmQgOm9w
dGlvbmFsIHBzZXVkby1jbGFzc2VzLgotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBp
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZEF1dG9m
b2N1cyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQpAQCAtNDQ1LDcgKzQ0NSw3IEBA
IHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNXaWwKICAgICBtX3dpbGxWYWxp
ZGF0ZSA9IG5ld1dpbGxWYWxpZGF0ZTsKIAogICAgIHVwZGF0ZVZhbGlkaXR5KCk7Ci0gICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAog
ICAgIGlmICghbV93aWxsVmFsaWRhdGUgJiYgIXdhc1ZhbGlkKSB7CiAgICAgICAgIHJlbW92ZUlu
dmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNlcnRpb25Qb2ludCgqdGhpcywgcGFyZW50Tm9k
ZSgpKTsKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVw
ZGF0ZVZhbGlkCiAKICAgICBpZiAod2lsbFZhbGlkYXRlICYmIG1faXNWYWxpZCAhPSB3YXNWYWxp
ZCkgewogICAgICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMg
OnZhbGlkIDppbnZhbGlkLgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgICAgICBpZiAoIW1faXNWYWxpZCkg
ewogICAgICAgICAgICAgYWRkSW52YWxpZEVsZW1lbnRUb0FuY2VzdG9yRnJvbUluc2VydGlvblBv
aW50KCp0aGlzLCBwYXJlbnROb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDcgQEAgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbgogICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50JiBjb250cm9sID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
KmUpOwogICAgICAgICBpZiAoY29udHJvbC5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewog
ICAgICAgICAgICAgaWYgKCFtX2RlZmF1bHRCdXR0b24pCi0gICAgICAgICAgICAgICAgY29udHJv
bC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgY29udHJvbC5pbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmVzZXREZWZhdWx0QnV0dG9uKCk7CiAgICAgICAgIH0KQEAgLTYxOSw3ICs2MTksNyBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJJbnZhbGlkQXNzCiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGNvbnN0IEVsZW1lbnQmPihmb3JtQ29udHJvbEVsZW1lbnQpLm1hdGNoZXNJbnZhbGlkUHNl
dWRvQ2xhc3MoKSk7CiAKICAgICBpZiAobV9pbnZhbGlkQXNzb2NpYXRlZEZvcm1Db250cm9scy5p
c0VtcHR5KCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJv
bHMuYWRkKCZmb3JtQ29udHJvbEVsZW1lbnQpOwogfQogCkBAIC02MjcsNyArNjI3LDcgQEAgdm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFsaWRBc3NvYwogewogICAgIGlmIChtX2ludmFs
aWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xzLnJlbW92ZSgmZm9ybUNvbnRyb2xFbGVtZW50KSkgewog
ICAgICAgICBpZiAobV9pbnZhbGlkQXNzb2NpYXRlZEZvcm1Db250cm9scy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQogCkBAIC03MzcsOSArNzM3LDkgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1dHRvbgogICAgIGRlZmF1bHRCdXR0b24oKTsK
ICAgICBpZiAobV9kZWZhdWx0QnV0dG9uICE9IG9sZERlZmF1bHQpIHsKICAgICAgICAgaWYgKG9s
ZERlZmF1bHQpCi0gICAgICAgICAgICBvbGREZWZhdWx0LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgICAgICBvbGREZWZhdWx0LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAg
ICAgICAgIGlmIChtX2RlZmF1bHRCdXR0b24pCi0gICAgICAgICAgICBtX2RlZmF1bHRCdXR0b24t
PnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIG1fZGVmYXVsdEJ1dHRvbi0+aW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6ZmluaXNo
ZWRJbnNlcgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVJlbmRlcmVycygpOwogICAgIHNldE5hbWVBbmRPcGVuVVJMKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDE1ICsxMjIsMTUgQEAgU1ZHRG9jdW1lbnQqIEhU
TUxGcmFtZU93bmVyRWxlbWVudDo6Z2V0UwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxl
Q2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQordm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVk
dWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCkKIHsKICAgICBpZiAoU3R5bGU6OnBvc3RSZXNv
bHV0aW9uQ2FsbGJhY2tzQXJlU3VzcGVuZGVkKCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxGcmFt
ZU93bmVyRWxlbWVudD4gZWxlbWVudCA9IHRoaXM7Ci0gICAgICAgIFN0eWxlOjpxdWV1ZVBvc3RS
ZXNvbHV0aW9uQ2FsbGJhY2soW2VsZW1lbnQsIGNoYW5nZVR5cGVdewotICAgICAgICAgICAgZWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhjaGFuZ2VUeXBlKTsKKyAgICAgICAgU3R5bGU6OnF1
ZXVlUG9zdFJlc29sdXRpb25DYWxsYmFjayhbZWxlbWVudF0geworICAgICAgICAgICAgZWxlbWVu
dC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZQot
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKGNoYW5nZVR5cGUpOworICAgICAgICBpbnZhbGlk
YXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogYm9vbCBTdWJmcmFtZUxvYWRpbmdEaXNhYmxlcjo6
Y2FuTG9hZEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCYgb3duZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDIwNzQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgU2FuZGJveEZsYWdzIHNhbmRi
b3hGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2FuZGJveEZsYWdzOyB9CiAKLSAgICB2b2lkIHNj
aGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW5nZVR5cGUgPSBGdWxsU3R5bGVDaGFu
Z2UpOworICAgIHZvaWQgc2NoZWR1bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIAogcHJv
dGVjdGVkOgogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVT
ZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUKICAgICAgICAgaWYgKCF2
YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9yb3dMZW5ndGhzID0gbmV3TGVuZ3RoQXJy
YXkodmFsdWUuc3RyaW5nKCksIG1fdG90YWxSb3dzKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBX
b3VsZCBiZSBuaWNlIHRvIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIG1fcm93TGVuZ3RocyBkaWQg
bm90IGNoYW5nZS4KLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlCiAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IG1fY29sTGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5KHZhbHVlLnN0cmluZygpLCBtX3RvdGFsQ29s
cyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvcHRpbWl6ZSB0aGUg
Y2FzZSB3aGVyZSBtX2NvbExlbmd0aHMgZGlkIG5vdCBjaGFuZ2UuCi0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwMiwxMCArMjAyLDgg
QEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYQogCiBib29sIEhUTUxG
cmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKQogewotICAgIGlm
IChuZWVkc1N0eWxlUmVjYWxjKCkgJiYgcmVuZGVyZXIoKSkgeworICAgIGlmIChuZWVkc1N0eWxl
UmVjYWxjKCkgJiYgcmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlv
dXQoKTsKLSAgICAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksNyBAQCBpbmxpbmUgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpydW5Qb3N0VHlwCiAjZW5kaWYKIAogICAgIGlmIChyZW5kZXJlcigp
KQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7Cisg
ICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIAogICAgIGlmIChkb2N1bWVudCgpLmZvY3Vz
ZWRFbGVtZW50KCkgPT0gdGhpcykKICAgICAgICAgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKFNlbGVj
dGlvblJlc3RvcmF0aW9uTW9kZTo6UmVzdG9yZSwgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFs
KTsKQEAgLTY5NSwxNCArNjk1LDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY28KICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHNldENoYW5nZWQgaWYgdGhlIGZv
cm0gaXMgbG9va2luZyBhdCB0aGUgZGVmYXVsdCB2YWx1ZSByaWdodCBub3cuCiAgICAgICAgIGlm
ICghaGFzRGlydHlWYWx1ZSgpKSB7CiAgICAgICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2li
aWxpdHkoKTsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgICAgICBzZXRGb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICAgICAgdXBkYXRlVmFsaWRp
dHkoKTsKICAgICAgICAgbV92YWx1ZUF0dHJpYnV0ZVdhc1VwZGF0ZWRBZnRlclBhcnNpbmcgPSAh
bV9wYXJzaW5nSW5Qcm9ncmVzczsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gY2hlY2tlZEF0dHIp
IHsKICAgICAgICAgaWYgKG1faW5wdXRUeXBlLT5pc0NoZWNrYWJsZSgpKQotICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogCiAgICAgICAgIC8vIEFub3RoZXIgcmFkaW8gYnV0dG9uIGluIHRoZSBzYW1lIGdy
b3VwIG1pZ2h0IGJlIGNoZWNrZWQgYnkgc3RhdGUKICAgICAgICAgLy8gcmVzdG9yZS4gV2Ugc2hv
dWxkbid0IGNhbGwgc2V0Q2hlY2tlZCgpIGV2ZW4gaWYgdGhpcyBoYXMgdGhlIGNoZWNrZWQKQEAg
LTczMSw5ICs3MzEsOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
CiAgICAgICAgIG1fbWF4UmVzdWx0cyA9ICF2YWx1ZS5pc051bGwoKSA/IHN0ZDo6bWluKHZhbHVl
LnRvSW50KCksIG1heFNhdmVkUmVzdWx0cykgOiAtMTsKICAgICAgICAgbV9pbnB1dFR5cGUtPm1h
eFJlc3VsdHNBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGF1dG9z
YXZlQXR0cikgewotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gaW5jcmVtZW50
YWxBdHRyKSB7Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBtaW5BdHRyKSB7
CiAgICAgICAgIG1faW5wdXRUeXBlLT5taW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAg
ICAgdXBkYXRlVmFsaWRpdHkoKTsKQEAgLTg5NSw3ICs4OTUsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAKICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0
ZSA9IGZhbHNlOwogICAgIG1faXNDaGVja2VkID0gbm93Q2hlY2tlZDsKLSAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYg
KFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKICAgICAg
ICAgYnV0dG9ucy0+dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOwpAQCAtOTIxLDcgKzkyMSw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KICAgICAgICAgZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgfQogCi0gICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWluYXRlKGJvb2wgbmV3VmFsdWUpCkBAIC05MzEsNyAr
OTMxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWluYXRlKAogCiAgICAg
bV9pc0luZGV0ZXJtaW5hdGUgPSBuZXdWYWx1ZTsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNo
ZWNrZWRTdGF0ZSk7CkBAIC0xMzMwLDcgKzEzMzAsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldEF1dG9GaWxsZWQoYm9vCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBdXRvRmlsbGVk
ID0gYXV0b0ZpbGxlZDsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNob3dB
dXRvRmlsbEJ1dHRvbihBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAt
MTc4Niw3ICsxNzg2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjptYXhMZW5ndGhBdHRyaWJ1
dAogICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogRG8gd2Ug
cmVhbGx5IG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgZWZmZWN0aXZlIG1heExlbmd0aCBoYXMgbm90
IGNoYW5nZWQ/Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCkBAIC0xODAyLDcgKzE4
MDIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om1pbkxlbmd0aEF0dHJpYnV0CiAgICAgICAg
IHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKIAogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVl
ZCB0byBkbyB0aGlzIGlmIHRoZSBlZmZlY3RpdmUgbWluTGVuZ3RoIGhhcyBub3QgY2hhbmdlZD8K
LSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJl
ZSgpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgYm9v
bCB3YXNMaW5rID0gaXNMaW5rKCk7CiAgICAgICAgIHNldElzTGluayghdmFsdWUuaXNOdWxsKCkg
JiYgIXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwogICAgICAgICBpZiAod2FzTGluayAhPSBp
c0xpbmsoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTc2LDcgKzQ1NzYsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZCglcCkiLCB0aGlzKTsK
IAogICAgIC8vIEtpY2sgb2ZmIGEgZmFrZSByZWNhbGNTdHlsZSB0aGF0IHdpbGwgdXBkYXRlIHRo
ZSBjb21wb3NpdGluZyB0cmVlLgotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5
bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogfQogCiAjaWYgUExB
VEZPUk0oV0lOKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpAQCAtNTU5MCw3ICs1NTkwLDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZQogICAgIH0KICAgICAKICAgICBt
X3BsYXllci0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIocGxhdGZvcm1MYXllciwgY29tcGxldGlv
bkhhbmRsZXIpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2Up
OworICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKICAgICB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGMKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xlYXJVc2VGYWxsYmFja0NvbnRlbnQoKTsKLSAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52YWxp
ZGF0ZVJlbmRlcmVycygpOwogfQogCiBzdGF0aWMgdm9pZCBtYXBEYXRhUGFyYW1Ub1NyYyhWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQpAQCAt
MzU1LDcgKzM1NSw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgK
ICAgICB1cGRhdGVEb2NOYW1lZEl0ZW0oKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICF1c2VG
YWxsYmFja0NvbnRlbnQoKSkgewogICAgICAgICBzZXROZWVkc1dpZGdldFVwZGF0ZSh0cnVlKTsK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CiAgICAgfQogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChjaGFuZ2UpOwogfQpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ28KICAgICBpZiAoIWluRG9jdW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUp
OworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIAogICAgIC8vIEJlZm9yZSB3ZSBnaXZlIHVw
IGFuZCB1c2UgZmFsbGJhY2sgY29udGVudCwgY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBNSU1F
IHR5cGUgaXNzdWUuCiAgICAgYXV0byogbG9hZGVyID0gaW1hZ2VMb2FkZXIoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3
NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlCiAgICAgcmVjYWxjU2VsZWN0T3B0aW9ucygpOwogCiAgICAgaWYgKG5hbWUg
PT0gZGlzYWJsZWRBdHRyKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVt
ZW50OjpyZWNhbGNTZWxlY3RPcHRpb25zKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEyICsxNzQs
MTIgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBi
b29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKICAgICAgICAgbV9kaXNhYmxlZCA9ICF2YWx1
ZS5pc051bGwoKTsKICAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKLSAg
ICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpFbmFibGVk
U3RhdGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHNlbGVjdGVkQXR0cikg
ewotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IG1hdGNoIHdo
YXQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzLgogICAgICAgICAvLyBUaGUgc3BlY2lmaWNh
dGlvbiBpbXBsaWVzIHRoYXQgcmVtb3ZpbmcgdGhlIHNlbGVjdGVkIGF0dHJpYnV0ZSBvcgpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc1NlbGVjdGVkID0gc2VsZWN0ZWQ7Ci0gICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAog
ICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkp
CiAgICAgICAgIHNlbGVjdC0+aW52YWxpZGF0ZVNlbGVjdGVkSXRlbXMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJB
Z2VudFMKICAgICByb290LT5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7CiAgICAgaWYg
KG1fcGx1Z2luUmVwbGFjZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudCgqcm9vdCkpIHsKICAgICAg
ICAgc2V0RGlzcGxheVN0YXRlKERpc3BsYXlpbmdQbHVnaW5SZXBsYWNlbWVudCk7Ci0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVJlbmRlcmVycygpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzZXRE
aXNwbGF5UwogICAgIGlmIChzdGF0ZSA9PSBSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNr
IHx8IHN0YXRlID09IFJlc3RhcnRpbmcpIHsKICAgICAgICAgbV9pc1Jlc3RhcnRlZFBsdWdpbiA9
IHRydWU7CiAgICAgICAgIG1fc25hcHNob3REZWNpc2lvbiA9IE5ldmVyU25hcHNob3Q7Ci0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBp
bnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09
IERpc3BsYXlpbmdTbmFwc2hvdCkKICAgICAgICAgICAgIG1fcmVtb3ZlU25hcHNob3RUaW1lci5z
dGFydE9uZVNob3QocmVtb3ZlU25hcHNob3RUaW1lckRlbGF5KTsKICAgICB9CkBAIC0yMzksMTMg
KzIzOSwxMyBAQCBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoaWxkU2hvdWxkCiBib29s
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlIGNo
YW5nZSkKIHsKICAgICAvLyBNYWtlIHN1cmUgc3R5bGUgcmVjYWxjcyBzY2hlZHVsZWQgYnkgYSBj
aGlsZCBzaGFkb3cgdHJlZSBkb24ndCB0cmlnZ2VyIHJlY29uc3RydWN0aW9uIGFuZCBjYXVzZSBm
bGlja2VyLgotICAgIGlmIChjaGFuZ2UgPT0gU3R5bGU6Ok5vQ2hhbmdlICYmIHN0eWxlQ2hhbmdl
VHlwZSgpID09IE5vU3R5bGVDaGFuZ2UpCisgICAgaWYgKGNoYW5nZSA9PSBTdHlsZTo6Tm9DaGFu
Z2UgJiYgc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09IFN0eWxlOjpJbnZhbGlkYXRpb25TY29w
ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGSVhNRTogVGhlcmUgc2hv
dWRuJ3QgYmUgbmVlZCB0byBmb3JjZSByZW5kZXIgdHJlZSByZWNvbnN0cnVjdGlvbiBoZXJlLgog
ICAgIC8vIEl0IGlzIG9ubHkgZG9uZSBiZWNhdXNlIGxvYWRpbmcgYW5kIGxvYWQgZXZlbnQgZGlz
cGF0Y2hpbmcgaXMgdGllZCB0byByZW5kZXIgdHJlZSBjb25zdHJ1Y3Rpb24uCiAgICAgaWYgKCF1
c2VGYWxsYmFja0NvbnRlbnQoKSAmJiBuZWVkc1dpZGdldFVwZGF0ZSgpICYmIHJlbmRlcmVyKCkg
JiYgIWlzSW1hZ2VUeXBlKCkgJiYgKGRpc3BsYXlTdGF0ZSgpICE9IERpc3BsYXlpbmdTbmFwc2hv
dCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsK
KyAgICAgICAgaW52YWxpZGF0ZVJlbmRlcmVycygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0zMDYsNyArMzA2LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpmaW5pc2hQYXJz
aQogCiAgICAgc2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7CiAgICAgaWYgKGluRG9jdW1lbnQo
KSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92
ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQpAQCAtMzMyLDcgKzMzMiw3IEBA
IHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cHJlcGFyZUZvckQKIAogdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHsKLSAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52YWxpZGF0
ZVJlbmRlcmVycygpOwogCiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVu
dFN1c3BlbnNpb24oKTsKIH0KQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnJlbW92ZVNuYXBzCiB7CiAgICAgbV9zbmFwc2hvdEltYWdlID0gbnVsbHB0cjsK
ICAgICBtX2lzUmVzdGFydGVkUGx1Z2luID0gZmFsc2U7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7
CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0K
QEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRT
bmFwCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldERpc3BsYXlTdGF0ZShSZXN0YXJ0aW5nKTsK
LSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52
YWxpZGF0ZVJlbmRlcmVycygpOwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRp
c3BhdGNoUGVuZGluZ01vdXNlQ2xpY2soKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQcm9ncmVzc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3RhdAogICAgICAg
ICBib29sIHdhc0RldGVybWluYXRlID0gcmVuZGVyLT5pc0RldGVybWluYXRlKCk7CiAgICAgICAg
IHJlbmRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICAgICAgaWYgKHdhc0RldGVybWluYXRl
ICE9IGlzRGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
KyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGMKICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgdXBkYXRlVmFs
aWRpdHkoKTsKICAgICAgICAgaWYgKG1fc2l6ZSAhPSBvbGRTaXplKSB7Ci0gICAgICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgICAgICBp
bnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAgICAgICAgICAgICBzZXRSZWNhbGNMaXN0SXRlbXMoKTsK
ICAgICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgICAgIH0KQEAgLTc0NCw3ICs3NDQs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNhbGNMaXN0SXRlCiAgICAgLy8gTWFu
dWFsIHNlbGVjdGlvbiBhbmNob3IgaXMgcmVzZXQgd2hlbiBtYW5pcHVsYXRpbmcgdGhlIHNlbGVj
dCBwcm9ncmFtbWF0aWNhbGx5LgogICAgIG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPSAt
MTsKICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKLSAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGlmICghaW5E
b2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGNh
Y2hlZEhUTUxDb2xsZWN0aW9uKFNlbGVjdE9wdGlvbnMpKQogICAgICAgICAgICAgY29sbGVjdGlv
bi0+aW52YWxpZGF0ZUNhY2hlKGRvY3VtZW50KCkpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0aXBsZUF0dAogICAgIG1fbXVsdGlwbGUgPSAh
dmFsdWUuaXNOdWxsKCk7CiAgICAgdXBkYXRlVmFsaWRpdHkoKTsKICAgICBpZiAob2xkVXNlc01l
bnVMaXN0ICE9IHVzZXNNZW51TGlzdCgpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJl
Y29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0K
IAogYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBs
aXN0LCBib29sKQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
cmVzZXQoKQogICAgICAgICBmaXJzdE9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKIAog
ICAgIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigpOwotICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgdXBkYXRlVmFsaWRp
dHkoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIu
aCIKICNpbmNsdWRlICJHZW5lcmljQ2FjaGVkSFRNTENvbGxlY3Rpb24uaCIKQEAgLTI2NSwyNyAr
MjY2LDI4IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6ZGVsZXRlUm93KGludCBpbmQKICAgICBy
b3ctPnJlbW92ZShlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RhYmxlQ2VsbEFuY2Vz
dG9yKE5vZGUqIG4pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUYWJsZUNlbGxBbmNlc3Rvcihjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogewotICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRoZWFkVGFn
KSB8fCBuLT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fAotICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KHRmb290VGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRyVGFnKSB8fAotICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKHRoVGFnKTsKKyAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKHRoZWFkVGFnKQor
ICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcpCisgICAgICAgIHx8IGVsZW1l
bnQuaGFzVGFnTmFtZSh0Zm9vdFRhZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRy
VGFnKQorICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGhUYWcpOwogfQogCi1zdGF0aWMg
Ym9vbCBzZXRUYWJsZUNlbGxzQ2hhbmdlZChOb2RlKiBuKQorc3RhdGljIGJvb2wgc2V0VGFibGVD
ZWxsc0NoYW5nZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobik7CiAgICAgYm9v
bCBjZWxsQ2hhbmdlZCA9IGZhbHNlOwogCi0gICAgaWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpKQor
ICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGRUYWcpKQogICAgICAgICBjZWxsQ2hhbmdlZCA9
IHRydWU7Ci0gICAgZWxzZSBpZiAoaXNUYWJsZUNlbGxBbmNlc3RvcihuKSkgewotICAgICAgICBm
b3IgKE5vZGUqIGNoaWxkID0gbi0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkKKyAgICBlbHNlIGlmIChpc1RhYmxlQ2VsbEFuY2VzdG9yKGVsZW1lbnQp
KSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50Pihl
bGVtZW50KSkKICAgICAgICAgICAgIGNlbGxDaGFuZ2VkIHw9IHNldFRhYmxlQ2VsbHNDaGFuZ2Vk
KGNoaWxkKTsKICAgICB9CiAKICAgICBpZiAoY2VsbENoYW5nZWQpCi0gICAgICAgbi0+c2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKIAogICAgIHJldHVybiBjZWxsQ2hhbmdlZDsKIH0KQEAgLTQyMiwxMCArNDI0LDEwIEBA
IHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY28KICAgICBpZiAoYm9yZGVy
c0JlZm9yZSAhPSBjZWxsQm9yZGVycygpIHx8IG9sZFBhZGRpbmcgIT0gbV9wYWRkaW5nKSB7CiAg
ICAgICAgIG1fc2hhcmVkQ2VsbFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgYm9vbCBjZWxsQ2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCp0aGlzKSkKICAgICAgICAgICAgIGNlbGxD
aGFuZ2VkIHw9IHNldFRhYmxlQ2VsbHNDaGFuZ2VkKGNoaWxkKTsKICAgICAgICAgaWYgKGNlbGxD
aGFuZ2VkKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1
ZUNvbW1vbgogICAgIHNldElubmVyVGV4dFZhbHVlKG1fdmFsdWUpOwogICAgIHNldExhc3RDaGFu
Z2VXYXNOb3RVc2VyRWRpdCgpOwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwot
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKIAogICAg
IC8vIFNldCB0aGUgY2FyZXQgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCB2YWx1ZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVAKICAgICBpZiAocGxhY2VIb2xkZXJX
YXNWaXNpYmxlID09IG1faXNQbGFjZWhvbGRlclZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0
YXJ0KGludCBzdGFydCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgzLDcgKzY4Myw3IEBAIGJvb2wgSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNlcGFy
YXRlRnJvbUEKIHZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXpl
ZFZhbHVlLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJl
aGF2aW9yKQogewogICAgIGVsZW1lbnQoKS5zZXRWYWx1ZUludGVybmFsKHNhbml0aXplZFZhbHVl
LCBldmVudEJlaGF2aW9yKTsKLSAgICBlbGVtZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgaWYgKCF2YWx1
ZUNoYW5nZWQpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKGV2ZW50QmVoYXZpb3IpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgTnVtYmVySW5wdXRUeXBlOjptaW5Pck1h
eEF0dHJpYnV0ZUMKIHsKICAgICBJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgp
OwogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7Ci0gICAg
ZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50
LnJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0
aHNSZWNhbGMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQg
VGV4dEZpZWxkSW5wdXRUeXBlOjpzdWJ0cmVlSGFzQ2hhbmcKICAgICBlbGVtZW50KCkuc2V0VmFs
dWVGcm9tUmVuZGVyZXIoaW5uZXJUZXh0KTsKICAgICBlbGVtZW50KCkudXBkYXRlUGxhY2Vob2xk
ZXJWaXNpYmlsaXR5KCk7CiAgICAgLy8gUmVjYWxjIGZvciA6aW52YWxpZCBjaGFuZ2UuCi0gICAg
ZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgZGlkU2V0VmFsdWVCeVVzZXJFZGl0KCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBNYXRoTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdAogICAgICAgICBib29sIHdhc0xpbmsgPSBpc0xpbmsoKTsKICAgICAgICAgc2V0SXNM
aW5rKCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAg
ICAgIGlmICh3YXNMaW5rICE9IGlzTGluaygpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSByb3dzcGFuQXR0cikgewogICAgICAgICBpZiAoaXM8UmVuZGVyVGFi
bGVDZWxsPihyZW5kZXJlcigpKSAmJiBoYXNUYWdOYW1lKG10ZFRhZykpCiAgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJlcigpKS5jb2xTcGFuT3JSb3dTcGFuQ2hh
bmdlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxTZWxlY3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9p
ZCBNYXRoTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZAogICAgICAgICBSZW5kZXJUcmVl
VXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoKm1fc2VsZWN0ZWRDaGlsZCk7CiAKICAgICBtX3Nl
bGVjdGVkQ2hpbGQgPSBuZXdTZWxlY3RlZENoaWxkOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgTWF0aE1MU2Vs
ZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYgZXZlbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNp
b24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBBbmltYXRpb25CYXNl
OjpzZXROZWVkc1N0eWxlUmVjYWxjKAogewogICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hl
KTsKICAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHls
ZUFuZExheWVycygpOwogfQogCiBkb3VibGUgQW5pbWF0aW9uQmFzZTo6ZHVyYXRpb24oKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTIsNyArMTEyLDcgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoUgog
ICAgIH0pOwogICAgIAogICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBkaWRuJ3QgZG8gYW55dGhp
bmcgT1Igd2UgYXJlIHN1c3BlbmRlZCAoc28gd2UgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gZG8gYSBz
ZXROZWVkc1N0eWxlUmVjYWxjKCkgd2hlbiBzdXNwZW5kZWQpLgorICAgIC8vIGRvIGEgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpIHdoZW4gc3VzcGVuZGVkKS4KICAgICBSZWZQdHI8Q29tcG9z
aXRlQW5pbWF0aW9uPiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMudGFrZSgmcmVu
ZGVyZXIpOwogICAgIEFTU0VSVChhbmltYXRpb24pOwogICAgIHJlbmRlcmVyLnNldElzQ1NTQW5p
bWF0aW5nKGZhbHNlKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0CiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGNv
bXBvc2l0ZUFuaW1hdGlvbi5rZXktPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmRvY3VtZW50KCkucGFn
ZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOwotICAgICAgICAgICAg
ICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwor
ICAgICAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAg
ICAgICAgICAgICAgIGNhbGxlZFNldENoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6ZmlyZUV2ZQogICAgIH0KIAogICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hh
bmdlc1RvRGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50
aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJzKCk7CiAKICAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwogCkBAIC0z
NTgsNyArMzU4LDcgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbgog
CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21w
b3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBh
dXNlQW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5lbGVtZW50
KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBy
ZW5kZXJlci0+ZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAg
c3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0zNzMsNyArMzczLDcgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6cGF1c2VUcgogCiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRp
b24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJlbmRlcmVyKTsKICAgICBpZiAoY29tcG9z
aXRlQW5pbWF0aW9uLnBhdXNlVHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5
KSwgdCkpIHsKLSAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCktPmlu
dmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTU5MCw3ICs1
OTAsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKICAgICBBU1NFUlQoIWVsZW1lbnQg
fHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJ
blBhZ2VDYWNoZSk7CiAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPnNldE5lZWRz
U3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZh
bGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjp1
cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHls
ZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9u
IDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNo
YW5nZWQoV3JhcHBlZEltCiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBtX25lZWRzVG9TZXRTaXplRm9y
QWx0VGV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxlbWVudCgpLT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50KCkt
PmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5ODUsNyArNjk4NSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCiB7CiAgICAgLy8gV2UgdXNlIHRoZSBl
bmNsb3NpbmcgZWxlbWVudCBzbyB0aGF0IHdlIHJlY2FsY3VsYXRlIHN0eWxlIGZvciB0aGUgYW5j
ZXN0b3Igb2YgYW4gYW5vbnltb3VzIG9iamVjdC4KICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IGVuY2xvc2luZ0VsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHls
ZUFuZExheWVycygpOwogICAgIHJlbmRlcmVyKCkucmVwYWludCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NDksNyArMzU0OSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGEKICAgICAgICAgY2FzZSBSb290TGF5
ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lOiB7CiAgICAgICAgICAgICAvLyBUaGUgbGF5ZXIg
d2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3Vy
YXRpb24oKQogICAgICAgICAgICAgLy8gZm9yIHRoZSBmcmFtZSdzIHJlbmRlcmVyIGluIHRoZSBw
YXJlbnQgZG9jdW1lbnQuCi0gICAgICAgICAgICBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25l
ckVsZW1lbnQoKS0+c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICAgICAgICAgIG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
LT5zY2hlZHVsZUludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTc4LDcgKzM1NzgsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGV0YWNoUm9vdExhCiAgICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKIAogICAgICAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkK
LSAgICAgICAgICAgIG93bmVyRWxlbWVudC0+c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIG93bmVyRWxlbWVudC0+c2NoZWR1bGVJ
bnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgUm9vdExheWVyQXR0YWNoZWRWaWFDaHJvbWVDbGllbnQ6IHsKQEAgLTM2MzcsNyArMzYzNyw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlJRnJhbWUKICAgICAvLyBDb21w
b3NpdGluZyBhZmZlY3RzIHRoZSBhbnN3ZXIgdG8gUmVuZGVySUZyYW1lOjpyZXF1aXJlc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSwgc28KICAgICAvLyB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgc3R5
bGUgcmVjYWxjIGluIG91ciBwYXJlbnQgZG9jdW1lbnQuCiAgICAgaWYgKEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCkpCi0gICAgICAgIG93bmVyRWxlbWVudC0+c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgb3duZXJFbGVtZW50LT5zY2hlZHVsZUlu
dmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6bGF5ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDg4LDEzICsxNDg4LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRh
dGVEcmFnU3RhdGUoYm9vbCAKIHsKICAgICBib29sIHZhbHVlQ2hhbmdlZCA9IChkcmFnT24gIT0g
aXNEcmFnZ2luZygpKTsKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7Ci0gICAgaWYgKHZhbHVl
Q2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0ZWRCeURyYWcoKSB8fCAoaXM8RWxl
bWVudD4oKm5vZGUoKSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUoKSkuY2hpbGRyZW5BZmZl
Y3RlZEJ5RHJhZygpKSkpCi0gICAgICAgIG5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwog
CiAgICAgaWYgKCFpczxSZW5kZXJFbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvJiByZW5kZXJFbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpOwog
Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZG93
bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIHJl
bmRlckVsZW1lbnQuZWxlbWVudCgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgcmVu
ZGVyRWxlbWVudC5lbGVtZW50KCktPmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpCisgICAgICAg
IHJlbmRlckVsZW1lbnQuZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisK
KyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihyZW5k
ZXJFbGVtZW50KSkKICAgICAgICAgY2hpbGQudXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
Q2FjaGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3
IEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmcKICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyLCBmYWxzZSk7CiAKICAgICBpZiAocmVuZGVyZXIuZWxlbWVudCgpICYmICFyZW5kZXJl
ci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZW5kZXJlci5lbGVtZW50KCkt
PnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICByZW5k
ZXJlci5lbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogfQogCiB2b2lkIFNW
R1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZShSZW5kZXJPYmplY3QmIHJlbmRl
cmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSwxNiArNjUsMTYgQEAgdm9pZCBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzSFRNTCkgewotICAgICAgICBtX2VsZW1lbnQu
c2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG1fZWxlbWVudC5zaGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5o
YXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkgewotICAgICAgICBtX2VsZW1lbnQuc2V0TmVl
ZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9l
bGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIG1fZWxl
bWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKIAogICAgIGlmICghY2hpbGRyZW5PZlR5cGU8RWxlbWVu
dD4obV9lbGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAy
MDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxMSArMTE2LDExIEBAIHZvaWQgQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb246OmludmFsaWRhdGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNoYWRv
d1Jvb3QgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXMoKSkgewotICAgICAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVD
aGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNh
bGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsK
IAogICAgIGlmICghY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4obV9lbGVtZW50KS5maXJzdCgpKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JZENoYW5nZUludmFs
aWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE5ICs2MSwx
OSBAQCB2b2lkIElkQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhv
clN0eWxlKCkuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVt
ZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVt
ZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsK
KyAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7CiAKICAgICAvLyBUaGlzIGNvdWxkIGJl
IGVhc2lseSBvcHRpbWl6ZWQgZm9yIGZpbmUtZ3JhaW5lZCBkZXNjZW5kYW50IGludmFsaWRhdGlv
biBzaW1pbGFyIHRvIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLgogICAgIC8vIEhvd2V2ZXIgdXNp
bmcgaWRzIGZvciBkeW5hbWljIHN0eWxpbmcgaXMgcmFyZSBhbmQgdGhpcyBpcyBwcm9iYWJseSBu
b3Qgd29ydGggdGhlIG1lbW9yeSBjb3N0IG9mIHRoZSByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMu
CiAgICAgYm9vbCBtYXlBZmZlY3REZXNjZW5kYW50U3R5bGUgPSBydWxlU2V0cy5mZWF0dXJlcygp
Lmlkc01hdGNoaW5nQW5jZXN0b3JzSW5SdWxlcy5jb250YWlucyhjaGFuZ2VkSWQuaW1wbCgpKTsK
ICAgICBpZiAobWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlKQotICAgICAgICBtX2VsZW1lbnQuc2V0
TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbGVtZW50LnNl
dE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1Jl
bmRlclRyZWVVcGRhdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4
OSw3IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUVsZW1lbnRSZW4KICAgICAgICAg
cmV0dXJuOwogICAgIGF1dG8mIHJlbmRlcmVyID0gKmVsZW1lbnQucmVuZGVyZXIoKTsKIAotICAg
IGlmICh1cGRhdGUuaXNTeW50aGV0aWMpIHsKKyAgICBpZiAodXBkYXRlLnJlY29tcG9zaXRlTGF5
ZXJzKSB7CiAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKFdURk1vdmUoKnVwZGF0ZS5zdHlsZSks
IFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRpb25TY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0aW9uU2NvcGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdGlv
blNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCitl
bnVtIGNsYXNzIEludmFsaWRhdGlvblNjb3BlIHsKKyAgICBOb25lLAorICAgIEVsZW1lbnQsCisg
ICAgU3VidHJlZSwKKyAgICBSZW5kZXJlcnMKK307CisKK2VudW0gY2xhc3MgSW52YWxpZGF0aW9u
TW9kZSB7CisgICAgTm9ybWFsLAorICAgIFJlY29tcG9zaXRlTGF5ZXJzCit9OworCit9Cit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
Miw3ICszOTIsNyBAQCB2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhCiAg
ICAgaWYgKHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKSB7CiAgICAgICAgIGlmIChtX3NoYWRvd1Jv
b3QpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2hhZG93Q2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxFbGVtZW50PigqbV9zaGFkb3dSb290KSkKLSAgICAgICAgICAgICAgICBzaGFkb3dDaGlsZC5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgc2hhZG93Q2hpbGQuaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fZG9j
dW1lbnQuc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDEzICsyMDAsMTMgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OnJlc29s
dmVFbGVtZQogICAgIGlmICghYWZmZWN0c1JlbmRlcmVkU3VidHJlZShlbGVtZW50LCAqbmV3U3R5
bGUpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYm9vbCBzaG91bGRSZWNvbnN0cnVjdFJl
bmRlclRyZWUgPSBlbGVtZW50LnN0eWxlQ2hhbmdlVHlwZSgpID09IFJlY29uc3RydWN0UmVuZGVy
VHJlZSB8fCBwYXJlbnQoKS5jaGFuZ2UgPT0gRGV0YWNoOworICAgIGJvb2wgc2hvdWxkUmVjb25z
dHJ1Y3RSZW5kZXJUcmVlID0gZWxlbWVudC5zdHlsZUludmFsaWRhdGlvblNjb3BlKCkgPT0gSW52
YWxpZGF0aW9uU2NvcGU6OlJlbmRlcmVycyB8fCBwYXJlbnQoKS5jaGFuZ2UgPT0gRGV0YWNoOwog
ICAgIGF1dG8qIHJlbmRlcmVyVG9VcGRhdGUgPSBzaG91bGRSZWNvbnN0cnVjdFJlbmRlclRyZWUg
PyBudWxscHRyIDogZWxlbWVudC5yZW5kZXJlcigpOwogCiAgICAgYXV0byB1cGRhdGUgPSBjcmVh
dGVBbmltYXRlZEVsZW1lbnRVcGRhdGUoV1RGTW92ZShuZXdTdHlsZSksIHJlbmRlcmVyVG9VcGRh
dGUsIG1fZG9jdW1lbnQpOwogCi0gICAgaWYgKGVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPT0g
U3ludGhldGljU3R5bGVDaGFuZ2UpCi0gICAgICAgIHVwZGF0ZS5pc1N5bnRoZXRpYyA9IHRydWU7
CisgICAgaWYgKGVsZW1lbnQuc3R5bGVJbnZhbGlkYXRpb25Nb2RlKCkgPT0gSW52YWxpZGF0aW9u
TW9kZTo6UmVjb21wb3NpdGVMYXllcnMpCisgICAgICAgIHVwZGF0ZS5yZWNvbXBvc2l0ZUxheWVy
cyA9IHRydWU7CiAKICAgICBhdXRvKiBleGlzdGluZ1N0eWxlID0gZWxlbWVudC5yZW5kZXJTdHls
ZSgpOwogCkBAIC0yMzMsNyArMjMzLDcgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OnJl
c29sdmVFbGVtZQogICAgICAgICAgICAgdXBkYXRlLmNoYW5nZSA9IERldGFjaDsKICAgICB9CiAK
LSAgICBpZiAodXBkYXRlLmNoYW5nZSAhPSBEZXRhY2ggJiYgKHBhcmVudCgpLmNoYW5nZSA9PSBG
b3JjZSB8fCBlbGVtZW50LnN0eWxlQ2hhbmdlVHlwZSgpID09IEZ1bGxTdHlsZUNoYW5nZSkpCisg
ICAgaWYgKHVwZGF0ZS5jaGFuZ2UgIT0gRGV0YWNoICYmIChwYXJlbnQoKS5jaGFuZ2UgPT0gRm9y
Y2UgfHwgZWxlbWVudC5zdHlsZUludmFsaWRhdGlvblNjb3BlKCkgPT0gSW52YWxpZGF0aW9uU2Nv
cGU6OlN1YnRyZWUpKQogICAgICAgICB1cGRhdGUuY2hhbmdlID0gRm9yY2U7CiAKICAgICByZXR1
cm4gdXBkYXRlOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVy
OjpjcmVhdGVBbmltYXQKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0
ZWRTdHlsZTsKICAgICBpZiAocmVuZGVyZXJUb1VwZGF0ZSAmJiBkb2N1bWVudC5mcmFtZSgpLT5h
bmltYXRpb24oKS51cGRhdGVBbmltYXRpb25zKCpyZW5kZXJlclRvVXBkYXRlLCAqbmV3U3R5bGUs
IGFuaW1hdGVkU3R5bGUpKQotICAgICAgICB1cGRhdGUuaXNTeW50aGV0aWMgPSB0cnVlOworICAg
ICAgICB1cGRhdGUucmVjb21wb3NpdGVMYXllcnMgPSB0cnVlOwogCiAgICAgaWYgKGFuaW1hdGVk
U3R5bGUpIHsKICAgICAgICAgdXBkYXRlLmNoYW5nZSA9IGRldGVybWluZUNoYW5nZShyZW5kZXJl
clRvVXBkYXRlLT5zdHlsZSgpLCAqYW5pbWF0ZWRTdHlsZSk7CkBAIC0zNjIsNyArMzYyLDcgQEAg
dm9pZCBUcmVlUmVzb2x2ZXI6OnJlc29sdmVDb21wb3NlZFRyZWUoKQogCiAgICAgICAgIGlmIChp
czxUZXh0Pihub2RlKSkgewogICAgICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFRleHQ+
KG5vZGUpOwotICAgICAgICAgICAgaWYgKHRleHQuc3R5bGVDaGFuZ2VUeXBlKCkgPT0gUmVjb25z
dHJ1Y3RSZW5kZXJUcmVlICYmIHBhcmVudC5jaGFuZ2UgIT0gRGV0YWNoKQorICAgICAgICAgICAg
aWYgKHRleHQuc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09IEludmFsaWRhdGlvblNjb3BlOjpS
ZW5kZXJlcnMgJiYgcGFyZW50LmNoYW5nZSAhPSBEZXRhY2gpCiAgICAgICAgICAgICAgICAgbV91
cGRhdGUtPmFkZFRleHQodGV4dCwgcGFyZW50LmVsZW1lbnQpOwogCiAgICAgICAgICAgICB0ZXh0
LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0
ZS5oCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiBz
dHJ1Y3QgRWxlbWVudFVwZGF0ZSB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBz
dHlsZTsKICAgICBDaGFuZ2UgY2hhbmdlIHsgTm9DaGFuZ2UgfTsKLSAgICBib29sIGlzU3ludGhl
dGljIHsgZmFsc2UgfTsKKyAgICBib29sIHJlY29tcG9zaXRlTGF5ZXJzIHsgZmFsc2UgfTsKIH07
CiAKIGNsYXNzIFVwZGF0ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjbwogICAgICAgICBzZXRJc0xpbmsoIWhyZWYoKS5pc051bGwoKSAmJiAhc2hv
dWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3YXNMaW5rICE9IGlzTGluaygp
KSB7CiAgICAgICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsK
LSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDIwNzQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksMTQgKzIzOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQ
cm9wZXJ0eVRvVGFyCiAgICAgaWYgKCF0YXJnZXRFbGVtZW50LmVuc3VyZUFuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcygpLnNldFByb3BlcnR5KGlkLCB2YWx1ZSwgZmFsc2UpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB0YXJnZXRFbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIHRhcmdldEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJz
KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQo
U1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCkKIHsKICAgICBBU1NF
UlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKICAgICB0YXJnZXRFbGVtZW50
LmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLnJlbW92ZVByb3BlcnR5KGlkKTsK
LSAgICB0YXJnZXRFbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFu
Z2UpOworICAgIHRhcmdldEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMo
U1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNyArMzAxLDcgQEAgaW50IFNWR0VsZW1l
bnQ6OnRhYkluZGV4KCkgY29uc3QKIAogYm9vbCBTVkdFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgaWYgKCFtX3N2Z1JhcmVEYXRhIHx8IHN0eWxl
Q2hhbmdlVHlwZSgpID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKQorICAgIGlmICghbV9zdmdSYXJl
RGF0YSB8fCBzdHlsZUludmFsaWRhdGlvbk1vZGUoKSA9PSBTdHlsZTo6SW52YWxpZGF0aW9uTW9k
ZTo6UmVjb21wb3NpdGVMYXllcnMpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIC8vIElmIHRo
ZSBzdHlsZSBjaGFuZ2VzIGJlY2F1c2Ugb2YgYSByZWd1bGFyIHByb3BlcnR5IGNoYW5nZSAobm90
IGluZHVjZWQgYnkgU01JTCBhbmltYXRpb25zIHRoZW1zZWx2ZXMpCiAgICAgLy8gcmVzZXQgdGhl
ICJjb21wdXRlZCBzdHlsZSB3aXRob3V0IFNNSUwgc3R5bGUgcHJvcGVydGllcyIsIHNvIHRoZSBi
YXNlIHZhbHVlIGNoYW5nZSBnZXRzIHJlZmxlY3RlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuaAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpLnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
SXNEaXJ0eSh0cnVlKTsKICAgICAgICAgLy8gVHJpZ2dlciBzdHlsZSByZWNhbGN1bGF0aW9uIGZv
ciAiZWxlbWVudHMgYXMgcmVzb3VyY2UiIChlLmcuIHJlZmVyZW5jZWQgYnkgZmVJbWFnZSkuCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICBp
bnZhbGlkYXRlU3R5bGUoKTsKICAgICB9CiAKICAgICAvLyBUaGUgaW5zdGFuY2VzIG9mIGFuIGVs
ZW1lbnQgYXJlIGNsb25lcyBtYWRlIGluIHNoYWRvdyB0cmVlcyB0byBpbXBsZW1lbnQgPHVzZT4u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMs
NyBAQCBib29sIFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoU1ZHCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgdGFyZ2V0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhS
ZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIHRhcmdldEVsZW1lbnQtPmludmFsaWRhdGVSZW5k
ZXJlcnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBT
VkdVc2VFbGVtZW50OjppbnZhbGlkYXRlU2hhZG93VHJlZQogICAgIGlmIChtX3NoYWRvd1RyZWVO
ZWVkc1VwZGF0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hhZG93VHJlZU5lZWRzVXBkYXRl
ID0gdHJ1ZTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7
CisgICAgaW52YWxpZGF0ZVJlbmRlcmVycygpOwogICAgIGludmFsaWRhdGVEZXBlbmRlbnRTaGFk
b3dUcmVlcygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShy
ZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4NiwxOCArNDg2LDE2IEBAIGJvb2wgSW50ZXJuYWxzOjpub2Rl
TmVlZHNTdHlsZVJlY2FsYyhOb2QKICAgICByZXR1cm4gbm9kZS5uZWVkc1N0eWxlUmVjYWxjKCk7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgc3R5bGVDaGFuZ2VUeXBlVG9TdHJpbmcoU3R5bGVDaGFuZ2VU
eXBlIHR5cGUpCitzdGF0aWMgU3RyaW5nIHN0eWxlSW52YWxpZGF0aW9uU2NvcGVUb1N0cmluZyhT
dHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgc2NvcGUpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBOb1N0eWxlQ2hhbmdlOgorICAgIHN3aXRjaCAoc2NvcGUpIHsKKyAgICBjYXNlIFN0
eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6Tm9uZToKICAgICAgICAgcmV0dXJuICJOb1N0eWxlQ2hh
bmdlIjsKLSAgICBjYXNlIElubGluZVN0eWxlQ2hhbmdlOgorICAgIGNhc2UgU3R5bGU6OkludmFs
aWRhdGlvblNjb3BlOjpFbGVtZW50OgogICAgICAgICByZXR1cm4gIklubGluZVN0eWxlQ2hhbmdl
IjsKLSAgICBjYXNlIEZ1bGxTdHlsZUNoYW5nZToKKyAgICBjYXNlIFN0eWxlOjpJbnZhbGlkYXRp
b25TY29wZTo6U3VidHJlZToKICAgICAgICAgcmV0dXJuICJGdWxsU3R5bGVDaGFuZ2UiOwotICAg
IGNhc2UgU3ludGhldGljU3R5bGVDaGFuZ2U6Ci0gICAgICAgIHJldHVybiAiU3ludGhldGljU3R5
bGVDaGFuZ2UiOwotICAgIGNhc2UgUmVjb25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5
bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnM6CiAgICAgICAgIHJldHVybiAiUmVjb25z
dHJ1Y3RSZW5kZXJUcmVlIjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01
MDYsNyArNTA0LDcgQEAgc3RhdGljIFN0cmluZyBzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyhTdAog
CiBTdHJpbmcgSW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUoTm9kZSYgbm9kZSkKIHsKLSAgICBy
ZXR1cm4gc3R5bGVDaGFuZ2VUeXBlVG9TdHJpbmcobm9kZS5zdHlsZUNoYW5nZVR5cGUoKSk7Cisg
ICAgcmV0dXJuIHN0eWxlSW52YWxpZGF0aW9uU2NvcGVUb1N0cmluZyhub2RlLnN0eWxlSW52YWxp
ZGF0aW9uU2NvcGUoKSk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OmRlc2NyaXB0aW9uKEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2
LTEwLTE3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5h
bWUgc2V0TmVlZHNTdHlsZVJlY2FsYyB0byBpbnZhbGlkYXRlU3R5bGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU0MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpkaWRJbml0aWFsaXpl
UGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luUHJvY2Vzc0NyYXNo
ZWQpOgorCiAyMDE2LTEwLTE3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5y
dT4KIAogICAgICAgICBFbGVtaW5hdGUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIFJlc291cmNl
UmVxdWVzdCBlbmNvZGluZy9kZWNvZGluZyBpbXBsZW1lbnRhdGlvbnMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9u
IDIwNzQwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
ZGlkSW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgaWYgKG1fcGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0
YXRlKCkgPCBIVE1MUGx1Z0luRWxlbWVudDo6UmVzdGFydGluZykgewogICAgICAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkxheWVyKCkgJiYgZnJhbWUoKSkgewogICAgICAgICAgICAgZnJhbWUoKS0+
dmlldygpLT5lbnRlckNvbXBvc2l0aW5nTW9kZSgpOwotICAgICAgICAgICAgbV9wbHVnaW5FbGVt
ZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAg
ICAgIG1fcGx1Z2luRWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGZyYW1lKCkgJiYgIWZyYW1lKCktPnNldHRpbmdzKCkubWF4aW11bVBs
dWdJblNuYXBzaG90QXR0ZW1wdHMoKSkgewogICAgICAgICAgICAgYmVnaW5TbmFwc2hvdHRpbmdS
dW5uaW5nUGx1Z2luKCk7CkBAIC02NzMsNyArNjczLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpkaWRJ
bml0aWFsaXplUGx1Z2luKCkKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkxheWVyKCkgJiYgZnJhbWUoKSkgewogICAgICAgICAgICAgZnJhbWUoKS0+dmlldygpLT5l
bnRlckNvbXBvc2l0aW5nTW9kZSgpOwotICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIG1fcGx1
Z2luRWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG1fcGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPT0gSFRNTFBsdWdJbkVsZW1l
bnQ6OlJlc3RhcnRpbmdXaXRoUGVuZGluZ01vdXNlQ2xpY2spCiAgICAgICAgICAgICBtX3BsdWdp
bkVsZW1lbnQtPmRpc3BhdGNoUGVuZGluZ01vdXNlQ2xpY2soKTsKQEAgLTE1NzAsNyArMTU3MCw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQogICAgIGlmICghaXM8
UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wbHVnaW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKKyAgICBtX3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogCiAg
ICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcikuc2V0UGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbkNyYXNoZWQpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0xMC0x
NyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNl
dE5lZWRzU3R5bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3IGNyZWF0ZVBsdWdpbkxheWVyXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVn
aW5dKToKKwogMjAxNi0xMC0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBDU1MgY2xhc3NlcyBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9uCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5tbQkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOTksMTAgKzEwOTks
MTAgQEAgLSAoQk9PTCljcmVhdGVQbHVnaW4KICAgICAgICAgICAgICAgICByZWFsUGx1Z2luTGF5
ZXIuZ2V0KCkuYXV0b3Jlc2l6aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5
ZXJIZWlnaHRTaXphYmxlOwogICAgICAgICAgICAgICAgIFtfcGx1Z2luTGF5ZXIuZ2V0KCkgYWRk
U3VibGF5ZXI6cmVhbFBsdWdpbkxheWVyLmdldCgpXTsKIAotICAgICAgICAgICAgICAgIC8vIEVh
Z2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3ZSdsbCBuZWVkIGl0
LiBUaGlzIGF2b2lkcyBmaXJpbmcgc2V0TmVlZHNTdHlsZVJlY2FsYygpCisgICAgICAgICAgICAg
ICAgLy8gRWFnZXJseSBlbnRlciBjb21wb3NpdGluZyBtb2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xs
IG5lZWQgaXQuIFRoaXMgYXZvaWRzIGZpcmluZyBpbnZhbGlkYXRlU3R5bGUoKQogICAgICAgICAg
ICAgICAgIC8vIGZvciBpZnJhbWVzIHRoYXQgY29udGFpbiBjb21wb3NpdGVkIHBsdWdpbnMgYXQg
YmFkIHRpbWVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwMzMK
ICAgICAgICAgICAgICAgICBjb3JlKFtzZWxmIHdlYkZyYW1lXSktPnZpZXcoKS0+ZW50ZXJDb21w
b3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgICAgICBbc2VsZiBlbGVtZW50XS0+c2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgW3NlbGYg
ZWxlbWVudF0tPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgW3NlbGYgc2V0V2FudHNMYXllcjpZRVNdOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9z
dGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCAtICh2b2lkKWNyZWF0ZVBsdWdpbkxheWVy
CiAgICAgICAgIC8vIEVhZ2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25v
dyB3ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lkcyBmaXJpbmcgc2V0TmVlZHNTdHlsZVJlY2FsYygp
CiAgICAgICAgIC8vIGZvciBpZnJhbWVzIHRoYXQgY29udGFpbiBjb21wb3NpdGVkIHBsdWdpbnMg
YXQgYmFkIHRpbWVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzkw
MzMKICAgICAgICAgY29yZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVyQ29tcG9zaXRp
bmdNb2RlKCk7Ci0gICAgICAgIFtzZWxmIGVsZW1lbnRdLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgW3NlbGYgZWxlbWVudF0tPmludmFsaWRhdGVT
dHlsZUFuZExheWVycygpOwogICAgIH0gZWxzZQogICAgICAgICBzZWxmLndhbnRzTGF5ZXIgPSBZ
RVM7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291818</attachid>
            <date>2016-10-17 08:12:14 -0700</date>
            <delta_ts>2016-10-18 03:44:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-enum-12.patch</filename>
            <type>text/plain</type>
            <size>101642</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBAQAorMjAxNi0xMC0xNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5
bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbHNvIHJlbmFtZSBTdHlsZUNoYW5nZVR5cGUgZW51bSBhbmQg
c29tZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY2xhcml0eS4gRm9yIGV4YW1wbGUKKworICAgICAg
ICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
KworICAgICAgICBiZWNvbWVzCisKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
QW5kTGF5ZXJzKCk7CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVk
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q1NTVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnVud3JhcEZ1bGxTY3JlZW5S
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0QW5pbWF0aW5nRnVsbFNj
cmVlbik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEZvY3VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhvdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0ZVJl
bmRlcmVycyk6CisKKyAgICAgICAgICAgIE1vdmUgcHVibGljIGludmFsaWRhdGlvbiBmdW5jdGlv
bnMgdG8gRWxlbWVudCB0aWdodGVuaW5nIHR5cGluZy4KKyAgICAgICAgICAgIFVzZSBzZXBhcmF0
ZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBlbnVtIHZhbHVlcy4KKyAgICAgICAgICAgIFRoaXMgd2F5
IHRoZSBjYWxsIHNpdGVzIGxvb2sgbmljZXIgYW5kIG9ubHkgdXNlZnVsIGNvbWJpbmF0aW9ucyBh
cmUgZXhwb3NlZC4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YWRkU2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEhhc0ZvY3VzV2l0aGluKToKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlRWRpdGFiaWxp
dHlGcm9tQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZGp1c3RTdHls
ZUludmFsaWRhdGlvbik6CisKKyAgICAgICAgICAgIFVwZGF0ZSBzY29wZSBhbmQgbW9kZSBzZXBh
cmF0ZWx5LiBUaGVyZSB3YXMgYSBwb3RlbnRpYWwgYnVnIGhlcmUgd2hlcmUKKyAgICAgICAgICAg
IFN5bnRoZXRpY1N0eWxlQ2hhbmdlIGNvdWxkIG92ZXJ3cml0ZSBGdWxsU3R5bGVDaGFuZ2UgKG5v
IGtub3duIHJlcHJvKS4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dXBkYXRlQW5jZXN0b3Jz
Rm9yU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bmVlZHNTdHlsZVJlY2FsYyk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhck5lZWRzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6c3R5bGVJbnZhbGlkYXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzdHlsZUludmFsaWRhdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xl
YXJTdHlsZUludmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzdHlsZUNoYW5n
ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0U3R5bGVDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMpOgorICAg
ICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6
OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSk6CisgICAgICAgICogZG9tL1Nsb3RBc3NpZ25tZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsb3RBc3NpZ25tZW50OjphZGRTbG90RWxlbWVudEJ5
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTbG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1l
bnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNs
b3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRl
bnRDaGFuZ2UpOgorICAgICAgICAqIGRvbS9WaXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxp
bmspOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUp
OgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNhbGN1
bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6YWRk
SW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVu
dDo6cmVtb3ZlSW52YWxpZERlc2NlbmRhbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRl
VmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0ZWRGb3Jt
Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFs
aWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1dHRvbik6CisgICAgICAgICogaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OnNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGcmFtZU93bmVyRWxlbWVudDo6c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpydW5Qb3N0VHlw
ZVVwZGF0ZVRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNr
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvRmlsbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aEF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWluTGVuZ3RoQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIpOgorICAgICAg
ICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICog
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1
c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVt
b3ZlU25hcHNob3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbik6CisgICAgICAgICogaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xp
c3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0
aXBsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVz
ZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc1RhYmxlQ2VsbEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRhYmxlQ2Vs
bHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVDb21tb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0
eSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAq
IG1hdGhtbC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxl
Y3RlZENoaWxkKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRz
QW5kVXBkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjppbWFnZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5SUZyYW1lc09mQ29tcG9zaXRp
bmdDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCk6CisgICAgICAgICogc3R5bGUvQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpB
dHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
c3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAq
IHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBzdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBk
YXRlcjo6dXBkYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUludmFs
aWRhdGlvblNjb3BlLmg6IEFkZGVkLgorCisgICAgICAgICAgICBTdHlsZUNoYW5nZVR5cGUgZW51
bSBzcGxpdHMgaW50byBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgYW5kIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlLgorICAgICAgICAgICAgTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KKworICAg
ICAgICAqIHN0eWxlL1N0eWxlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNj
b3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVz
b2x2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3Jl
YXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVl
UmVzb2x2ZXI6OnJlc29sdmVDb21wb3NlZFRyZWUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlVXBk
YXRlLmg6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NTUHJvcGVydHlU
b1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmludmFsaWRhdGVTVkdQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdV
c2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmludmFsaWRh
dGVTaGFkb3dUcmVlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5
bGVDaGFuZ2VUeXBlVG9TdHJpbmcpOiBEZWxldGVkLgorCiAyMDE2LTEwLTE3ICBLb25zdGFudGlu
IFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBFbGVtaW5hdGUgY29kZSBk
dXBsaWNhdGlvbiBiZXR3ZWVuIFJlc291cmNlUmVxdWVzdCBlbmNvZGluZy9kZWNvZGluZyBpbXBs
ZW1lbnRhdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjIzNCw2
ICs2MjM0LDcgQEAKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNl
SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87
IH07CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQx
NjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUy
QUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHAgKi87IH07CisJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBT
dHlsZUludmFsaWRhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRp
b25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkx
NkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4NjIsNiArMTM4
NjMsNyBAQAogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NDE2MDM2
RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0
eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4MTM3QjgxREIz
QjUyNjAwNUM1OUJGIC8qIFN0eWxlSW52YWxpZGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxh
eW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5l
TGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzU3LDYgKzIyMzU5LDcgQEAKIAkJ
CQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1
OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJ
CQkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAq
LywKKwkJCQlFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVJbnZhbGlkYXRpb25TY29w
ZS5oICovLAogCQkJCUU0REFDRTZCMUQxMkUxMTYwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNv
dXJjZXMuY3BwICovLAogCQkJCUU0REFDRTY5MUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBlbmRp
bmdSZXNvdXJjZXMuaCAqLywKIAkJCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVS
ZWxhdGlvbnMuY3BwICovLApAQCAtMjUyMTYsNiArMjUyMTksOCBAQAogCQkJCUJDOTI2RjgxMEMw
NTUyNDcwMDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU3QjE1MEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxIZWFkRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMkFBMkYwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEhlYWRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyog
U3R5bGVJbnZhbGlkYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUEyOTlGRTgxRDdG
NUZBNjAwQTYwMDkzIC8qIFJlbmRlclRoZW1lQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTJBQTMxMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBODVCMTkwMEExQjE4QTIwMEQ4Qzg3QyAvKiBKU0hUTUxIdG1sRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM0OTE4QzkwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFt
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsMjQgKzEwMCwyMyBAQCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjpDaGVj
a0Rlc2NlbmRhCiAgICAgaWYgKG1faGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzSW5BdXRob3JT
aGVldCkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBkbyBhY3R1YWwgcnVsZSBtYXRj
aGluZyB0b28uCiAgICAgICAgIGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAg
IGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudC5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogCi0gICAgc3dpdGNoIChlbGVtZW50LnN0
eWxlQ2hhbmdlVHlwZSgpKSB7Ci0gICAgY2FzZSBOb1N0eWxlQ2hhbmdlOiB7CisgICAgc3dpdGNo
IChlbGVtZW50LnN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSkgeworICAgIGNhc2UgU3R5bGU6Oklu
dmFsaWRhdGlvblNjb3BlOjpOb25lOiB7CiAgICAgICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIHJ1
bGVDb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0LCBmaWx0ZXIpOwogICAgICAgICBydWxlQ29s
bGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25v
cmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cyk7CiAgICAgICAgIHJ1bGVDb2xsZWN0b3IubWF0Y2hB
dXRob3JSdWxlcyhmYWxzZSk7CiAKICAgICAgICAgaWYgKHJ1bGVDb2xsZWN0b3IuaGFzTWF0Y2hl
ZFJ1bGVzKCkpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKICAg
ICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKICAgICB9Ci0gICAgY2FzZSBJbmxp
bmVTdHlsZUNoYW5nZToKKyAgICBjYXNlIFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVu
dDoKICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICBjYXNlIEZ1bGxT
dHlsZUNoYW5nZToKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAgIGNhc2UgUmVj
b25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpT
dWJ0cmVlOgorICAgIGNhc2UgU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnM6CiAg
ICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpObzsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwNzQw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1MDAsNyArMzUwMCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJl
c2kKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbihyb290Tm9kZSgpKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG8oKmVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5z
dHlsZSgpLmhhc1ZpZXdwb3J0VW5pdHMoKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRz
U3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgZWxlbWVudC0+aW52
YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogfQogCkBAIC0zODE4LDEwICszODE4LDEwIEBAIEVsZW1l
bnQqIERvY3VtZW50Ojpmb2N1c05hdmlnYXRpb25TdGFydGkKIHZvaWQgRG9jdW1lbnQ6OnNldENT
U1RhcmdldChFbGVtZW50KiBuKQogewogICAgIGlmIChtX2Nzc1RhcmdldCkKLSAgICAgICAgbV9j
c3NUYXJnZXQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgbV9jc3NUYXJnZXQtPmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBtX2Nzc1RhcmdldCA9IG47CiAgICAgaWYg
KG4pCi0gICAgICAgIG4tPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgbi0+aW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3Rlck5vZGVM
aXN0Rm9ySW52YWxpZGF0aW9uKExpdmVOb2RlTGlzdCYgbGlzdCkKQEAgLTU4MzUsOCArNTgzNSw4
IEBAIHN0YXRpYyB2b2lkIHVud3JhcEZ1bGxTY3JlZW5SZW5kZXJlcihSZW4KICAgICBib29sIHJl
cXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQ7CiAgICAgZnVsbFNjcmVlblJlbmRlcmVyLT51bndyYXBS
ZW5kZXJlcihyZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKTsKIAotICAgIGlmIChyZXF1aXJlc1Jl
bmRlclRyZWVSZWJ1aWxkICYmIGZ1bGxTY3JlZW5FbGVtZW50ICYmIGZ1bGxTY3JlZW5FbGVtZW50
LT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnROb2RlKCkt
PnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpZiAocmVx
dWlyZXNSZW5kZXJUcmVlUmVidWlsZCAmJiBmdWxsU2NyZWVuRWxlbWVudCAmJiBmdWxsU2NyZWVu
RWxlbWVudC0+cGFyZW50RWxlbWVudCgpKQorICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpLT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC02MDI3LDcgKzYwMjcsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRBbmltYXRpbmdGdWxsU2NyZWVu
KGJvCiAgICAgbV9pc0FuaW1hdGluZ0Z1bGxTY3JlZW4gPSBmbGFnOwogCiAgICAgaWYgKG1fZnVs
bFNjcmVlbkVsZW1lbnQgJiYgbV9mdWxsU2NyZWVuRWxlbWVudC0+aXNEZXNjZW5kYW50T2YodGhp
cykpIHsKLSAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgICAgIHNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lk
IEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgCiAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlID0gdGhpcy0+cmVuZGVyU3R5bGUoKTsKICAgICBib29sIHJlYWN0c1Rv
UHJlc3MgPSAocmVuZGVyU3R5bGUgJiYgcmVuZGVyU3R5bGUtPmFmZmVjdGVkQnlBY3RpdmUoKSkg
fHwgc3R5bGVBZmZlY3RlZEJ5QWN0aXZlKCk7CiAgICAgaWYgKHJlYWN0c1RvUHJlc3MpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CkBAIC02MTIs
NyArNjEyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRGb2N1cyhib29sIGZsYWcpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNlZCh0
aGlzLCBmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogCiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxl
bWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkKICAg
ICAgICAgZWxlbWVudC0+c2V0SGFzRm9jdXNXaXRoaW4oZmxhZyk7CkBAIC02MzIsMTMgKzYzMiwx
MyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhvdmVyZWQoYm9vbCBmbGFnKQogICAgICAgICAvLyBzdHls
ZSwgaXQgd291bGQgbmV2ZXIgZ28gYmFjayB0byBpdHMgbm9ybWFsIHN0eWxlIGFuZCByZW1haW4K
ICAgICAgICAgLy8gc3R1Y2sgaW4gaXRzIGhvdmVyZWQgc3R5bGUpLgogICAgICAgICBpZiAoIWZs
YWcpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLmFmZmVjdGVkQnlIb3ZlcigpIHx8IGNoaWxkcmVuQWZm
ZWN0ZWRCeUhvdmVyKCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hh
bmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSk7CkBAIC0xMzIyLDcg
KzEzMjIsNyBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhCiAgICAg
ICAgICAgICBlbGVtZW50RGF0YSgpLT5zZXRIYXNOYW1lQXR0cmlidXRlKCFuZXdWYWx1ZS5pc051
bGwoKSk7CiAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpwc2V1ZG9BdHRyKSB7
CiAgICAgICAgICAgICBpZiAobmVlZHNTdHlsZUludmFsaWRhdGlvbigpICYmIGlzSW5TaGFkb3dU
cmVlKCkpCi0gICAgICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFu
Z2UpOworICAgICAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6c2xvdEF0dHIpIHsKICAg
ICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCkpIHsKQEAgLTE0NDAs
NiArMTQ0MCwyNiBAQCBFbGVtZW50U3R5bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKGNvbnN0CiAg
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudFN0
eWxlKTsKIH0KIAordm9pZCBFbGVtZW50OjppbnZhbGlkYXRlU3R5bGUoKQoreworICAgIE5vZGU6
OmludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6OkVsZW1lbnQpOworfQor
Cit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUFuZExheWVycygpCit7CisgICAgTm9kZTo6
aW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6RWxlbWVudCwgU3R5bGU6
OkludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKTsKK30KKwordm9pZCBFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCkKK3sKKyAgICBOb2RlOjppbnZhbGlkYXRlU3R5
bGUoU3R5bGU6OkludmFsaWRhdGlvblNjb3BlOjpTdWJ0cmVlKTsKK30KKwordm9pZCBFbGVtZW50
OjppbnZhbGlkYXRlUmVuZGVyZXJzKCkKK3sKKyAgICBOb2RlOjppbnZhbGlkYXRlU3R5bGUoU3R5
bGU6OkludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnMpOworfQorCiAjaWYgRU5BQkxFKFdFQl9B
TklNQVRJT05TKQogV2ViQW5pbWF0aW9uVmVjdG9yIEVsZW1lbnQ6OmdldEFuaW1hdGlvbnMoKQog
ewpAQCAtMTc1NCw3ICsxNzc0LDcgQEAgdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxT
aGFkb3dSbwogICAgIGZvciAoYXV0byYgdGFyZ2V0IDogcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHMpCiAgICAgICAgIHRhcmdldC0+ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7CiAK
LSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52
YWxpZGF0ZVJlbmRlcmVycygpOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQ
dXNoU2hhZG93Um9vdCgqdGhpcywgc2hhZG93Um9vdCk7CiAKQEAgLTE5MzYsNyArMTk1Niw3IEBA
IHN0YXRpYyB2b2lkIGNoZWNrRm9yRW1wdHlTdHlsZUNoYW5nZShFbGUKICAgICBpZiAoZWxlbWVu
dC5zdHlsZUFmZmVjdGVkQnlFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVu
dC5yZW5kZXJTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8ICghc3R5bGUtPmVtcHR5U3Rh
dGUoKSB8fCBlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkpCi0gICAgICAgICAgICBlbGVtZW50LnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtMTk0Nyw3ICsxOTY3LDcgQEAgc3RhdGljIHZv
aWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgIC8vIDplbXB0eSBzZWxlY3Rvci4K
ICAgICBjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UocGFyZW50KTsKIAotICAgIGlmIChwYXJlbnQu
c3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQorICAgIGlmIChwYXJlbnQuc3R5
bGVJbnZhbGlkYXRpb25TY29wZSgpID49IFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6U3VidHJl
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gOmZpcnN0LWNoaWxkLiAgSW4gdGhlIHBhcnNl
ciBjYWxsYmFjayBjYXNlLCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGFueXRoaW5nLCBzaW5jZSB3
ZSB3ZXJlIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLgpAQCAtMTk2MiwxNCArMTk4MiwxNCBAQCBzdGF0
aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIGlmIChuZXdGaXJz
dEVsZW1lbnQgIT0gZWxlbWVudEFmdGVyQ2hhbmdlKSB7CiAgICAgICAgICAgICBhdXRvKiBzdHls
ZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICgh
c3R5bGUgfHwgc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIGVsZW1l
bnRBZnRlckNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIGVs
ZW1lbnRBZnRlckNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRvIGhhbmRsZSBub2RlIHJlbW92YWwuCiAgICAg
ICAgIGlmIChjaGVja1R5cGUgPT0gU2libGluZ0VsZW1lbnRSZW1vdmVkICYmIG5ld0ZpcnN0RWxl
bWVudCA9PSBlbGVtZW50QWZ0ZXJDaGFuZ2UgJiYgbmV3Rmlyc3RFbGVtZW50KSB7CiAgICAgICAg
ICAgICBhdXRvKiBzdHlsZSA9IG5ld0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5maXJzdENoaWxkU3RhdGUoKSkKLSAgICAgICAg
ICAgICAgICBuZXdGaXJzdEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgICAgICBuZXdGaXJzdEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTk4Miw3ICsyMDAyLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tG
b3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxl
bWVudEJlZm9yZUNoYW5nZSkgewogICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50QmVm
b3JlQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHls
ZS0+bGFzdENoaWxkU3RhdGUoKSkKLSAgICAgICAgICAgICAgICBlbGVtZW50QmVmb3JlQ2hhbmdl
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9yZUNo
YW5nZS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gV2UgYWxzbyBoYXZlIHRvIGhhbmRsZSBub2RlIHJlbW92YWwuICBUaGUgcGFyc2VyIGNhbGxi
YWNrIGNhc2UgaXMgc2ltaWxhciB0byBub2RlIHJlbW92YWwgYXMgd2VsbCBpbiB0aGF0IHdlIG5l
ZWQgdG8gY2hhbmdlIHRoZSBsYXN0IGNoaWxkCkBAIC0xOTkwLDEzICsyMDEwLDEzIEBAIHN0YXRp
YyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgaWYgKChjaGVja1R5
cGUgPT0gU2libGluZ0VsZW1lbnRSZW1vdmVkIHx8IGNoZWNrVHlwZSA9PSBGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbikgJiYgbmV3TGFzdEVsZW1lbnQgPT0gZWxlbWVudEJlZm9yZUNoYW5nZSAmJiBu
ZXdMYXN0RWxlbWVudCkgewogICAgICAgICAgICAgYXV0byogc3R5bGUgPSBuZXdMYXN0RWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sYXN0
Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIG5ld0xhc3RFbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1lbnQtPmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50QWZ0
ZXJDaGFuZ2UpIHsKICAgICAgICAgaWYgKGVsZW1lbnRBZnRlckNoYW5nZS0+c3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgICAgIGVsZW1lbnRBZnRlckNoYW5nZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnRBZnRl
ckNoYW5nZS0+YWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkpIHsKICAgICAgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnRUb0ludmFsaWRhdGUgPSBlbGVtZW50QWZ0ZXJDaGFuZ2U7CiAgICAg
ICAgICAgICBkbyB7CkBAIC0yMDA0LDcgKzIwMjQsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNp
YmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgICAgICB9IHdoaWxlIChlbGVtZW50VG9JbnZhbGlk
YXRlICYmICFlbGVtZW50VG9JbnZhbGlkYXRlLT5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZygpKTsKIAogICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0ludmFsaWRhdGUpCi0gICAgICAg
ICAgICAgICAgZWxlbWVudFRvSW52YWxpZGF0ZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICAgICAgICAgIGVsZW1lbnRUb0ludmFsaWRhdGUtPmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAxNSw3ICsyMDM1LDcgQEAgc3RhdGljIHZv
aWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgIC8vIEZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zIHdlIGp1c3QgbWFyayB0aGUgcGFyZW50IG5vZGUgYXMgY2hhbmdlZCwgc2luY2Ugd2Ug
ZG9uJ3Qgd2FudCB0byBtYWtlIGNoaWxkcmVuQ2hhbmdlZCBPKG5eMikgYnkgY3Jhd2xpbmcgYWxs
IG91ciBraWRzCiAgICAgLy8gaGVyZS4gIHJlY2FsY1N0eWxlIHdpbGwgdGhlbiBmb3JjZSBhIHdh
bGsgb2YgdGhlIGNoaWxkcmVuIHdoZW4gaXQgc2VlcyB0aGF0IHRoaXMgaGFzIGhhcHBlbmVkLgog
ICAgIGlmIChwYXJlbnQuY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KSAmJiBlbGVtZW50QmVmb3JlQ2hhbmdlKQotICAgICAgICBwYXJlbnQuc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICBwYXJlbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQog
CiB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdl
KQpAQCAtMjcwNCw3ICsyNzI0LDcgQEAgYm9vbCBFbGVtZW50OjpuZWVkc1N0eWxlSW52YWxpZGF0
aW9uKCkgYwogewogICAgIGlmICghaW5SZW5kZXJlZERvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQor
ICAgIGlmIChzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgPj0gU3R5bGU6OkludmFsaWRhdGlvblNj
b3BlOjpTdWJ0cmVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGRvY3VtZW50KCku
aGFzUGVuZGluZ0ZvcmNlZFN0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMwNzEsNyArMzA5MSw3IEBAIGJvb2wgRWxlbWVudDo6Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVu
dCgKIHZvaWQgRWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChib29sIGZsYWcp
CiB7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0Q29udGFpbnNGdWxsU2NyZWVuRWxl
bWVudChmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogc3RhdGljIEVsZW1lbnQq
IHBhcmVudENyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw2ICs1NDMsMTEgQEAgcHVibGljOgogICAg
IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKICAgICBFbGVtZW50U3R5bGUgcmVzb2x2
ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKKyAgICB2b2lkIGludmFs
aWRhdGVTdHlsZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJzKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgdm9p
ZCBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CisKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygp
IGNvbnN0OwogICAgIHZvaWQgc2V0SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwogCkBAIC04MDgs
NyArODEzLDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SGFzRm9jdXNXaXRoaW4oYgogICAg
ICAgICByZXR1cm47CiAgICAgc2V0RmxhZyhmbGFnLCBIYXNGb2N1c1dpdGhpbik7CiAgICAgaWYg
KHN0eWxlQWZmZWN0ZWRCeUZvY3VzV2l0aGluKCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Niw3ICs2
NjYsNyBAQCB2b2lkIE5vZGU6Omluc3BlY3QoKQogc3RhdGljIE5vZGU6OkVkaXRhYmlsaXR5IGNv
bXB1dGVFZGl0YWJpbGl0eUZyb21Db21wdXRlZFN0eWxlKGNvbnN0IE5vZGUmIHN0YXJ0Tm9kZSwg
Tm9kZTo6VXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQpCiB7CiAgICAgLy8gSWRlYWxs
eSB3ZSdkIGNhbGwgQVNTRVJUKCFuZWVkc1N0eWxlUmVjYWxjKCkpIGhlcmUsIGJ1dAotICAgIC8v
IENvbnRhaW5lck5vZGU6OnNldEZvY3VzKCkgY2FsbHMgc2V0TmVlZHNTdHlsZVJlY2FsYygpLCBz
byB0aGUgYXNzZXJ0aW9uCisgICAgLy8gQ29udGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBp
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCksIHNvIHRoZSBhc3NlcnRpb24KICAgICAvLyB3b3Vs
ZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50KCkuCiAK
ICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAmc3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7CkBAIC03NTAsNiArNzUwLDE2IEBAIHZvaWQgTm9kZTo6ZGVyZWZF
dmVudFRhcmdldCgpCiAgICAgZGVyZWYoKTsKIH0KIAordm9pZCBOb2RlOjphZGp1c3RTdHlsZUlu
dmFsaWRhdGlvbihTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUgc2NvcGUsIFN0eWxlOjpJbnZhbGlk
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHNjb3BlID4gc3R5bGVJbnZhbGlkYXRpb25TY29w
ZSgpKSB7CisgICAgICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZUludmFsaWRhdGlvblNjb3BlTWFz
azsKKyAgICAgICAgbV9ub2RlRmxhZ3MgfD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNjb3BlKSA8
PCBTdHlsZUludmFsaWRhdGlvblNjb3BlU2hpZnQ7CisgICAgfQorICAgIGlmIChtb2RlID09IFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlOjpSZWNvbXBvc2l0ZUxheWVycykKKyAgICAgICAgc2V0Rmxh
ZyhTdHlsZUludmFsaWRhdGlvbk1vZGVGbGFnKTsKK30KKwogaW5saW5lIHZvaWQgTm9kZTo6dXBk
YXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKQogewogICAgIGF1dG8gY29tcG9zZWRBbmNlc3Rv
cnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtNzU4LDEwICs3NjgsOCBAQCBp
bmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsCiAgICAgaWYgKGl0ICE9IGVu
ZCkgewogICAgICAgICBpdC0+c2V0RGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAKLSAg
ICAgICAgaWYgKGl0LT5jaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zdHlsZUNoYW5nZVR5cGUoKSA8
IEZ1bGxTdHlsZUNoYW5nZSkKLSAgICAgICAgICAgICAgICBpdC0+c2V0U3R5bGVDaGFuZ2UoRnVs
bFN0eWxlQ2hhbmdlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXQtPmNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpKQorICAgICAgICAgICAg
aXQtPmFkanVzdFN0eWxlSW52YWxpZGF0aW9uKFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6U3Vi
dHJlZSwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7CiAKICAgICAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgLy8gSXRlcmF0b3Igc2tpcHMgb3ZlciBz
aGFkb3cgcm9vdHMuCkBAIC03ODIsOSArNzkwLDkgQEAgaW5saW5lIHZvaWQgTm9kZTo6dXBkYXRl
QW5jZXN0b3JzRm9yU3R5bAogICAgIGRvY3VtZW50KCkuc2NoZWR1bGVTdHlsZVJlY2FsYygpOwog
fQogCi12b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlIGNoYW5n
ZVR5cGUpCit2b2lkIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHlsZTo6SW52YWxpZGF0aW9uU2Nv
cGUgc2NvcGUsIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGNo
YW5nZVR5cGUgIT0gTm9TdHlsZUNoYW5nZSk7CisgICAgQVNTRVJUKHNjb3BlICE9IFN0eWxlOjpJ
bnZhbGlkYXRpb25TY29wZTo6Tm9uZSk7CiAgICAgaWYgKCFpblJlbmRlcmVkRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC03OTIsMTEgKzgwMCwxMSBAQCB2b2lkIE5vZGU6OnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuCiAgICAgaWYgKGRvY3VtZW50KCkuaW5SZW5kZXJUcmVl
VXBkYXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0eWxlQ2hhbmdlVHlwZSBleGlzdGlu
Z0NoYW5nZVR5cGUgPSBzdHlsZUNoYW5nZVR5cGUoKTsKLSAgICBpZiAoY2hhbmdlVHlwZSA+IGV4
aXN0aW5nQ2hhbmdlVHlwZSkKLSAgICAgICAgc2V0U3R5bGVDaGFuZ2UoY2hhbmdlVHlwZSk7Cisg
ICAgYm9vbCBtYXJrQW5jZXN0b3JzID0gc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09IFN0eWxl
OjpJbnZhbGlkYXRpb25TY29wZTo6Tm9uZSB8fCBzY29wZSA9PSBTdHlsZTo6SW52YWxpZGF0aW9u
U2NvcGU6OlJlbmRlcmVyczsKKworICAgIGFkanVzdFN0eWxlSW52YWxpZGF0aW9uKHNjb3BlLCBt
b2RlKTsKIAotICAgIGlmIChleGlzdGluZ0NoYW5nZVR5cGUgPT0gTm9TdHlsZUNoYW5nZSB8fCBj
aGFuZ2VUeXBlID09IFJlY29uc3RydWN0UmVuZGVyVHJlZSkKKyAgICBpZiAobWFya0FuY2VzdG9y
cykKICAgICAgICAgdXBkYXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKTsKIH0KIApAQCAtMTE5
Niw3ICsxMjA0LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBOb2RlOgog
ICAgIGlmIChwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCktPmlzSW5TaGFkb3dUcmVlKCkpCiAgICAg
ICAgIHNldEZsYWcoSXNJblNoYWRvd1RyZWVGbGFnKTsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGUoU3R5bGU6Oklu
dmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnMpOwogCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25TY29wZS5o
IgogI2luY2x1ZGUgIlRyZWVTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC02MSwyMSArNjIsOCBAQCBjbGFzcyBTaGFkb3dS
b290OwogY2xhc3MgVG91Y2hFdmVudDsKIGNsYXNzIFVJUmVxdWVzdEV2ZW50OwogCi1jb25zdCBp
bnQgbm9kZVN0eWxlQ2hhbmdlU2hpZnQgPSAxNDsKLQogdXNpbmcgTm9kZU9yU3RyaW5nID0gc3Rk
OjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCi0vLyBTeW50
aGV0aWNTdHlsZUNoYW5nZSBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZW50
aXJlIHN0eWxlIGNoYW5nZSBsb2dpYyBldmVuIHRob3VnaAotLy8gbm8gc3R5bGUgcHJvcGVydHkg
aGFzIGFjdHVhbGx5IGNoYW5nZWQuIEl0IGlzIHVzZWQgdG8gcmVzdHJ1Y3R1cmUgdGhlIHRyZWUg
d2hlbiwgZm9yIGluc3RhbmNlLAotLy8gUmVuZGVyTGF5ZXJzIGFyZSBjcmVhdGVkIG9yIGRlc3Ry
b3llZCBkdWUgdG8gYW5pbWF0aW9uIGNoYW5nZXMuCi1lbnVtIFN0eWxlQ2hhbmdlVHlwZSB7IAot
ICAgIE5vU3R5bGVDaGFuZ2UgPSAwLCAKLSAgICBJbmxpbmVTdHlsZUNoYW5nZSA9IDEgPDwgbm9k
ZVN0eWxlQ2hhbmdlU2hpZnQsIAotICAgIEZ1bGxTdHlsZUNoYW5nZSA9IDIgPDwgbm9kZVN0eWxl
Q2hhbmdlU2hpZnQsIAotICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlID0gMyA8PCBub2RlU3R5bGVD
aGFuZ2VTaGlmdCwKLSAgICBSZWNvbnN0cnVjdFJlbmRlclRyZWUgPSA0IDw8IG5vZGVTdHlsZUNo
YW5nZVNoaWZ0LAotfTsKLQogY2xhc3MgTm9kZVJhcmVEYXRhQmFzZSB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KQEAg
LTMyMSw4ICszMDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VyQWN0aW9uRWxlbWVudChi
b29sIGZsYWcpIHsgc2V0RmxhZyhmbGFnLCBJc1VzZXJBY3Rpb25FbGVtZW50KTsgfQogCiAgICAg
Ym9vbCBpblJlbmRlcmVkRG9jdW1lbnQoKSBjb25zdDsKLSAgICBib29sIG5lZWRzU3R5bGVSZWNh
bGMoKSBjb25zdCB7IHJldHVybiBzdHlsZUNoYW5nZVR5cGUoKSAhPSBOb1N0eWxlQ2hhbmdlOyB9
Ci0gICAgU3R5bGVDaGFuZ2VUeXBlIHN0eWxlQ2hhbmdlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFN0eWxlQ2hhbmdlVHlwZT4obV9ub2RlRmxhZ3MgJiBTdHlsZUNoYW5nZU1hc2sp
OyB9CisgICAgYm9vbCBuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gc3R5bGVJbnZh
bGlkYXRpb25TY29wZSgpICE9IFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6Tm9uZTsgfQorICAg
IFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZSBzdHlsZUludmFsaWRhdGlvblNjb3BlKCkgY29uc3Q7
CisgICAgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUgc3R5bGVJbnZhbGlkYXRpb25Nb2RlKCkgY29u
c3Q7CiAgICAgYm9vbCBjaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSBjb25zdCB7IHJldHVybiBnZXRG
bGFnKENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcpOyB9CiAgICAgYm9vbCBzdHlsZUlzQWZmZWN0
ZWRCeVByZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoU3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcpOyB9CiAgICAgYm9vbCBpc0VkaXRpbmdUZXh0KCkgY29uc3Qg
eyByZXR1cm4gZ2V0RmxhZyhJc1RleHRGbGFnKSAmJiBnZXRGbGFnKElzRWRpdGluZ1RleHRPclVu
ZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnKTsgfQpAQCAtMzMwLDggKzMxOSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgc2V0RmxhZyhDaGlsZE5lZWRz
U3R5bGVSZWNhbGNGbGFnKTsgfQogICAgIHZvaWQgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMo
KSB7IG1fbm9kZUZsYWdzICY9IH4oQ2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyB8IERpcmVjdENo
aWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKLSAg
ICB2b2lkIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpIHsgbV9ub2RlRmxhZ3MgJj0gflN0eWxlQ2hh
bmdlTWFzazsgfQorICAgIHZvaWQgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCkgeyBjbGVhclN0eWxl
SW52YWxpZGF0aW9uKCk7IH0KIAogICAgIGJvb2wgaXNMaW5rKCkgY29uc3QgeyByZXR1cm4gZ2V0
RmxhZyhJc0xpbmtGbGFnKTsgfQogICAgIHZvaWQgc2V0SXNMaW5rKGJvb2wgZmxhZykgeyBzZXRG
bGFnKGZsYWcsIElzTGlua0ZsYWcpOyB9CkBAIC01OTcsOCArNTg1LDkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICAvLyBUaGVzZSBiaXRzIGFyZSB1c2VkIGJ5IGRlcml2ZWQgY2xhc3NlcywgcHVsbGVk
IHVwIGhlcmUgc28gdGhleSBjYW4KICAgICAgICAgLy8gYmUgc3RvcmVkIGluIHRoZSBzYW1lIG1l
bW9yeSB3b3JkIGFzIHRoZSBOb2RlIGJpdHMgYWJvdmUuCiAgICAgICAgIElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWRGbGFnID0gMSA8PCAxMywgLy8gRWxlbWVudAotCi0gICAgICAgIFN0eWxlQ2hh
bmdlTWFzayA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQgfCAxIDw8IChub2RlU3R5bGVDaGFu
Z2VTaGlmdCArIDEpIHwgMSA8PCAobm9kZVN0eWxlQ2hhbmdlU2hpZnQgKyAyKSwKKyAgICAgICAg
U3R5bGVJbnZhbGlkYXRpb25TY29wZVNoaWZ0ID0gMTQsCisgICAgICAgIFN0eWxlSW52YWxpZGF0
aW9uU2NvcGVNYXNrID0gMyA8PCBTdHlsZUludmFsaWRhdGlvblNjb3BlU2hpZnQsCisgICAgICAg
IFN0eWxlSW52YWxpZGF0aW9uTW9kZUZsYWcgPSAxIDw8IDE2LAogICAgICAgICBJc0VkaXRpbmdU
ZXh0T3JVbmRlZmluZWRDdXN0b21FbGVtZW50RmxhZyA9IDEgPDwgMTcsCiAgICAgICAgIEhhc0Zv
Y3VzV2l0aGluID0gMSA8PCAxOCwKICAgICAgICAgSGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXNG
bGFnID0gMSA8PCAxOSwKQEAgLTY1OSw3ICs2NDgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lk
IHNldFRyZWVTY29wZShUcmVlU2NvcGUmIHNjb3BlKSB7IG1fdHJlZVNjb3BlID0gJnNjb3BlOyB9
CiAKLSAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKSB7
IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VU
eXBlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGUoU3R5bGU6OkludmFsaWRhdGlvblNjb3Bl
LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSA9IFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlOjpOb3Jt
YWwpOwogICAgIHZvaWQgdXBkYXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKTsKIAogICAgIFJl
ZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8Tm9kZU9yU3Ry
aW5nPiYmLCBFeGNlcHRpb25Db2RlJik7CkBAIC02ODIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+Piog
bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7CiAgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwogCisg
ICAgdm9pZCBhZGp1c3RTdHlsZUludmFsaWRhdGlvbihTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGUs
IFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlKTsKKyAgICB2b2lkIGNsZWFyU3R5bGVJbnZhbGlkYXRp
b24oKTsKKwogICAgIGludCBtX3JlZkNvdW50OwogICAgIG11dGFibGUgdWludDMyX3QgbV9ub2Rl
RmxhZ3M7CiAKQEAgLTc3Myw2ICs3NjUsMjIgQEAgaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6
OnBhcmVudE5vZGVHdQogICAgIHJldHVybiBwYXJlbnROb2RlKCk7CiB9CiAKK2lubGluZSBTdHls
ZTo6SW52YWxpZGF0aW9uU2NvcGUgTm9kZTo6c3R5bGVJbnZhbGlkYXRpb25TY29wZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZT4oKG1f
bm9kZUZsYWdzICYgU3R5bGVJbnZhbGlkYXRpb25TY29wZU1hc2spID4+IFN0eWxlSW52YWxpZGF0
aW9uU2NvcGVTaGlmdCk7Cit9CisKK2lubGluZSBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSBOb2Rl
OjpzdHlsZUludmFsaWRhdGlvbk1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHlsZTo6SW52YWxpZGF0aW9uTW9kZT4oZ2V0RmxhZyhTdHlsZUludmFsaWRhdGlvbk1vZGVG
bGFnKSk7Cit9CisKK2lubGluZSB2b2lkIE5vZGU6OmNsZWFyU3R5bGVJbnZhbGlkYXRpb24oKQor
eworICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZUludmFsaWRhdGlvblNjb3BlTWFzazsKKyAgICBj
bGVhckZsYWcoU3R5bGVJbnZhbGlkYXRpb25Nb2RlRmxhZyk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDcgKzE1Myw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEUKICAg
ICAgICAgLS1tX3JlcXVpcmVkQ291bnQ7CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0b24p
IHsKLSAgICAgICAgYnV0dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGJ1dHRv
bi0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAobV9jaGVja2VkQnV0
dG9uID09IGJ1dHRvbikgewogICAgICAgICAgICAgbV9jaGVja2VkQnV0dG9uID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CkBAIC0xNzYs
NyArMTc2LDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpzZXROZWVkc1N0eWxlUmVjYQogewog
ICAgIGZvciAoYXV0byYgYnV0dG9uIDogbV9tZW1iZXJzKSB7CiAgICAgICAgIEFTU0VSVChidXR0
b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgICAgIGJ1dHRvbi0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIwNzQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDE0ICsxMTgsOCBAQCBib29sIFNoYWRvd1Jvb3Q6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5
CiAKIHZvaWQgU2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKGJvb2wgdmFsdWUp
CiB7Ci0gICAgaWYgKGlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1
ZSAhPSBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSkgewotICAgICAgICBtX3Jlc2V0U3R5bGVJbmhl
cml0YW5jZSA9IHZhbHVlOwotICAgICAgICBpZiAoaG9zdCgpKQotICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOwotICAgIH0KKyAgICAvLyBJZiB0aGlzIHdhcyBldmVyIHVzZWQgZHlu
YW1pY2FsbHkgY2hpbGQgc3R5bGVzIHdvdWxkIG5lZWQgdG8gYmUgaW52YWxpZGF0ZWQgaGVyZS4K
KyAgICBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA9IHZhbHVlOwogfQogCiBSZWY8Tm9kZT4gU2hh
ZG93Um9vdDo6Y2xvbmVOb2RlSW50ZXJuYWwoRG9jdW1lbnQmLCBDbG9uaW5nT3BlcmF0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgU2xvdEFzc2lnbm1lbnQ6OmFkZFNsb3RFbGVtZW50QnlO
YW0KICNlbmRpZgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGEgdGFy
Z2V0ZWQgcmVjb25zdHJ1Y3Rpb24uCi0gICAgc2hhZG93Um9vdC5ob3N0KCktPnNldE5lZWRzU3R5
bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBzaGFkb3dSb290Lmhvc3QoKS0+
aW52YWxpZGF0ZVJlbmRlcmVycygpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzbG90TmFt
ZSA9IHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKG5hbWUpOwogICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9zbG90cy5hZGQoc2xvdE5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxTbG90SW5mbz4oKSk7CkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1lbnRC
eQogI2VuZGlmCiAKICAgICBpZiAoYXV0byogaG9zdCA9IHNoYWRvd1Jvb3QuaG9zdCgpKSAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYSB0YXJnZXRlZCByZWNvbnN0cnVjdGlvbi4K
LSAgICAgICAgaG9zdC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUp
OworICAgICAgICBob3N0LT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICBhdXRvIGl0ID0g
bV9zbG90cy5maW5kKHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKG5hbWUpKTsKICAgICBSRUxF
QVNFX0FTU0VSVChpdCAhPSBtX3Nsb3RzLmVuZCgpKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lk
IFNsb3RBc3NpZ25tZW50OjpkaWRDaGFuZ2VTbG90KGNvbnN0CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChjaGFuZ2VUeXBlID09IENoYW5nZVR5cGU6OkRpcmVjdENoaWxkKSB7Ci0gICAgICAg
IHNoYWRvd1Jvb3QuaG9zdCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVy
VHJlZSk7CisgICAgICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5pbnZhbGlkYXRlUmVuZGVyZXJzKCk7
CiAgICAgICAgIG1fc2xvdEFzc2lnbm1lbnRzSXNWYWxpZCA9IGZhbHNlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksNyArMTU5LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbgog
ICAgICAgICBzdHlsZUF0dHJpYnV0ZUNoYW5nZWQobmV3VmFsdWUsIHJlYXNvbik7CiAgICAgZWxz
ZSBpZiAoaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSkpIHsKICAgICAgICAgZWxlbWVudERh
dGEoKS0+c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KHRydWUpOwotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICAgICAgaW52YWxp
ZGF0ZVN0eWxlKCk7CiAgICAgfQogCiAgICAgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChuYW1l
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHJlYXNvbik7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBT
dHlsZWRFbGVtZW50OjpzdHlsZUF0dHJpYnV0ZUNoYW5nZQogCiAgICAgZWxlbWVudERhdGEoKS0+
c2V0U3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKTsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHlsZSgpOwogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCAq
dGhpcyk7CiB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmludmFs
aWRhdGVTdHlsZUF0dHJpCiAgICAgICAgIGRvY3VtZW50KCkuc2V0SGFzRWxlbWVudFVzaW5nU3R5
bGVCYXNlZEVkaXRhYmlsaXR5KCk7CiAKICAgICBlbGVtZW50RGF0YSgpLT5zZXRTdHlsZUF0dHJp
YnV0ZUlzRGlydHkodHJ1ZSk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNo
YW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6
aW5saW5lU3R5bGVDaGFuZ2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDIwNzQw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIx
LDcgKzIyMSw3IEBAIFJlZjxUZXh0PiBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG8KIHZv
aWQgVGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UodW5zaWduZWQgb2Zmc2V0
T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVwbGFjZWREYXRhKQogewogICAgIEFT
U0VSVChwYXJlbnROb2RlKCkpOwotICAgIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBSZWNvbnN0
cnVjdFJlbmRlclRyZWUpCisgICAgaWYgKHN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBTdHls
ZTo6SW52YWxpZGF0aW9uU2NvcGU6OlJlbmRlcmVycykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byB0ZXh0VXBkYXRlID0gc3RkOjptYWtlX3VuaXF1ZTxTdHlsZTo6VXBkYXRlPihkb2N1bWVu
dCgpKTsKQEAgLTIzNCw3ICsyMzQsNiBAQCB2b2lkIFRleHQ6OnVwZGF0ZVJlbmRlcmVyQWZ0ZXJD
b250ZW50Q2hhCiAgICAgICAgIHJlbmRlcmVyLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhKCksIG9m
ZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKLQogI2lmIEVO
QUJMRShUUkVFX0RFQlVHR0lORykKIHZvaWQgVGV4dDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciog
YnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGbwogICAgICAgICByZXR1
cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4o
bV9kb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkpCi0gICAgICAgICAg
ICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtODIsNyArODIsNyBAQCB2
b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihtX2Rv
Y3VtZW50KSkgewogICAgICAgICBpZiAobGlua0hhc2hGb3JFbGVtZW50KG1fZG9jdW1lbnQsIGVs
ZW1lbnQpID09IGxpbmtIYXNoKQotICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4Myw3ICsxOTgzLDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdAogICAgIC8vIFJlbmRlclRoZW1lOjppc0Zv
Y3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAgICAgLy8g
dXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3NlLgogICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKLSAg
ICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBlbGVtZW50LT5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICAgICAgcmVu
ZGVyZXItPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlciwgQ29udHJvbFN0YXRlczo6Rm9j
dXNTdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1
LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzU3RlcHBhYgogCiB2b2lkIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKLSAg
ICBlbGVtZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQoKS5pbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIERlY2ltYWwgQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBEZWNpbWFsJiBk
ZWZhdWx0VmFsdWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIEZpbGVJbnB1dFR5
cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGVhciB0
aGUgZmlsZSBsaXN0LCBvciByZXBsYWNlIGl0IHdpdGggYSBuZXcgZW1wdHkgb25lIGhlcmU/IFRo
aXMgaXMgb2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQgdGhyb3VnaCBjdXN0b20gcHJvcGVydGll
cy4KICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIG1faWNvbiA9IG51bGxwdHI7Ci0gICAg
ZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBGaWxlSW5wdXRU
eXBlOjpjcmVhdGVGaWxlTGlzdChjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIGZp
bGVzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBIVE1MQW5j
aG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBib29sIHdhc0xpbmsgPSBpc0xp
bmsoKTsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGli
aXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3YXNMaW5rICE9IGlzTGluaygpKQotICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoaXNMaW5rKCkpIHsKICAgICAgICAgICAgIFN0cmlu
ZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUpOwog
ICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAmJiBkb2N1
bWVudCgpLmZyYW1lKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgSFRNTEJv
ZHlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNSw3ICsyMzUsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVu
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQogICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBS
ZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52
YXMKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2Up
OworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAjZW5kaWYKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwpAQCAtMjUwLDcgKzI1MCw3IEBA
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgICAg
ICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3Rh
dGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRl
ZCBmb3IgdGhlIENhbnZhcwotICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKQEAgLTY2Miw3ICs2NjIsNyBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKQogICAgICAgICAvLyBSZWNhbGN1bGF0
ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQu
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+c2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPih0aGlzKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAjZW5k
aWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OTcsNyArODk3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9u
YWxpdHlJZgogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50VG9BZGp1c3Qg
OiBlbGVtZW50TGluZWFnZSh0aGlzKSkgewogICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJl
Y3Rpb25hbGl0eShlbGVtZW50VG9BZGp1c3QpKSB7Ci0gICAgICAgICAgICBlbGVtZW50VG9BZGp1
c3Quc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZWxlbWVudFRvQWRqdXN0Lmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KQEAgLTkwOSw3ICs5MDksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVB
bmRBZGp1c3REaXJlCiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9u
YWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOwogICAgIHNldEhhc0RpckF1dG9G
bGFnUmVjdXJzaXZlbHkodGhpcywgdHJ1ZSwgc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7
CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSAh
PSB0ZXh0RGlyZWN0aW9uKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudDo6YWRq
dXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRyZW5DaGFuZ2VkKEVsZW1lbnQqIGJl
Zm9yZUNoYW5nZSwgQ2hpbGRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmFkZEludmFs
aWREZXNjCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pbnZhbGlkRGVzY2VuZGFudHMuY29u
dGFpbnMoJmludmFsaWRGb3JtQ29udHJvbEVsZW1lbnQpLCAiVXBkYXRpbmcgdGhlIGZpZWxkc2V0
IG9uIHZhbGlkaXR5IGNoYW5nZSBpcyBub3QgYW4gZWZmaWNpZW50IG9wZXJhdGlvbiwgaXQgc2hv
dWxkIG9ubHkgYmUgZG9uZSB3aGVuIG5lY2Vzc2FyeS4iKTsKIAogICAgIGlmIChtX2ludmFsaWRE
ZXNjZW5kYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIG1faW52YWxpZERlc2NlbmRh
bnRzLmFkZCgmaW52YWxpZEZvcm1Db250cm9sRWxlbWVudCk7CiB9CiAKQEAgLTIyNSw3ICsyMjUs
NyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlbW92ZUludmFsaWRECiAKICAgICBtX2lu
dmFsaWREZXNjZW5kYW50cy5yZW1vdmUoJmZvcm1Db250cm9sRWxlbWVudCk7CiAgICAgaWYgKG1f
aW52YWxpZERlc2NlbmRhbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkQXR0CiB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0
ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CkBA
IC0xODIsNyArMTgyLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0
YQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQo
KQogewogICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKLSAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpCkBAIC0xOTAs
NyArMTkwLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0dAogICAg
IHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgLy8gU3R5bGUgcmVjYWxjdWxhdGlvbiBpcyBuZWVkZWQg
YmVjYXVzZSBzdHlsZSBzZWxlY3RvcnMgbWF5IGluY2x1ZGUKICAgICAvLyA6cmVxdWlyZWQgYW5k
IDpvcHRpb25hbCBwc2V1ZG8tY2xhc3Nlcy4KLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRB
dXRvZm9jdXMoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKQEAgLTQ0NSw3ICs0NDUs
NyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsCiAgICAgbV93aWxs
VmFsaWRhdGUgPSBuZXdXaWxsVmFsaWRhdGU7CiAKICAgICB1cGRhdGVWYWxpZGl0eSgpOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CiAKICAgICBpZiAoIW1fd2lsbFZhbGlkYXRlICYmICF3YXNWYWxpZCkgewogICAgICAgICByZW1v
dmVJbnZhbGlkRWxlbWVudFRvQW5jZXN0b3JGcm9tSW5zZXJ0aW9uUG9pbnQoKnRoaXMsIHBhcmVu
dE5vZGUoKSk7CkBAIC01NTUsNyArNTU1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojp1cGRhdGVWYWxpZAogCiAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiBtX2lzVmFsaWQgIT0gd2Fz
VmFsaWQpIHsKICAgICAgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNo
IGFzIDp2YWxpZCA6aW52YWxpZC4KLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgaWYgKCFtX2lzVmFs
aWQpIHsKICAgICAgICAgICAgIGFkZEludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNlcnRp
b25Qb2ludCgqdGhpcywgcGFyZW50Tm9kZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDcgKzU5MSw3IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW4KICAgICAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplKTsKICAgICAgICAgaWYgKGNvbnRyb2wuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkp
IHsKICAgICAgICAgICAgIGlmICghbV9kZWZhdWx0QnV0dG9uKQotICAgICAgICAgICAgICAgIGNv
bnRyb2wuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIGNvbnRyb2wuaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHJlc2V0RGVmYXVsdEJ1dHRvbigpOwogICAgICAgICB9CkBAIC02MTksNyArNjE5LDcgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzcwogICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxjb25zdCBFbGVtZW50Jj4oZm9ybUNvbnRyb2xFbGVtZW50KS5tYXRjaGVzSW52YWxp
ZFBzZXVkb0NsYXNzKCkpOwogCiAgICAgaWYgKG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJv
bHMuaXNFbXB0eSgpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBtX2ludmFsaWRBc3NvY2lhdGVkRm9ybUNv
bnRyb2xzLmFkZCgmZm9ybUNvbnRyb2xFbGVtZW50KTsKIH0KIApAQCAtNjI3LDcgKzYyNyw3IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbnZhbGlkQXNzb2MKIHsKICAgICBpZiAobV9p
bnZhbGlkQXNzb2NpYXRlZEZvcm1Db250cm9scy5yZW1vdmUoJmZvcm1Db250cm9sRWxlbWVudCkp
IHsKICAgICAgICAgaWYgKG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbHMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtNzM3LDkgKzczNyw5IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldERlZmF1bHRCdXR0b24KICAgICBkZWZhdWx0QnV0dG9u
KCk7CiAgICAgaWYgKG1fZGVmYXVsdEJ1dHRvbiAhPSBvbGREZWZhdWx0KSB7CiAgICAgICAgIGlm
IChvbGREZWZhdWx0KQotICAgICAgICAgICAgb2xkRGVmYXVsdC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgb2xkRGVmYXVsdC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogICAgICAgICBpZiAobV9kZWZhdWx0QnV0dG9uKQotICAgICAgICAgICAgbV9kZWZhdWx0QnV0
dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBtX2RlZmF1bHRCdXR0b24t
PmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMDc0MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmZp
bmlzaGVkSW5zZXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQotICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAg
IGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICBzZXROYW1lQW5kT3BlblVSTCgpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxNSArMTIyLDE1IEBAIFNWR0RvY3VtZW50
KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhT
dHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKK3ZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojpz
Y2hlZHVsZUludmFsaWRhdGVTdHlsZUFuZExheWVycygpCiB7CiAgICAgaWYgKFN0eWxlOjpwb3N0
UmVzb2x1dGlvbkNhbGxiYWNrc0FyZVN1c3BlbmRlZCgpKSB7CiAgICAgICAgIFJlZlB0cjxIVE1M
RnJhbWVPd25lckVsZW1lbnQ+IGVsZW1lbnQgPSB0aGlzOwotICAgICAgICBTdHlsZTo6cXVldWVQ
b3N0UmVzb2x1dGlvbkNhbGxiYWNrKFtlbGVtZW50LCBjaGFuZ2VUeXBlXXsKLSAgICAgICAgICAg
IGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoY2hhbmdlVHlwZSk7CisgICAgICAgIFN0eWxl
OjpxdWV1ZVBvc3RSZXNvbHV0aW9uQ2FsbGJhY2soW2VsZW1lbnRdIHsKKyAgICAgICAgICAgIGVs
ZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICB9KTsKICAgICB9IGVs
c2UKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhjaGFuZ2VUeXBlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiB9CiAKIGJvb2wgU3ViZnJhbWVMb2FkaW5nRGlzYWJs
ZXI6OmNhbkxvYWRGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQmIG93bmVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lvbiAyMDc0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIFNhbmRib3hGbGFncyBz
YW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hGbGFnczsgfQogCi0gICAgdm9p
ZCBzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlID0gRnVsbFN0eWxl
Q2hhbmdlKTsKKyAgICB2b2lkIHNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAK
IHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fcm93TGVuZ3RocyA9IG5ld0xlbmd0
aEFycmF5KHZhbHVlLnN0cmluZygpLCBtX3RvdGFsUm93cyk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogV291bGQgYmUgbmljZSB0byBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSBtX3Jvd0xlbmd0aHMg
ZGlkIG5vdCBjaGFuZ2UuCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZQogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAg
ICAgICBtX2NvbExlbmd0aHMgPSBuZXdMZW5ndGhBcnJheSh2YWx1ZS5zdHJpbmcoKSwgbV90b3Rh
bENvbHMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gb3B0aW1pemUg
dGhlIGNhc2Ugd2hlcmUgbV9jb2xMZW5ndGhzIGRpZCBub3QgY2hhbmdlLgotICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDIsMTAgKzIw
Miw4IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGEKIAogYm9vbCBI
VE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZSkKIHsKLSAg
ICBpZiAobmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkpIHsKKyAgICBpZiAobmVlZHNT
dHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRz
TGF5b3V0KCk7Ci0gICAgICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgaW5saW5lIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6cnVuUG9zdFR5cAogI2VuZGlmCiAKICAgICBpZiAocmVuZGVy
ZXIoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUp
OworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICBpZiAoZG9jdW1lbnQoKS5m
b2N1c2VkRWxlbWVudCgpID09IHRoaXMpCiAgICAgICAgIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShT
ZWxlY3Rpb25SZXN0b3JhdGlvbk1vZGU6OlJlc3RvcmUsIFNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbCk7CkBAIC02OTUsMTQgKzY5NSwxNCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvCiAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZXRDaGFuZ2VkIGlmIHRo
ZSBmb3JtIGlzIGxvb2tpbmcgYXQgdGhlIGRlZmF1bHQgdmFsdWUgcmlnaHQgbm93LgogICAgICAg
ICBpZiAoIWhhc0RpcnR5VmFsdWUoKSkgewogICAgICAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJW
aXNpYmlsaXR5KCk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgc2V0
Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgICAgIHVwZGF0ZVZh
bGlkaXR5KCk7CiAgICAgICAgIG1fdmFsdWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0ZXJQYXJzaW5n
ID0gIW1fcGFyc2luZ0luUHJvZ3Jlc3M7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGNoZWNrZWRB
dHRyKSB7CiAgICAgICAgIGlmIChtX2lucHV0VHlwZS0+aXNDaGVja2FibGUoKSkKLSAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKIAogICAgICAgICAvLyBBbm90aGVyIHJhZGlvIGJ1dHRvbiBpbiB0aGUgc2Ft
ZSBncm91cCBtaWdodCBiZSBjaGVja2VkIGJ5IHN0YXRlCiAgICAgICAgIC8vIHJlc3RvcmUuIFdl
IHNob3VsZG4ndCBjYWxsIHNldENoZWNrZWQoKSBldmVuIGlmIHRoaXMgaGFzIHRoZSBjaGVja2Vk
CkBAIC03MzEsOSArNzMxLDkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjbwogICAgICAgICBtX21heFJlc3VsdHMgPSAhdmFsdWUuaXNOdWxsKCkgPyBzdGQ6Om1pbih2
YWx1ZS50b0ludCgpLCBtYXhTYXZlZFJlc3VsdHMpIDogLTE7CiAgICAgICAgIG1faW5wdXRUeXBl
LT5tYXhSZXN1bHRzQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBh
dXRvc2F2ZUF0dHIpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBp
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGluY3Jl
bWVudGFsQXR0cikgewotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbWluQXR0
cikgewogICAgICAgICBtX2lucHV0VHlwZS0+bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAg
ICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CkBAIC04OTUsNyArODk1LDcgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbgogCiAgICAgbV9yZWZsZWN0c0NoZWNrZWRBdHRy
aWJ1dGUgPSBmYWxzZTsKICAgICBtX2lzQ2hlY2tlZCA9IG5vd0NoZWNrZWQ7Ci0gICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAg
IGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCiAg
ICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0aGlzKTsKQEAgLTkyMSw3ICs5MjEs
NyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAgICAgICAgIGRp
c3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIH0KIAotICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIG5ld1ZhbHVlKQpAQCAtOTMx
LDcgKzkzMSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZSgKIAog
ICAgIG1faXNJbmRldGVybWluYXRlID0gbmV3VmFsdWU7CiAKLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgIHJl
bmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVz
OjpDaGVja2VkU3RhdGUpOwpAQCAtMTMzMCw3ICsxMzMwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRBdXRvRmlsbGVkKGJvbwogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzQXV0b0Zp
bGxlZCA9IGF1dG9GaWxsZWQ7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRT
aG93QXV0b0ZpbGxCdXR0b24oQXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSkK
QEAgLTE3ODYsNyArMTc4Niw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3RoQXR0
cmlidXQKICAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOwogCiAgICAgLy8gRklYTUU6IERv
IHdlIHJlYWxseSBuZWVkIHRvIGRvIHRoaXMgaWYgdGhlIGVmZmVjdGl2ZSBtYXhMZW5ndGggaGFz
IG5vdCBjaGFuZ2VkPwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgdXBkYXRlVmFsaWRpdHkoKTsKIH0KIApAQCAtMTgwMiw3
ICsxODAyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjptaW5MZW5ndGhBdHRyaWJ1dAogICAg
ICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5
IG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgZWZmZWN0aXZlIG1pbkxlbmd0aCBoYXMgbm90IGNoYW5n
ZWQ/Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsx
NTcsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgICAg
IGJvb2wgd2FzTGluayA9IGlzTGluaygpOwogICAgICAgICBzZXRJc0xpbmsoIXZhbHVlLmlzTnVs
bCgpICYmICFzaG91bGRQcm9oaWJpdExpbmtzKHRoaXMpKTsKICAgICAgICAgaWYgKHdhc0xpbmsg
IT0gaXNMaW5rKCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHByb2Nlc3MoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU3Niw3ICs0NTc2LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlbmRlcgogICAgIExPRyhNZWRpYSwgIkhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQoJXApIiwgdGhp
cyk7CiAKICAgICAvLyBLaWNrIG9mZiBhIGZha2UgcmVjYWxjU3R5bGUgdGhhdCB3aWxsIHVwZGF0
ZSB0aGUgY29tcG9zaXRpbmcgdHJlZS4KLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRp
Y1N0eWxlQ2hhbmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKEFWRk9VTkRBVElPTikKQEAgLTU1OTAsNyArNTU5MCw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWUKICAgICB9CiAgICAgCiAg
ICAgbV9wbGF5ZXItPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHBsYXRmb3JtTGF5ZXIsIGNvbXBs
ZXRpb25IYW5kbGVyKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFyVXNlRmFsbGJhY2tDb250ZW50KCk7
Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGlu
dmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0KIAogc3RhdGljIHZvaWQgbWFwRGF0YVBhcmFtVG9TcmMo
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykK
QEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5n
ZWQoCiAgICAgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAh
dXNlRmFsbGJhY2tDb250ZW50KCkpIHsKICAgICAgICAgc2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1
ZSk7Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogICAgIH0KICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoY2hhbmdlKTsKIH0KQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjpyZW5kZXJGYWxsYmFja0NvCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJU
cmVlKTsKKyAgICBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7CiAKICAgICAvLyBCZWZvcmUgd2UgZ2l2
ZSB1cCBhbmQgdXNlIGZhbGxiYWNrIGNvbnRlbnQsIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEg
TUlNRSB0eXBlIGlzc3VlLgogICAgIGF1dG8qIGxvYWRlciA9IGltYWdlTG9hZGVyKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZQogICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKIAogICAgIGlmIChu
YW1lID09IGRpc2FibGVkQXR0cikKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTE9wdEdyb3Vw
RWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMiAr
MTc0LDEyIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAg
ICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CiAgICAgICAgIG1fZGlzYWJsZWQgPSAh
dmFsdWUuaXNOdWxsKCk7CiAgICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7
Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5k
ZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5h
YmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxlY3RlZEF0
dHIpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRj
aCB3aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KICAgICAgICAgLy8gVGhlIHNwZWNp
ZmljYXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5nIHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUgb3IK
QEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0
YXRlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTZWxlY3RlZCA9IHNlbGVjdGVkOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CiAKICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVu
dCgpKQogICAgICAgICBzZWxlY3QtPmludmFsaWRhdGVTZWxlY3RlZEl0ZW1zKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTCiAgICAgcm9vdC0+c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOwogICAg
IGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1lbnQoKnJvb3QpKSB7CiAg
ICAgICAgIHNldERpc3BsYXlTdGF0ZShEaXNwbGF5aW5nUGx1Z2luUmVwbGFjZW1lbnQpOwotICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAg
IGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c2V0RGlzcGxheVMKICAgICBpZiAoc3RhdGUgPT0gUmVzdGFydGluZ1dpdGhQZW5kaW5nTW91c2VD
bGljayB8fCBzdGF0ZSA9PSBSZXN0YXJ0aW5nKSB7CiAgICAgICAgIG1faXNSZXN0YXJ0ZWRQbHVn
aW4gPSB0cnVlOwogICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24gPSBOZXZlclNuYXBzaG90Owot
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIGlmIChkaXNwbGF5U3RhdGUo
KSA9PSBEaXNwbGF5aW5nU25hcHNob3QpCiAgICAgICAgICAgICBtX3JlbW92ZVNuYXBzaG90VGlt
ZXIuc3RhcnRPbmVTaG90KHJlbW92ZVNuYXBzaG90VGltZXJEZWxheSk7CiAgICAgfQpAQCAtMjM5
LDEzICsyMzksMTMgQEAgYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGlsZFNob3VsZAog
Ym9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5n
ZSBjaGFuZ2UpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHN0eWxlIHJlY2FsY3Mgc2NoZWR1bGVkIGJ5
IGEgY2hpbGQgc2hhZG93IHRyZWUgZG9uJ3QgdHJpZ2dlciByZWNvbnN0cnVjdGlvbiBhbmQgY2F1
c2UgZmxpY2tlci4KLSAgICBpZiAoY2hhbmdlID09IFN0eWxlOjpOb0NoYW5nZSAmJiBzdHlsZUNo
YW5nZVR5cGUoKSA9PSBOb1N0eWxlQ2hhbmdlKQorICAgIGlmIChjaGFuZ2UgPT0gU3R5bGU6Ok5v
Q2hhbmdlICYmIHN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBTdHlsZTo6SW52YWxpZGF0aW9u
U2NvcGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFRoZXJl
IHNob3Vkbid0IGJlIG5lZWQgdG8gZm9yY2UgcmVuZGVyIHRyZWUgcmVjb25zdHJ1Y3Rpb24gaGVy
ZS4KICAgICAvLyBJdCBpcyBvbmx5IGRvbmUgYmVjYXVzZSBsb2FkaW5nIGFuZCBsb2FkIGV2ZW50
IGRpc3BhdGNoaW5nIGlzIHRpZWQgdG8gcmVuZGVyIHRyZWUgY29uc3RydWN0aW9uLgogICAgIGlm
ICghdXNlRmFsbGJhY2tDb250ZW50KCkgJiYgbmVlZHNXaWRnZXRVcGRhdGUoKSAmJiByZW5kZXJl
cigpICYmICFpc0ltYWdlVHlwZSgpICYmIChkaXNwbGF5U3RhdGUoKSAhPSBEaXNwbGF5aW5nU25h
cHNob3QpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJl
ZSk7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNo
UGFyc2kKIAogICAgIHNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwogICAgIGlmIChpbkRvY3Vt
ZW50KCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRp
ZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKQEAgLTMzMiw3ICszMzIs
NyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnByZXBhcmVGb3JECiAKIHZvaWQgSFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lvbigpCiB7Ci0g
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGludmFs
aWRhdGVSZW5kZXJlcnMoKTsKIAogICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZXN1bWVGcm9tRG9j
dW1lbnRTdXNwZW5zaW9uKCk7CiB9CkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpyZW1vdmVTbmFwcwogewogICAgIG1fc25hcHNob3RJbWFnZSA9IG51bGxw
dHI7CiAgICAgbV9pc1Jlc3RhcnRlZFBsdWdpbiA9IGZhbHNlOwotICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVy
cygpOwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50KCk7
CiB9CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0
YXJ0U25hcAogICAgICAgICByZXR1cm47CiAKICAgICBzZXREaXNwbGF5U3RhdGUoUmVzdGFydGlu
Zyk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAg
IGludmFsaWRhdGVSZW5kZXJlcnMoKTsKIH0KIAogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpkaXNwYXRjaFBlbmRpbmdNb3VzZUNsaWNrKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByb2dyZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDcgKzE0MSw3IEBAIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkRWxlbWVudFN0YXQKICAg
ICAgICAgYm9vbCB3YXNEZXRlcm1pbmF0ZSA9IHJlbmRlci0+aXNEZXRlcm1pbmF0ZSgpOwogICAg
ICAgICByZW5kZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgICAgIGlmICh3YXNEZXRlcm1p
bmF0ZSAhPSBpc0RldGVybWluYXRlKCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgIHVwZGF0
ZVZhbGlkaXR5KCk7CiAgICAgICAgIGlmIChtX3NpemUgIT0gb2xkU2l6ZSkgewotICAgICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgICAgICAg
ICAgaW52YWxpZGF0ZVJlbmRlcmVycygpOwogICAgICAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1z
KCk7CiAgICAgICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOwogICAgICAgICB9CkBAIC03NDQsNyAr
NzQ0LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZQogICAgIC8v
IE1hbnVhbCBzZWxlY3Rpb24gYW5jaG9yIGlzIHJlc2V0IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBz
ZWxlY3QgcHJvZ3JhbW1hdGljYWxseS4KICAgICBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
ID0gLTE7CiAgICAgc2V0T3B0aW9uc0NoYW5nZWRPblJlbmRlcmVyKCk7Ci0gICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAo
IWluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24g
PSBjYWNoZWRIVE1MQ29sbGVjdGlvbihTZWxlY3RPcHRpb25zKSkKICAgICAgICAgICAgIGNvbGxl
Y3Rpb24tPmludmFsaWRhdGVDYWNoZShkb2N1bWVudCgpKTsKQEAgLTEwMjIsNyArMTAyMiw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHQKICAgICBtX211bHRpcGxl
ID0gIXZhbHVlLmlzTnVsbCgpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgaWYgKG9sZFVz
ZXNNZW51TGlzdCAhPSB1c2VzTWVudUxpc3QoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyZXJzKCk7
CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlz
dCYgbGlzdCwgYm9vbCkKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnJlc2V0KCkKICAgICAgICAgZmlyc3RPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7
CiAKICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKLSAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIHVwZGF0ZVZh
bGlkaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9s
ZGVyLmgiCiAjaW5jbHVkZSAiR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uLmgiCkBAIC0yNjUs
MjcgKzI2NiwyOCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kCiAg
ICAgcm93LT5yZW1vdmUoZWMpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNUYWJsZUNlbGxB
bmNlc3RvcihOb2RlKiBuKQorc3RhdGljIGlubGluZSBib29sIGlzVGFibGVDZWxsQW5jZXN0b3Io
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0aGVh
ZFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwKLSAgICAgICAgICAgbi0+aGFzVGFn
TmFtZSh0Zm9vdFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0clRhZykgfHwKLSAgICAgICAgICAgbi0+
aGFzVGFnTmFtZSh0aFRhZyk7CisgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZSh0aGVhZFRh
ZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRib2R5VGFnKQorICAgICAgICB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUodGZvb3RUYWcpCisgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFt
ZSh0clRhZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKTsKIH0KIAotc3Rh
dGljIGJvb2wgc2V0VGFibGVDZWxsc0NoYW5nZWQoTm9kZSogbikKK3N0YXRpYyBib29sIHNldFRh
YmxlQ2VsbHNDaGFuZ2VkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG4pOwogICAg
IGJvb2wgY2VsbENoYW5nZWQgPSBmYWxzZTsKIAotICAgIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFn
KSkKKyAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRkVGFnKSkKICAgICAgICAgY2VsbENoYW5n
ZWQgPSB0cnVlOwotICAgIGVsc2UgaWYgKGlzVGFibGVDZWxsQW5jZXN0b3IobikpIHsKLSAgICAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IG4tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpCisgICAgZWxzZSBpZiAoaXNUYWJsZUNlbGxBbmNlc3RvcihlbGVt
ZW50KSkgeworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVu
dD4oZWxlbWVudCkpCiAgICAgICAgICAgICBjZWxsQ2hhbmdlZCB8PSBzZXRUYWJsZUNlbGxzQ2hh
bmdlZChjaGlsZCk7CiAgICAgfQogCiAgICAgaWYgKGNlbGxDaGFuZ2VkKQotICAgICAgIG4tPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAKICAgICByZXR1cm4gY2VsbENoYW5nZWQ7CiB9CkBAIC00MjIsMTAgKzQyNCwx
MCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAgICAgaWYgKGJv
cmRlcnNCZWZvcmUgIT0gY2VsbEJvcmRlcnMoKSB8fCBvbGRQYWRkaW5nICE9IG1fcGFkZGluZykg
ewogICAgICAgICBtX3NoYXJlZENlbGxTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGJvb2wgY2Vs
bENoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGZvciAoYXV0
byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqdGhpcykpCiAgICAgICAgICAgICBj
ZWxsQ2hhbmdlZCB8PSBzZXRUYWJsZUNlbGxzQ2hhbmdlZChjaGlsZCk7CiAgICAgICAgIGlmIChj
ZWxsQ2hhbmdlZCkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0
VmFsdWVDb21tb24KICAgICBzZXRJbm5lclRleHRWYWx1ZShtX3ZhbHVlKTsKICAgICBzZXRMYXN0
Q2hhbmdlV2FzTm90VXNlckVkaXQoKTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
KTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAK
ICAgICAvLyBTZXQgdGhlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIHRleHQgdmFsdWUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2
b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQCiAgICAgaWYgKHBsYWNlSG9s
ZGVyV2FzVmlzaWJsZSA9PSBtX2lzUGxhY2Vob2xkZXJWaXNpYmxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogfQogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rp
b25TdGFydChpbnQgc3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4Myw3ICs2ODMsNyBAQCBib29sIElucHV0VHlwZTo6c3RvcmVzVmFsdWVT
ZXBhcmF0ZUZyb21BCiB2b2lkIElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5p
dGl6ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvcikKIHsKICAgICBlbGVtZW50KCkuc2V0VmFsdWVJbnRlcm5hbChzYW5pdGl6ZWRW
YWx1ZSwgZXZlbnRCZWhhdmlvcik7Ci0gICAgZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGlmICgh
dmFsdWVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChldmVudEJlaGF2aW9y
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCShyZXZpc2lv
biAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIE51bWJlcklucHV0VHlwZTo6bWlu
T3JNYXhBdHRyaWJ1dGVDCiB7CiAgICAgSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5n
ZWQoKTsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwot
ICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxl
bWVudC5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw3ICs1NTAsNyBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nCiAgICAgZWxlbWVudCgpLnNl
dFZhbHVlRnJvbVJlbmRlcmVyKGlubmVyVGV4dCk7CiAgICAgZWxlbWVudCgpLnVwZGF0ZVBsYWNl
aG9sZGVyVmlzaWJpbGl0eSgpOwogICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgY2hhbmdlLgot
ICAgIGVsZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLmludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGRpZFNldFZhbHVlQnlVc2VyRWRpdCgpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAkocmV2aXNpb24g
MjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgTWF0aE1MRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QKICAgICAgICAgYm9vbCB3YXNMaW5rID0gaXNMaW5rKCk7CiAgICAgICAgIHNl
dElzTGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwog
ICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAg
ICB9IGVsc2UgaWYgKG5hbWUgPT0gcm93c3BhbkF0dHIpIHsKICAgICAgICAgaWYgKGlzPFJlbmRl
clRhYmxlQ2VsbD4ocmVuZGVyZXIoKSkgJiYgaGFzVGFnTmFtZShtdGRUYWcpKQogICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyZXIoKSkuY29sU3Bhbk9yUm93U3Bh
bkNoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxTZWxlY3RFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9N
YXRoTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBA
IHZvaWQgTWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWQKICAgICAgICAgUmVuZGVy
VHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKCptX3NlbGVjdGVkQ2hpbGQpOwogCiAgICAg
bV9zZWxlY3RlZENoaWxkID0gbmV3U2VsZWN0ZWRDaGlsZDsKLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIE1hdGhN
TFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJl
dmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgQW5pbWF0aW9u
QmFzZTo6c2V0TmVlZHNTdHlsZVJlY2FsYygKIHsKICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7CiAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBbmRMYXllcnMoKTsKIH0KIAogZG91YmxlIEFuaW1hdGlvbkJhc2U6OmR1cmF0aW9uKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFy
KFIKICAgICB9KTsKICAgICAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFu
eXRoaW5nIE9SIHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwotICAgIC8vIGRv
IGEgc2V0TmVlZHNTdHlsZVJlY2FsYygpIHdoZW4gc3VzcGVuZGVkKS4KKyAgICAvLyBkbyBhIGlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCiAgICAgUmVmUHRyPENv
bXBvc2l0ZUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLnRha2Uo
JnJlbmRlcmVyKTsKICAgICBBU1NFUlQoYW5pbWF0aW9uKTsKICAgICByZW5kZXJlci5zZXRJc0NT
U0FuaW1hdGluZyhmYWxzZSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgZG91YmxlIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdAogICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBjb21wb3NpdGVBbmltYXRpb24ua2V5LT5lbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgp
LnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKLSAgICAgICAg
ICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmZpcmVFdmUKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1fZWxlbWVu
dENoYW5nZXNUb0Rpc3BhdGNoKQotICAgICAgICBjaGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBjaGFuZ2UtPmludmFsaWRhdGVTdHlsZUFu
ZExheWVycygpOwogCiAgICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2guY2xlYXIoKTsKIApA
QCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNl
QW4KIAogICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJl
Q29tcG9zaXRlQW5pbWF0aW9uKCpyZW5kZXJlcik7CiAgICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlv
bi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICByZW5kZXJlci0+ZWxl
bWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAg
ICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnBhdXNlVHIKIAogICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5p
bWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpyZW5kZXJlcik7CiAgICAgaWYgKGNv
bXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5zaXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9w
ZXJ0eSksIHQpKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCktPnNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICByZW5kZXJlci0+ZWxlbWVudCgp
LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01OTAs
NyArNTkwLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpbwogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCk7CiAgICAgQVNTRVJUKCFlbGVt
ZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6
Tm90SW5QYWdlQ2FjaGUpOwogICAgIGlmIChlbGVtZW50KQotICAgICAgICBlbGVtZW50LT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgZWxlbWVudC0+
aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxl
cjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZp
c2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1h
Z2VDaGFuZ2VkKFdyYXBwZWRJbQogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAg
ICAgICAgICBpZiAoZWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgbV9uZWVkc1RvU2V0U2l6
ZUZvckFsdFRleHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgZWxlbWVu
dCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTg1LDcgKzY5ODUsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQogewogICAgIC8vIFdlIHVzZSB0
aGUgZW5jbG9zaW5nIGVsZW1lbnQgc28gdGhhdCB3ZSByZWNhbGN1bGF0ZSBzdHlsZSBmb3IgdGhl
IGFuY2VzdG9yIG9mIGFuIGFub255bW91cyBvYmplY3QuCiAgICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSBlbmNsb3NpbmdFbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBbmRMYXllcnMoKTsKICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQ5LDcgKzM1NDksNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExhCiAgICAgICAgIGNhc2UgUm9v
dExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewogICAgICAgICAgICAgLy8gVGhlIGxh
eWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25m
aWd1cmF0aW9uKCkKICAgICAgICAgICAgIC8vIGZvciB0aGUgZnJhbWUncyByZW5kZXJlciBpbiB0
aGUgcGFyZW50IGRvY3VtZW50LgotICAgICAgICAgICAgbV9yZW5kZXJWaWV3LmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCktPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHls
ZUNoYW5nZSk7CisgICAgICAgICAgICBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKS0+c2NoZWR1bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU3OCw3ICszNTc4LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYQogICAgICAgICAgICAgbV9yb290Q29udGVudExh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKICAgICAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50
KCkpCi0gICAgICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVk
dWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhQ2hyb21lQ2xpZW50OiB7CkBAIC0zNjM3LDcgKzM2
MzcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5SUZyYW1lCiAgICAgLy8g
Q29tcG9zaXRpbmcgYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJlbmRlcklGcmFtZTo6cmVxdWlyZXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCksIHNvCiAgICAgLy8gd2UgbmVlZCB0byBzY2hlZHVsZSBh
IHN0eWxlIHJlY2FsYyBpbiBvdXIgcGFyZW50IGRvY3VtZW50LgogICAgIGlmIChIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVy
RWxlbWVudCgpKQotICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJl
Y2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIG93bmVyRWxlbWVudC0+c2NoZWR1
bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ4OCwxMyArMTQ4OCwxNSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
dXBkYXRlRHJhZ1N0YXRlKGJvb2wgCiB7CiAgICAgYm9vbCB2YWx1ZUNoYW5nZWQgPSAoZHJhZ09u
ICE9IGlzRHJhZ2dpbmcoKSk7CiAgICAgc2V0SXNEcmFnZ2luZyhkcmFnT24pOwotICAgIGlmICh2
YWx1ZUNoYW5nZWQgJiYgbm9kZSgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgKGlz
PEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKCkpLmNoaWxkcmVu
QWZmZWN0ZWRCeURyYWcoKSkpKQotICAgICAgICBub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKIAogICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47
CisgICAgYXV0byYgcmVuZGVyRWxlbWVudCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlz
KTsKIAotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+
KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkpCisgICAgaWYgKHZhbHVlQ2hhbmdlZCAm
JiByZW5kZXJFbGVtZW50LmVsZW1lbnQoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8
IHJlbmRlckVsZW1lbnQuZWxlbWVudCgpLT5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKQorICAg
ICAgICByZW5kZXJFbGVtZW50LmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4o
cmVuZGVyRWxlbWVudCkpCiAgICAgICAgIGNoaWxkLnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlc0NhY2hlLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsx
MjEsNyBAQCB2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nCiAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlv
bihyZW5kZXJlciwgZmFsc2UpOwogCiAgICAgaWYgKHJlbmRlcmVyLmVsZW1lbnQoKSAmJiAhcmVu
ZGVyZXIuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmVuZGVyZXIuZWxlbWVu
dCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAg
cmVuZGVyZXIuZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKIH0KIAogdm9p
ZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRl
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTYgKzY1LDE2IEBAIHZvaWQgQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZh
bGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0hUTUwpIHsKLSAgICAgICAgbV9lbGVt
ZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVt
ZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxl
KCkuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LnNl
dE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50Lmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBt
X2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7CiAKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVs
ZW1lbnQ+KG1fZWxlbWVudCkuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNp
b24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTEgKzExNiwxMSBAQCB2b2lkIENsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aGFkb3dSb290ICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuaGFzU2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0
eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxl
UmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
KCk7CiAKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KG1fZWxlbWVudCkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOSAr
NjEsMTkgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3QoKSAmJiBydWxlU2V0cy5h
dXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKSB7Ci0gICAgICAgIG1f
ZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgIG1f
ZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5n
ZSk7CisgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogCiAgICAgLy8gVGhpcyBjb3Vs
ZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQgZGVzY2VuZGFudCBpbnZhbGlk
YXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi4KICAgICAvLyBIb3dldmVy
IHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUgYW5kIHRoaXMgaXMgcHJvYmFi
bHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1
cmVzLgogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlID0gcnVsZVNldHMuZmVhdHVy
ZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkLmltcGwo
KSk7CiAgICAgaWYgKG1heUFmZmVjdERlc2NlbmRhbnRTdHlsZSkKLSAgICAgICAgbV9lbGVtZW50
LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50
LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxlbWVu
dC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVt
ZW50LmludmFsaWRhdGVTdHlsZSgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3
ICsyODksNyBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVFbGVtZW50UmVuCiAgICAg
ICAgIHJldHVybjsKICAgICBhdXRvJiByZW5kZXJlciA9ICplbGVtZW50LnJlbmRlcmVyKCk7CiAK
LSAgICBpZiAodXBkYXRlLmlzU3ludGhldGljKSB7CisgICAgaWYgKHVwZGF0ZS5yZWNvbXBvc2l0
ZUxheWVycykgewogICAgICAgICByZW5kZXJlci5zZXRTdHlsZShXVEZNb3ZlKCp1cGRhdGUuc3R5
bGUpLCBTdHlsZURpZmZlcmVuY2VSZWNvbXBvc2l0ZUxheWVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0aW9uU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdGlvblNj
b3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlk
YXRpb25TY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsK
KworZW51bSBjbGFzcyBJbnZhbGlkYXRpb25TY29wZSB7CisgICAgTm9uZSwKKyAgICBFbGVtZW50
LAorICAgIFN1YnRyZWUsCisgICAgUmVuZGVyZXJzCit9OworCitlbnVtIGNsYXNzIEludmFsaWRh
dGlvbk1vZGUgeworICAgIE5vcm1hbCwKKyAgICBSZWNvbXBvc2l0ZUxheWVycworfTsKKworfQor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHJldmlzaW9uIDIwNzQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTIsNyArMzkyLDcgQEAgdm9pZCBTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBk
YQogICAgIGlmIChyZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykgewogICAgICAgICBpZiAobV9zaGFk
b3dSb290KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHNoYWRvd0NoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4oKm1fc2hhZG93Um9vdCkpCi0gICAgICAgICAgICAgICAgc2hhZG93Q2hp
bGQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIHNoYWRvd0NoaWxkLmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBt
X2RvY3VtZW50LnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDc0MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMCwxMyArMjAwLDEzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpy
ZXNvbHZlRWxlbWUKICAgICBpZiAoIWFmZmVjdHNSZW5kZXJlZFN1YnRyZWUoZWxlbWVudCwgKm5l
d1N0eWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGJvb2wgc2hvdWxkUmVjb25zdHJ1
Y3RSZW5kZXJUcmVlID0gZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBSZWNvbnN0cnVjdFJl
bmRlclRyZWUgfHwgcGFyZW50KCkuY2hhbmdlID09IERldGFjaDsKKyAgICBib29sIHNob3VsZFJl
Y29uc3RydWN0UmVuZGVyVHJlZSA9IGVsZW1lbnQuc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09
IEludmFsaWRhdGlvblNjb3BlOjpSZW5kZXJlcnMgfHwgcGFyZW50KCkuY2hhbmdlID09IERldGFj
aDsKICAgICBhdXRvKiByZW5kZXJlclRvVXBkYXRlID0gc2hvdWxkUmVjb25zdHJ1Y3RSZW5kZXJU
cmVlID8gbnVsbHB0ciA6IGVsZW1lbnQucmVuZGVyZXIoKTsKIAogICAgIGF1dG8gdXBkYXRlID0g
Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKFdURk1vdmUobmV3U3R5bGUpLCByZW5kZXJlclRv
VXBkYXRlLCBtX2RvY3VtZW50KTsKIAotICAgIGlmIChlbGVtZW50LnN0eWxlQ2hhbmdlVHlwZSgp
ID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKQotICAgICAgICB1cGRhdGUuaXNTeW50aGV0aWMgPSB0
cnVlOworICAgIGlmIChlbGVtZW50LnN0eWxlSW52YWxpZGF0aW9uTW9kZSgpID09IEludmFsaWRh
dGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKQorICAgICAgICB1cGRhdGUucmVjb21wb3NpdGVM
YXllcnMgPSB0cnVlOwogCiAgICAgYXV0byogZXhpc3RpbmdTdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKIApAQCAtMjMzLDcgKzIzMyw3IEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVy
OjpyZXNvbHZlRWxlbWUKICAgICAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBEZXRhY2g7CiAgICAg
fQogCi0gICAgaWYgKHVwZGF0ZS5jaGFuZ2UgIT0gRGV0YWNoICYmIChwYXJlbnQoKS5jaGFuZ2Ug
PT0gRm9yY2UgfHwgZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBGdWxsU3R5bGVDaGFuZ2Up
KQorICAgIGlmICh1cGRhdGUuY2hhbmdlICE9IERldGFjaCAmJiAocGFyZW50KCkuY2hhbmdlID09
IEZvcmNlIHx8IGVsZW1lbnQuc3R5bGVJbnZhbGlkYXRpb25TY29wZSgpID09IEludmFsaWRhdGlv
blNjb3BlOjpTdWJ0cmVlKSkKICAgICAgICAgdXBkYXRlLmNoYW5nZSA9IEZvcmNlOwogCiAgICAg
cmV0dXJuIHVwZGF0ZTsKQEAgLTI0NSw3ICsyNDUsNyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNv
bHZlcjo6Y3JlYXRlQW5pbWF0CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFu
aW1hdGVkU3R5bGU7CiAgICAgaWYgKHJlbmRlcmVyVG9VcGRhdGUgJiYgZG9jdW1lbnQuZnJhbWUo
KS0+YW5pbWF0aW9uKCkudXBkYXRlQW5pbWF0aW9ucygqcmVuZGVyZXJUb1VwZGF0ZSwgKm5ld1N0
eWxlLCBhbmltYXRlZFN0eWxlKSkKLSAgICAgICAgdXBkYXRlLmlzU3ludGhldGljID0gdHJ1ZTsK
KyAgICAgICAgdXBkYXRlLnJlY29tcG9zaXRlTGF5ZXJzID0gdHJ1ZTsKIAogICAgIGlmIChhbmlt
YXRlZFN0eWxlKSB7CiAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UocmVu
ZGVyZXJUb1VwZGF0ZS0+c3R5bGUoKSwgKmFuaW1hdGVkU3R5bGUpOwpAQCAtMzYyLDcgKzM2Miw3
IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKCkKIAogICAgICAgICBp
ZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHRleHQgPSBkb3duY2FzdDxU
ZXh0Pihub2RlKTsKLSAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlQ2hhbmdlVHlwZSgpID09IFJl
Y29uc3RydWN0UmVuZGVyVHJlZSAmJiBwYXJlbnQuY2hhbmdlICE9IERldGFjaCkKKyAgICAgICAg
ICAgIGlmICh0ZXh0LnN0eWxlSW52YWxpZGF0aW9uU2NvcGUoKSA9PSBJbnZhbGlkYXRpb25TY29w
ZTo6UmVuZGVyZXJzICYmIHBhcmVudC5jaGFuZ2UgIT0gRGV0YWNoKQogICAgICAgICAgICAgICAg
IG1fdXBkYXRlLT5hZGRUZXh0KHRleHQsIHBhcmVudC5lbGVtZW50KTsKIAogICAgICAgICAgICAg
dGV4dC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVV
cGRhdGUuaAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVV
cGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgU3R5bGUg
ewogc3RydWN0IEVsZW1lbnRVcGRhdGUgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gc3R5bGU7CiAgICAgQ2hhbmdlIGNoYW5nZSB7IE5vQ2hhbmdlIH07Ci0gICAgYm9vbCBpc1N5
bnRoZXRpYyB7IGZhbHNlIH07CisgICAgYm9vbCByZWNvbXBvc2l0ZUxheWVycyB7IGZhbHNlIH07
CiB9OwogCiBjbGFzcyBVcGRhdGUgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU1ZHQUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY28KICAgICAgICAgc2V0SXNMaW5rKCFocmVmKCkuaXNOdWxsKCkgJiYg
IXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xp
bmsoKSkgewogICAgICAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZCBndWFyZCgqdGhp
cyk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMDc0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM5LDE0ICsyMzksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5
Q1NTUHJvcGVydHlUb1RhcgogICAgIGlmICghdGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNN
SUxTdHlsZVByb3BlcnRpZXMoKS5zZXRQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRo
ZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExh
eWVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFy
Z2V0KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIENTU1Byb3BlcnR5SUQgaWQpCiB7CiAgICAg
QVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7CiAgICAgdGFyZ2V0RWxl
bWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5yZW1vdmVQcm9wZXJ0eShp
ZCk7Ci0gICAgdGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxl
Q2hhbmdlKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFu
Y2VzKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3IEBAIGludCBTVkdF
bGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAKIGJvb2wgU1ZHRWxlbWVudDo6d2lsbFJlY2FsY1N0
eWxlKFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmICghbV9zdmdSYXJlRGF0YSB8fCBz
dHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNTdHlsZUNoYW5nZSkKKyAgICBpZiAoIW1fc3Zn
UmFyZURhdGEgfHwgc3R5bGVJbnZhbGlkYXRpb25Nb2RlKCkgPT0gU3R5bGU6OkludmFsaWRhdGlv
bk1vZGU6OlJlY29tcG9zaXRlTGF5ZXJzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAvLyBJ
ZiB0aGUgc3R5bGUgY2hhbmdlcyBiZWNhdXNlIG9mIGEgcmVndWxhciBwcm9wZXJ0eSBjaGFuZ2Ug
KG5vdCBpbmR1Y2VkIGJ5IFNNSUwgYW5pbWF0aW9ucyB0aGVtc2VsdmVzKQogICAgIC8vIHJlc2V0
IHRoZSAiY29tcHV0ZWQgc3R5bGUgd2l0aG91dCBTTUlMIHN0eWxlIHByb3BlcnRpZXMiLCBzbyB0
aGUgYmFzZSB2YWx1ZSBjaGFuZ2UgZ2V0cyByZWZsZWN0ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS5zZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZUlzRGlydHkodHJ1ZSk7CiAgICAgICAgIC8vIFRyaWdnZXIgc3R5bGUgcmVjYWxjdWxhdGlv
biBmb3IgImVsZW1lbnRzIGFzIHJlc291cmNlIiAoZS5nLiByZWZlcmVuY2VkIGJ5IGZlSW1hZ2Up
LgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIGluc3RhbmNlcyBvZiBh
biBlbGVtZW50IGFyZSBjbG9uZXMgbWFkZSBpbiBzaGFkb3cgdHJlZXMgdG8gaW1wbGVtZW50IDx1
c2U+LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyAr
MTkzLDcgQEAgYm9vbCBTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKFNWRwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50LT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHRhcmdldEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICB0YXJnZXRFbGVtZW50LT5pbnZhbGlkYXRl
UmVuZGVyZXJzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6aW52YWxpZGF0ZVNoYWRvd1RyZWUKICAgICBpZiAobV9zaGFkb3dU
cmVlTmVlZHNVcGRhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NoYWRvd1RyZWVOZWVkc1Vw
ZGF0ZSA9IHRydWU7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgIGludmFsaWRhdGVSZW5kZXJlcnMoKTsKICAgICBpbnZhbGlkYXRlRGVwZW5kZW50
U2hhZG93VHJlZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsMTggKzQ4NiwxNiBAQCBib29sIEludGVybmFsczo6
bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kCiAgICAgcmV0dXJuIG5vZGUubmVlZHNTdHlsZVJlY2Fs
YygpOwogfQogCi1zdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKFN0eWxlQ2hh
bmdlVHlwZSB0eXBlKQorc3RhdGljIFN0cmluZyBzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJp
bmcoU3R5bGU6OkludmFsaWRhdGlvblNjb3BlIHNjb3BlKQogewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgTm9TdHlsZUNoYW5nZToKKyAgICBzd2l0Y2ggKHNjb3BlKSB7CisgICAgY2Fz
ZSBTdHlsZTo6SW52YWxpZGF0aW9uU2NvcGU6Ok5vbmU6CiAgICAgICAgIHJldHVybiAiTm9TdHls
ZUNoYW5nZSI7Ci0gICAgY2FzZSBJbmxpbmVTdHlsZUNoYW5nZToKKyAgICBjYXNlIFN0eWxlOjpJ
bnZhbGlkYXRpb25TY29wZTo6RWxlbWVudDoKICAgICAgICAgcmV0dXJuICJJbmxpbmVTdHlsZUNo
YW5nZSI7Ci0gICAgY2FzZSBGdWxsU3R5bGVDaGFuZ2U6CisgICAgY2FzZSBTdHlsZTo6SW52YWxp
ZGF0aW9uU2NvcGU6OlN1YnRyZWU6CiAgICAgICAgIHJldHVybiAiRnVsbFN0eWxlQ2hhbmdlIjsK
LSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAgICAgICByZXR1cm4gIlN5bnRoZXRp
Y1N0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIFJlY29uc3RydWN0UmVuZGVyVHJlZToKKyAgICBjYXNl
IFN0eWxlOjpJbnZhbGlkYXRpb25TY29wZTo6UmVuZGVyZXJzOgogICAgICAgICByZXR1cm4gIlJl
Y29uc3RydWN0UmVuZGVyVHJlZSI7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNTA2LDcgKzUwNCw3IEBAIHN0YXRpYyBTdHJpbmcgc3R5bGVDaGFuZ2VUeXBlVG9TdHJpbmco
U3QKIAogU3RyaW5nIEludGVybmFsczo6c3R5bGVDaGFuZ2VUeXBlKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgcmV0dXJuIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKG5vZGUuc3R5bGVDaGFuZ2VUeXBlKCkp
OworICAgIHJldHVybiBzdHlsZUludmFsaWRhdGlvblNjb3BlVG9TdHJpbmcobm9kZS5zdHlsZUlu
dmFsaWRhdGlvblNjb3BlKCkpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjpkZXNjcmlwdGlvbihK
U0M6OkpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc0MDcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNi0xMC0xNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVuYW1lIHNldE5lZWRzU3R5bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6ZGlkSW5pdGlh
bGl6ZVBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblByb2Nlc3ND
cmFzaGVkKToKKwogMjAxNi0xMC0xNyAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5k
ZXgucnU+CiAKICAgICAgICAgRWxlbWluYXRlIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiBSZXNv
dXJjZVJlcXVlc3QgZW5jb2RpbmcvZGVjb2RpbmcgaW1wbGVtZW50YXRpb25zCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmRpZEluaXRpYWxpemVQbHVnaW4oKQogICAgIGlmIChtX3BsdWdpbkVsZW1lbnQtPmRpc3Bs
YXlTdGF0ZSgpIDwgSFRNTFBsdWdJbkVsZW1lbnQ6OlJlc3RhcnRpbmcpIHsKICAgICAgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5MYXllcigpICYmIGZyYW1lKCkpIHsKICAgICAgICAgICAgIGZyYW1l
KCktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIG1fcGx1Z2lu
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChmcmFtZSgpICYmICFmcmFtZSgpLT5zZXR0aW5ncygpLm1heGlt
dW1QbHVnSW5TbmFwc2hvdEF0dGVtcHRzKCkpIHsKICAgICAgICAgICAgIGJlZ2luU25hcHNob3R0
aW5nUnVubmluZ1BsdWdpbigpOwpAQCAtNjczLDcgKzY3Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
ZGlkSW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fcGx1Z2lu
LT5wbHVnaW5MYXllcigpICYmIGZyYW1lKCkpIHsKICAgICAgICAgICAgIGZyYW1lKCktPnZpZXco
KS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+
c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBt
X3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVycygpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChtX3BsdWdpbkVsZW1lbnQtPmRpc3BsYXlTdGF0ZSgpID09IEhUTUxQbHVnSW5F
bGVtZW50OjpSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNrKQogICAgICAgICAgICAgbV9w
bHVnaW5FbGVtZW50LT5kaXNwYXRjaFBlbmRpbmdNb3VzZUNsaWNrKCk7CkBAIC0xNTcwLDcgKzE1
NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblByb2Nlc3NDcmFzaGVkKCkKICAgICBpZiAo
IWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgbV9wbHVnaW5FbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsK
IAogICAgIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpLnNldFBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVk
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYt
MTAtMTcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFt
ZSBzZXROZWVkc1N0eWxlUmVjYWxjIHRvIGludmFsaWRhdGVTdHlsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJIb3N0
ZWROZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldyBjcmVhdGVQbHVnaW5MYXllcl0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3JlYXRl
UGx1Z2luXSk6CisKIDIwMTYtMTAtMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIE1vdmUgQ1NTIGNsYXNzZXMgZnJvbSBFeGNlcHRpb25Db2RlIHRvIEV4Y2VwdGlv
bgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0JKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk5LDEwICsx
MDk5LDEwIEBAIC0gKEJPT0wpY3JlYXRlUGx1Z2luCiAgICAgICAgICAgICAgICAgcmVhbFBsdWdp
bkxheWVyLmdldCgpLmF1dG9yZXNpemluZ01hc2sgPSBrQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtD
QUxheWVySGVpZ2h0U2l6YWJsZTsKICAgICAgICAgICAgICAgICBbX3BsdWdpbkxheWVyLmdldCgp
IGFkZFN1YmxheWVyOnJlYWxQbHVnaW5MYXllci5nZXQoKV07CiAKLSAgICAgICAgICAgICAgICAv
LyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNpbmNlIHdlIGtub3cgd2UnbGwgbmVl
ZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5bGVSZWNhbGMoKQorICAgICAgICAg
ICAgICAgIC8vIEVhZ2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3
ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lkcyBmaXJpbmcgaW52YWxpZGF0ZVN0eWxlKCkKICAgICAg
ICAgICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5z
IGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
MDMzCiAgICAgICAgICAgICAgICAgY29yZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVy
Q29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgIFtz
ZWxmIGVsZW1lbnRdLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIFtzZWxmIHNldFdhbnRzTGF5ZXI6WUVTXTsKIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dl
Ykhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgLSAodm9pZCljcmVhdGVQbHVnaW5M
YXllcgogICAgICAgICAvLyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNpbmNlIHdl
IGtub3cgd2UnbGwgbmVlZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5bGVSZWNh
bGMoKQogICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVn
aW5zIGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5MDMzCiAgICAgICAgIGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+dmlldygpLT5lbnRlckNvbXBv
c2l0aW5nTW9kZSgpOwotICAgICAgICBbc2VsZiBlbGVtZW50XS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIFtzZWxmIGVsZW1lbnRdLT5pbnZhbGlk
YXRlU3R5bGVBbmRMYXllcnMoKTsKICAgICB9IGVsc2UKICAgICAgICAgc2VsZi53YW50c0xheWVy
ID0gWUVTOwogfQo=
</data>
<flag name="review"
          id="314933"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291936</attachid>
            <date>2016-10-18 03:44:25 -0700</date>
            <delta_ts>2016-10-18 04:46:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-enum-13.patch</filename>
            <type>text/plain</type>
            <size>104488</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MiBAQAorMjAxNi0xMC0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5
bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBBbHNvIHJlbmFtZSBTdHlsZUNoYW5nZVR5cGUgZW51bSBhbmQgc29t
ZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY2xhcml0eS4gRm9yIGV4YW1wbGUKKworICAgICAgICAg
ICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKwor
ICAgICAgICBiZWNvbWVzCisKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOworCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVJ
Zk5lZWRlZCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlVmlld3BvcnRVbml0c09uUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpz
ZXRDU1NUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6dW53cmFwRnVsbFNjcmVlblJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRBbmltYXRpbmdGdWxsU2NyZWVuKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0Rm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SG92ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFs
aWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnZhbGlkYXRlU3R5bGVB
bmRMYXllckNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSk6CisKKyAgICAgICAgICAgIE1vdmUgcHVibGlj
IGludmFsaWRhdGlvbiBmdW5jdGlvbnMgdG8gRWxlbWVudCB0aWdodGVuaW5nIHR5cGluZy4KKyAg
ICAgICAgICAgIFVzZSBzZXBhcmF0ZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBlbnVtIHZhbHVlcy4K
KyAgICAgICAgICAgIFRoaXMgd2F5IHRoZSBjYWxsIHNpdGVzIGxvb2sgbmljZXIgYW5kIG9ubHkg
dXNlZnVsIGNvbWJpbmF0aW9ucyBhcmUgZXhwb3NlZC4KKworICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6YWRkU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5U3R5
bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCk6
CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNl
dEhhc0ZvY3VzV2l0aGluKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlRWRpdGFiaWxpdHlGcm9tQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjphZGp1c3RTdHlsZVZhbGlkaXR5KToKKworICAgICAgICAgICAgVXBkYXRlIHZh
bGlkaXR5IGFuZCBtb2RlIHNlcGFyYXRlbHkuIFRoZXJlIHdhcyBhIHBvdGVudGlhbCBidWcgaGVy
ZSB3aGVyZQorICAgICAgICAgICAgU3ludGhldGljU3R5bGVDaGFuZ2UgY291bGQgb3ZlcndyaXRl
IEZ1bGxTdHlsZUNoYW5nZSAobm8ga25vd24gcmVwcm8pLgorCisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJ
bnRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMpOiBEZWxl
dGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpuZWVk
c1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnN0eWxlVmFsaWRpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRIYXNWYWxpZFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OnN0eWxlQ2hhbmdlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpjbGVhck5lZWRzU3R5bGVSZWNhbGMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0U3R5bGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNT
dHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSk6
CisgICAgICAgICogZG9tL1Nsb3RBc3NpZ25tZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNs
b3RBc3NpZ25tZW50OjphZGRTbG90RWxlbWVudEJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
bG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1lbnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNsb3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHls
ZUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UpOgorICAgICAgICAqIGRvbS9W
aXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6
OmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRM
aW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmspOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
OjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3RE
aXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5
KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6YWRkSW52YWxpZERlc2NlbmRhbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6cmVtb3ZlSW52YWxpZERlc2NlbmRhbnQp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVx
dWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlVmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6
cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFsaWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1
dHRvbik6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVl
KToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVkdWxlaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1l
bnQ6OnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyk6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbFJl
Y2FsY1N0eWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cnVuUG9zdFR5cGVVcGRhdGVUYXNrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b0ZpbGxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjptYXhMZW5ndGhBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om1pbkxlbmd0aEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBs
YXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJG
YWxsYmFja0NvbnRlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUpOgorICAgICAgICAqIGh0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6
OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpzZXREaXNwbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZVNuYXBzaG90VGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0
U25hcHNob3R0ZWRQbHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3Rh
dGVDaGFuZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNhbGNMaXN0SXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNUYWJsZUNlbGxB
bmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRUYWJsZUNlbGxzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlQ29tbW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIGh0
bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWUp
OgorICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok51bWJlcklucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJ
bnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgICogbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRDaGlsZCk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1h
dGlvbkF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6Om5vdGlmeUlGcmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRTdHlsZUNoYW5nZWQpOgorICAgICAgICAqIHN0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QXR0cmlidXRlQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdl
SW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9JZENoYW5nZUlu
dmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SWRDaGFuZ2VJbnZhbGlk
YXRpb246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUVsZW1l
bnRSZW5kZXJlcik6CisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6U2NvcGU6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
cmVzZXRTdHlsZUZvck5vblJlbmRlcmVkRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnBvcFBhcmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y2xlYXJOZWVkc1N0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlVmFsaWRpdHkuaDog
QWRkZWQuCisKKyAgICAgICAgICAgIFN0eWxlQ2hhbmdlVHlwZSBlbnVtIHNwbGl0cyBpbnRvIFN0
eWxlOjpWYWxpZGl0eSBhbmQgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUuCisgICAgICAgICAgICBN
b3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorCisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVD
U1NQcm9wZXJ0eUZyb21UYXJnZXQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICog
c3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmludmFsaWRh
dGVTVkdQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3Rz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2Up
OgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmludmFsaWRhdGVTaGFkb3dUcmVlKToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVZhbGlkaXR5VG9Ub1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN0eWxlQ2hhbmdlVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyk6IERlbGV0ZWQuCisKIDIwMTYtMTAt
MTcgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W2Nzcy1ncmlkXSBDb25zdHJhaW4gYnkgbWlufG1heC1oZWlnaHQgb24gYXV0byByZXBlYXQgY29t
cHV0YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjIzNCw2ICs2
MjM0LDcgQEAKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07
CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZC
IC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAgKi87IH07CisJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHls
ZVZhbGlkaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0ODk0NEEyMTgwQjU3RDgw
MEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBs
ZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5MTZGRjcxOTVE
RjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkg
LyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4NjIsNiArMTM4NjMsNyBAQAogCQlFNDdCNEJFNzBF
NzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3Njcx
NjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxl
VmFsaWRpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVWYWxpZGl0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVz
aFRocm90dGxlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJG
bHVzaFRocm90dGxlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzcx
LDYgKzIyMzczLDcgQEAKIAkJCQlFNERFQUExNjE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVUcmVl
UmVzb2x2ZXIuaCAqLywKIAkJCQlFNDJFNzZEOTFDN0FGNzZDMDBFMzYxNEQgLyogU3R5bGVVcGRh
dGUuY3BwICovLAogCQkJCUU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5o
ICovLAorCQkJCUU0ODEzN0I4MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHN0eWxlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTI1MjE2LDYgKzI1MjE5LDggQEAKIAkJCQlCQzkyNkY4MTBDMDU1MjQ3MDA4Mjc3NkIgLyogSlNI
VE1MRnJhbWVTZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0IxNTBBMTlENjA2
MDA3RkI4QzUgLyogSlNIVE1MSGVhZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJB
QTJGMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIZWFkaW5nRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTFBMjk5RkU4MUQ3RjVGQTYwMEE2MDA5MyAvKiBSZW5kZXJUaGVtZUNv
Y29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUEzMTBBMUNEQUI0MDBCNDJCMjUgLyogSlNI
VE1MSFJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg1QjE5MDBBMUIxOEEyMDBEOEM4
N0MgLyogSlNIVE1MSHRtbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDkxOEM5MEJG
RUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5j
cHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDI0ICsxMDAsMjMgQEAgU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYQogICAgIGlmIChtX2hhc1NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQpIHsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgZG8gYWN0dWFsIHJ1bGUgbWF0Y2hpbmcgdG9vLgogICAgICAgICBpZiAoZWxlbWVu
dC5zaGFkb3dSb290KCkpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
IH0KIAotICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSkgewotICAgIGNhc2Ug
Tm9TdHlsZUNoYW5nZTogeworICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZVZhbGlkaXR5KCkpIHsK
KyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ6IHsKICAgICAgICAgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXQsIGZpbHRlcik7CiAgICAg
ICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3Rp
bmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzKTsKICAgICAgICAgcnVsZUNvbGxl
Y3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKIAogICAgICAgICBpZiAocnVsZUNvbGxlY3Rv
ci5oYXNNYXRjaGVkUnVsZXMoKSkKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVT
dHlsZSgpOwogICAgICAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwogICAgIH0KLSAg
ICBjYXNlIElubGluZVN0eWxlQ2hhbmdlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpFbGVt
ZW50SW52YWxpZDoKICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICBj
YXNlIEZ1bGxTdHlsZUNoYW5nZToKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAg
IGNhc2UgUmVjb25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpT
dWJ0cmVlSW52YWxpZDoKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFuZFJlbmRl
cmVyc0ludmFsaWQ6CiAgICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpObzsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NTMsNyArMTg1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlOjpDaGFuZ2UKIAogICAgICAgICBtX2xhc3RTdHlsZVVwZGF0ZVNpemVGb3JUZXN0
aW5nID0gc3R5bGVVcGRhdGUgPyBzdHlsZVVwZGF0ZS0+c2l6ZSgpIDogMDsKIAotICAgICAgICBj
bGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgc2V0SGFzVmFsaWRTdHlsZSgpOwogICAg
ICAgICBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB1bnNjaGVkdWxlU3R5
bGVSZWNhbGMoKTsKIApAQCAtMzUwMCw3ICszNTAwLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaQogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3ROb2RlKCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbygqZWxlbWVudCkpIHsKICAgICAgICAg
YXV0byogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzVmlld3BvcnRVbml0cygpKQotICAgICAgICAgICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsKICAgICB9CiB9CiAKQEAgLTM4MTgsMTAg
KzM4MTgsMTAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmZvY3VzTmF2aWdhdGlvblN0YXJ0aQogdm9p
ZCBEb2N1bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiB7CiAgICAgaWYgKG1fY3NzVGFy
Z2V0KQotICAgICAgICBtX2Nzc1RhcmdldC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICBtX2Nzc1RhcmdldC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIG1fY3NzVGFy
Z2V0ID0gbjsKICAgICBpZiAobikKLSAgICAgICAgbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgICAgICBuLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnJlZ2lzdGVyTm9kZUxpc3RGb3JJbnZhbGlkYXRpb24oTGl2ZU5vZGVMaXN0JiBsaXN0KQpA
QCAtNTgzNSw4ICs1ODM1LDggQEAgc3RhdGljIHZvaWQgdW53cmFwRnVsbFNjcmVlblJlbmRlcmVy
KFJlbgogICAgIGJvb2wgcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZDsKICAgICBmdWxsU2NyZWVu
UmVuZGVyZXItPnVud3JhcFJlbmRlcmVyKHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQpOwogCi0g
ICAgaWYgKHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQgJiYgZnVsbFNjcmVlbkVsZW1lbnQgJiYg
ZnVsbFNjcmVlbkVsZW1lbnQtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgZnVsbFNjcmVlbkVsZW1l
bnQtPnBhcmVudE5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgIGlmIChyZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkICYmIGZ1bGxTY3JlZW5FbGVt
ZW50ICYmIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIGZ1bGxT
Y3JlZW5FbGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVy
c0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKQEAgLTYwMjcsNyArNjAyNyw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm8KICAgICBtX2lzQW5pbWF0aW5n
RnVsbFNjcmVlbiA9IGZsYWc7CiAKICAgICBpZiAobV9mdWxsU2NyZWVuRWxlbWVudCAmJiBtX2Z1
bGxTY3JlZW5FbGVtZW50LT5pc0Rlc2NlbmRhbnRPZih0aGlzKSkgewotICAgICAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgc2NoZWR1bGVG
b3JjZWRTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJv
b2wgZmxhZywgYm9vbCAKICAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSB0aGlz
LT5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IChyZW5kZXJTdHlsZSAm
JiByZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2ZSgpKSB8fCBzdHlsZUFmZmVjdGVkQnlBY3Rp
dmUoKTsKICAgICBpZiAocmVhY3RzVG9QcmVzcykKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoIXJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lkIEVsZW1l
bnQ6OnNldEZvY3VzKGJvb2wgZmxhZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZG9jdW1lbnQo
KS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKHRoaXMsIGZsYWcpOwotICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAg
ICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKQogICAgICAgICBlbGVtZW50LT5zZXRIYXNG
b2N1c1dpdGhpbihmbGFnKTsKQEAgLTYzMiwxMyArNjMyLDEzIEBAIHZvaWQgRWxlbWVudDo6c2V0
SG92ZXJlZChib29sIGZsYWcpCiAgICAgICAgIC8vIHN0eWxlLCBpdCB3b3VsZCBuZXZlciBnbyBi
YWNrIHRvIGl0cyBub3JtYWwgc3R5bGUgYW5kIHJlbWFpbgogICAgICAgICAvLyBzdHVjayBpbiBp
dHMgaG92ZXJlZCBzdHlsZSkuCiAgICAgICAgIGlmICghZmxhZykKLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxl
KCkuYWZmZWN0ZWRCeUhvdmVyKCkgfHwgY2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSkKLSAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0
cmVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAg
ICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlKTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQgRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWEKICAgICAgICAgICAgIGVsZW1lbnREYXRhKCkt
PnNldEhhc05hbWVBdHRyaWJ1dGUoIW5ld1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSBIVE1MTmFtZXM6OnBzZXVkb0F0dHIpIHsKICAgICAgICAgICAgIGlmIChuZWVk
c1N0eWxlSW52YWxpZGF0aW9uKCkgJiYgaXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gSFRNTE5hbWVzOjpzbG90QXR0cikgewogICAgICAgICAgICAgaWYgKGF1dG8qIHBh
cmVudCA9IHBhcmVudEVsZW1lbnQoKSkgewpAQCAtMTQ0MCw2ICsxNDQwLDI2IEBAIEVsZW1lbnRT
dHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QKICAgICByZXR1cm4gc3R5bGVSZXNvbHZl
cigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywgcGFyZW50U3R5bGUpOwogfQogCit2b2lkIEVsZW1l
bnQ6OmludmFsaWRhdGVTdHlsZSgpCit7CisgICAgTm9kZTo6aW52YWxpZGF0ZVN0eWxlKFN0eWxl
OjpWYWxpZGl0eTo6RWxlbWVudEludmFsaWQpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHls
ZShTdHlsZTo6VmFsaWRpdHk6OkVsZW1lbnRJbnZhbGlkLCBTdHlsZTo6SW52YWxpZGF0aW9uTW9k
ZTo6UmVjb21wb3NpdGVMYXllcik7Cit9CisKK3ZvaWQgRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpCit7CisgICAgTm9kZTo6aW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0
eTo6U3VidHJlZUludmFsaWQpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUFu
ZFJlbmRlcmVyc0ZvclN1YnRyZWUoKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHls
ZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5kZXJlcnNJbnZhbGlkKTsKK30KKwogI2lmIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKIFdlYkFuaW1hdGlvblZlY3RvciBFbGVtZW50OjpnZXRBbmltYXRp
b25zKCkKIHsKQEAgLTE3NTQsNyArMTc3NCw3IEBAIHZvaWQgRWxlbWVudDo6YWRkU2hhZG93Um9v
dChSZWY8U2hhZG93Um8KICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHBvc3RJbnNlcnRpb25Ob3Rp
ZmljYXRpb25UYXJnZXRzKQogICAgICAgICB0YXJnZXQtPmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJl
ZSgpOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOwor
ICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3QoKnRoaXMsIHNoYWRvd1Jvb3Qp
OwogCkBAIC0xOTM2LDcgKzE5NTYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlCiAgICAgaWYgKGVsZW1lbnQuc3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSkgewogICAg
ICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwgZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkp
KQotICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAg
ICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKQEAgLTE5
NDcsNyArMTk2Nyw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygK
ICAgICAvLyA6ZW1wdHkgc2VsZWN0b3IuCiAgICAgY2hlY2tGb3JFbXB0eVN0eWxlQ2hhbmdlKHBh
cmVudCk7CiAKLSAgICBpZiAocGFyZW50LnN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNo
YW5nZSkKKyAgICBpZiAocGFyZW50LnN0eWxlVmFsaWRpdHkoKSA+PSBTdHlsZTo6VmFsaWRpdHk6
OlN1YnRyZWVJbnZhbGlkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA6Zmlyc3QtY2hpbGQu
ICBJbiB0aGUgcGFyc2VyIGNhbGxiYWNrIGNhc2UsIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgYW55
dGhpbmcsIHNpbmNlIHdlIHdlcmUgcmlnaHQgdGhlIGZpcnN0IHRpbWUuCkBAIC0xOTYyLDE0ICsx
OTgyLDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAg
ICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2UpIHsKICAgICAgICAg
ICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCi0gICAgICAg
ICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gaGFuZGxlIG5vZGUg
cmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQg
JiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAmJiBuZXdGaXJzdEVsZW1l
bnQpIHsKICAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJT
dHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0
ZSgpKQotICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTgyLDcgKzIwMDIsNyBAQCBzdGF0
aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIGlmIChuZXdMYXN0
RWxlbWVudCAhPSBlbGVtZW50QmVmb3JlQ2hhbmdlKSB7CiAgICAgICAgICAgICBhdXRvKiBzdHls
ZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAo
IXN0eWxlIHx8IHN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIGVsZW1l
bnRCZWZvcmVDaGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBl
bGVtZW50QmVmb3JlQ2hhbmdlLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRo
ZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBpcyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxs
IGluIHRoYXQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxhc3QgY2hpbGQKQEAgLTE5OTAsMTMgKzIw
MTAsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAg
ICBpZiAoKGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09
IEZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVm
b3JlQ2hhbmdlICYmIG5ld0xhc3RFbGVtZW50KSB7CiAgICAgICAgICAgICBhdXRvKiBzdHlsZSA9
IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCi0gICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1l
bnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBuZXdMYXN0RWxlbWVu
dC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGVsZW1lbnRBZnRlckNoYW5nZSkgewogICAgICAgICBpZiAoZWxlbWVudEFmdGVyQ2hhbmdl
LT5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgZWxlbWVu
dEFmdGVyQ2hhbmdlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50
QWZ0ZXJDaGFuZ2UtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudEFmdGVyQ2hhbmdlLT5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSkg
ewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudFRvSW52YWxpZGF0ZSA9IGVsZW1lbnRBZnRl
ckNoYW5nZTsKICAgICAgICAgICAgIGRvIHsKQEAgLTIwMDQsNyArMjAyNCw3IEBAIHN0YXRpYyB2
b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgICAgIH0gd2hpbGUgKGVs
ZW1lbnRUb0ludmFsaWRhdGUgJiYgIWVsZW1lbnRUb0ludmFsaWRhdGUtPnN0eWxlSXNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKCkpOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSW52YWxp
ZGF0ZSkKLSAgICAgICAgICAgICAgICBlbGVtZW50VG9JbnZhbGlkYXRlLT5zZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudFRvSW52YWxpZGF0ZS0+aW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDE1LDcgKzIwMzUs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgLy8gRm9y
IHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UganVzdCBtYXJrIHRoZSBwYXJlbnQgbm9kZSBhcyBjaGFu
Z2VkLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG1ha2UgY2hpbGRyZW5DaGFuZ2VkIE8obl4yKSBi
eSBjcmF3bGluZyBhbGwgb3VyIGtpZHMKICAgICAvLyBoZXJlLiAgcmVjYWxjU3R5bGUgd2lsbCB0
aGVuIGZvcmNlIGEgd2FsayBvZiB0aGUgY2hpbGRyZW4gd2hlbiBpdCBzZWVzIHRoYXQgdGhpcyBo
YXMgaGFwcGVuZWQuCiAgICAgaWYgKHBhcmVudC5jaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBv
c2l0aW9uYWxSdWxlcygpICYmIGVsZW1lbnRCZWZvcmVDaGFuZ2UpCi0gICAgICAgIHBhcmVudC5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIHBhcmVudC5pbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJiBjaGFuZ2UpCkBAIC0yNzA0LDcgKzI3MjQsNyBAQCBib29sIEVsZW1lbnQ6Om5lZWRz
U3R5bGVJbnZhbGlkYXRpb24oKSBjCiB7CiAgICAgaWYgKCFpblJlbmRlcmVkRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxs
U3R5bGVDaGFuZ2UpCisgICAgaWYgKHN0eWxlVmFsaWRpdHkoKSA+PSBTdHlsZTo6VmFsaWRpdHk6
OlN1YnRyZWVJbnZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGRvY3VtZW50
KCkuaGFzUGVuZGluZ0ZvcmNlZFN0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMwNzEsNyArMzA5MSw3IEBAIGJvb2wgRWxlbWVudDo6Y29udGFpbnNGdWxsU2NyZWVuRWxl
bWVudCgKIHZvaWQgRWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChib29sIGZs
YWcpCiB7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0Q29udGFpbnNGdWxsU2NyZWVu
RWxlbWVudChmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIHN0
YXRpYyBFbGVtZW50KiBwYXJlbnRDcm9zc2luZ0ZyYW1lQm91bmRhcmllcyhFbGVtZW50KiBlbGVt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsNiArNTQzLDI2IEBA
IHB1YmxpYzoKICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7CiAgICAgRWxlbWVu
dFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCisg
ICAgLy8gSW52YWxpZGF0ZXMgdGhlIHN0eWxlIG9mIGEgc2luZ2xlIGVsZW1lbnQuIFN0eWxlIGlz
IHJlc29sdmVkIGxhemlseS4KKyAgICAvLyBEZXNjZW5kYW50IGVsZW1lbnRzIGFyZSByZXNvbHZl
ZCBhcyBuZWVkZWQsIGZvciBleGFtcGxlIGlmIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBjaGFuZ2Vz
LgorICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBhbiBlbGVtZW50IGNoYW5n
ZXMgaW4gYSBtYW5uZXIgdGhhdCBjYW4gYWZmZWN0IGl0cyBzdHlsZS4KKyAgICB2b2lkIGludmFs
aWRhdGVTdHlsZSgpOworCisgICAgLy8gQXMgYWJvdmUgYnV0IGFsc28gY2FsbCBSZW5kZXJFbGVt
ZW50OjpzZXRTdHlsZSB3aXRoIFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIgZmxhZyBm
b3IKKyAgICAvLyB0aGUgZWxlbWVudCBldmVuIHdoZW4gdGhlIHN0eWxlIGRvZXNuJ3QgY2hhbmdl
LiBUaGlzIGlzIG1vc3RseSBuZWVkZWQgYnkgdGhlIGFuaW1hdGlvbiBjb2RlLgorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworCisg
ICAgLy8gSW52YWxpZGF0ZSB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gVGhp
cyBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgc29tZSBzb3J0IG9mIGNoYW5nZQorICAgIC8vIGluIHRo
ZSB0cmVlIHRoYXQgbWF5IGFmZmVjdCB0aGUgc3R5bGUgb2YgYW55IG9mIHRoZSBkZXNjZW5kYW50
cyBhbmQgd2UgZG9uJ3Qga25vdyBob3cgdG8gb3B0aW1pemUKKyAgICAvLyB0aGUgY2FzZSB0byBs
aW1pdCB0aGUgc2NvcGUuIFRoaXMgaXMgZXhwZW5zaXZlIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4K
KyAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKworICAgIC8vIEludmFsaWRh
dGVzIHJlbmRlcmVycyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMgY2F1
c2luZyB0aGVtIHRvIGJlIHRvcm4gZG93bgorICAgIC8vIGFuZCByZWJ1aWxkIGR1cmluZyBzdHls
ZSByZXNvbHV0aW9uLiBTdHlsZSBpcyBhbHNvIHJlY29tcHV0ZWQuIFRoaXMgaXMgdXNlZCBpbiBj
b2RlIGRlYWxpbmcgd2l0aAorICAgIC8vIGN1c3RvbSAobm90IHN0eWxlIGJhc2VkKSByZW5kZXJl
cnMuIFRoaXMgaXMgZXhwZW5zaXZlIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4KKyAgICAvLyBFbGVt
ZW50cyBuZXdseSBhZGRlZCB0byB0aGUgdHJlZSBhcmUgYWxzbyBpbiB0aGlzIHN0YXRlLgorICAg
IHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOworCiAgICAgYm9v
bCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhhc0Rpc3BsYXlDb250
ZW50cyhib29sKTsKIApAQCAtODA4LDcgKzgyOCw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNl
dEhhc0ZvY3VzV2l0aGluKGIKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZsYWcoZmxhZywgSGFz
Rm9jdXNXaXRoaW4pOwogICAgIGlmIChzdHlsZUFmZmVjdGVkQnlGb2N1c1dpdGhpbigpKQotICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjYsNyArNjY2LDcgQEAgdm9pZCBOb2RlOjppbnNwZWN0KCkKIHN0YXRp
YyBOb2RlOjpFZGl0YWJpbGl0eSBjb21wdXRlRWRpdGFiaWxpdHlGcm9tQ29tcHV0ZWRTdHlsZShj
b25zdCBOb2RlJiBzdGFydE5vZGUsIE5vZGU6OlVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJlYXRt
ZW50KQogewogICAgIC8vIElkZWFsbHkgd2UnZCBjYWxsIEFTU0VSVCghbmVlZHNTdHlsZVJlY2Fs
YygpKSBoZXJlLCBidXQKLSAgICAvLyBDb250YWluZXJOb2RlOjpzZXRGb2N1cygpIGNhbGxzIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKSwgc28gdGhlIGFzc2VydGlvbgorICAgIC8vIENvbnRhaW5lck5v
ZGU6OnNldEZvY3VzKCkgY2FsbHMgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpLCBzbyB0aGUg
YXNzZXJ0aW9uCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50Ojpz
ZXRGb2N1c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0
Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewpAQCAtNzUwLDYgKzc1MCwx
NiBAQCB2b2lkIE5vZGU6OmRlcmVmRXZlbnRUYXJnZXQoKQogICAgIGRlcmVmKCk7CiB9CiAKK3Zv
aWQgTm9kZTo6YWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHkgdmFsaWRpdHksIFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHZhbGlkaXR5ID4gc3R5bGVW
YWxpZGl0eSgpKSB7CisgICAgICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZVZhbGlkaXR5TWFzazsK
KyAgICAgICAgbV9ub2RlRmxhZ3MgfD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbGlkaXR5KSA8
PCBTdHlsZVZhbGlkaXR5U2hpZnQ7CisgICAgfQorICAgIGlmIChtb2RlID09IFN0eWxlOjpJbnZh
bGlkYXRpb25Nb2RlOjpSZWNvbXBvc2l0ZUxheWVyKQorICAgICAgICBzZXRGbGFnKFN0eWxlUmVz
b2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnKTsKK30KKwogaW5saW5lIHZvaWQgTm9k
ZTo6dXBkYXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKQogewogICAgIGF1dG8gY29tcG9zZWRB
bmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtNzU4LDEwICs3Njgs
OCBAQCBpbmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsCiAgICAgaWYgKGl0
ICE9IGVuZCkgewogICAgICAgICBpdC0+c2V0RGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7
CiAKLSAgICAgICAgaWYgKGl0LT5jaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dh
cmRQb3NpdGlvbmFsUnVsZXMoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zdHlsZUNoYW5nZVR5
cGUoKSA8IEZ1bGxTdHlsZUNoYW5nZSkKLSAgICAgICAgICAgICAgICBpdC0+c2V0U3R5bGVDaGFu
Z2UoRnVsbFN0eWxlQ2hhbmdlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXQtPmNoaWxkcmVu
QWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpKQorICAgICAg
ICAgICAgaXQtPmFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52
YWxpZCwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7CiAKICAgICAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgLy8gSXRlcmF0b3Igc2tpcHMgb3ZlciBz
aGFkb3cgcm9vdHMuCkBAIC03ODIsOSArNzkwLDkgQEAgaW5saW5lIHZvaWQgTm9kZTo6dXBkYXRl
QW5jZXN0b3JzRm9yU3R5bAogICAgIGRvY3VtZW50KCkuc2NoZWR1bGVTdHlsZVJlY2FsYygpOwog
fQogCi12b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlIGNoYW5n
ZVR5cGUpCit2b2lkIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHlsZTo6VmFsaWRpdHkgdmFsaWRp
dHksIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGNoYW5nZVR5
cGUgIT0gTm9TdHlsZUNoYW5nZSk7CisgICAgQVNTRVJUKHZhbGlkaXR5ICE9IFN0eWxlOjpWYWxp
ZGl0eTo6VmFsaWQpOwogICAgIGlmICghaW5SZW5kZXJlZERvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNzkyLDExICs4MDAsMTEgQEAgdm9pZCBOb2RlOjpzZXROZWVkc1N0eWxlUmVj
YWxjKFN0eWxlQ2hhbgogICAgIGlmIChkb2N1bWVudCgpLmluUmVuZGVyVHJlZVVwZGF0ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHlsZUNoYW5nZVR5cGUgZXhpc3RpbmdDaGFuZ2VUeXBl
ID0gc3R5bGVDaGFuZ2VUeXBlKCk7Ci0gICAgaWYgKGNoYW5nZVR5cGUgPiBleGlzdGluZ0NoYW5n
ZVR5cGUpCi0gICAgICAgIHNldFN0eWxlQ2hhbmdlKGNoYW5nZVR5cGUpOworICAgIGJvb2wgbWFy
a0FuY2VzdG9ycyA9IHN0eWxlVmFsaWRpdHkoKSA9PSBTdHlsZTo6VmFsaWRpdHk6OlZhbGlkOwor
CisgICAgYWRqdXN0U3R5bGVWYWxpZGl0eSh2YWxpZGl0eSwgbW9kZSk7CiAKLSAgICBpZiAoZXhp
c3RpbmdDaGFuZ2VUeXBlID09IE5vU3R5bGVDaGFuZ2UgfHwgY2hhbmdlVHlwZSA9PSBSZWNvbnN0
cnVjdFJlbmRlclRyZWUpCisgICAgaWYgKG1hcmtBbmNlc3RvcnMpCiAgICAgICAgIHVwZGF0ZUFu
Y2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7CiB9CiAKQEAgLTExOTYsNyArMTIwNCw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgTm9kZToKICAgICBpZiAocGFyZW50T3JTaGFk
b3dIb3N0Tm9kZSgpLT5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICBzZXRGbGFnKElzSW5TaGFk
b3dUcmVlRmxhZyk7CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVy
VHJlZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFuZFJl
bmRlcmVyc0ludmFsaWQpOwogCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiU3R5bGVWYWxpZGl0eS5oIgogI2luY2x1ZGUgIlRyZWVTY29w
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+CkBAIC02MSwyMSArNjIsOCBAQCBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVG91Y2hFdmVu
dDsKIGNsYXNzIFVJUmVxdWVzdEV2ZW50OwogCi1jb25zdCBpbnQgbm9kZVN0eWxlQ2hhbmdlU2hp
ZnQgPSAxNDsKLQogdXNpbmcgTm9kZU9yU3RyaW5nID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCi0vLyBTeW50aGV0aWNTdHlsZUNoYW5nZSBtZWFu
cyB0aGF0IHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZW50aXJlIHN0eWxlIGNoYW5nZSBsb2dp
YyBldmVuIHRob3VnaAotLy8gbm8gc3R5bGUgcHJvcGVydHkgaGFzIGFjdHVhbGx5IGNoYW5nZWQu
IEl0IGlzIHVzZWQgdG8gcmVzdHJ1Y3R1cmUgdGhlIHRyZWUgd2hlbiwgZm9yIGluc3RhbmNlLAot
Ly8gUmVuZGVyTGF5ZXJzIGFyZSBjcmVhdGVkIG9yIGRlc3Ryb3llZCBkdWUgdG8gYW5pbWF0aW9u
IGNoYW5nZXMuCi1lbnVtIFN0eWxlQ2hhbmdlVHlwZSB7IAotICAgIE5vU3R5bGVDaGFuZ2UgPSAw
LCAKLSAgICBJbmxpbmVTdHlsZUNoYW5nZSA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQsIAot
ICAgIEZ1bGxTdHlsZUNoYW5nZSA9IDIgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQsIAotICAgIFN5
bnRoZXRpY1N0eWxlQ2hhbmdlID0gMyA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCwKLSAgICBSZWNv
bnN0cnVjdFJlbmRlclRyZWUgPSA0IDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0LAotfTsKLQogY2xh
c3MgTm9kZVJhcmVEYXRhQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KQEAgLTMyMSw4ICszMDksOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRVc2VyQWN0aW9uRWxlbWVudChib29sIGZsYWcpIHsgc2V0RmxhZyhm
bGFnLCBJc1VzZXJBY3Rpb25FbGVtZW50KTsgfQogCiAgICAgYm9vbCBpblJlbmRlcmVkRG9jdW1l
bnQoKSBjb25zdDsKLSAgICBib29sIG5lZWRzU3R5bGVSZWNhbGMoKSBjb25zdCB7IHJldHVybiBz
dHlsZUNoYW5nZVR5cGUoKSAhPSBOb1N0eWxlQ2hhbmdlOyB9Ci0gICAgU3R5bGVDaGFuZ2VUeXBl
IHN0eWxlQ2hhbmdlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlQ2hhbmdl
VHlwZT4obV9ub2RlRmxhZ3MgJiBTdHlsZUNoYW5nZU1hc2spOyB9CisgICAgYm9vbCBuZWVkc1N0
eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gc3R5bGVWYWxpZGl0eSgpICE9IFN0eWxlOjpWYWxp
ZGl0eTo6VmFsaWQ7IH0KKyAgICBTdHlsZTo6VmFsaWRpdHkgc3R5bGVWYWxpZGl0eSgpIGNvbnN0
OworICAgIGJvb2wgc3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllcigpIGNvbnN0
OwogICAgIGJvb2wgY2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gZ2V0Rmxh
ZyhDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQogICAgIGJvb2wgc3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKFN0eWxlSXNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQogICAgIGJvb2wgaXNFZGl0aW5nVGV4dCgpIGNvbnN0IHsg
cmV0dXJuIGdldEZsYWcoSXNUZXh0RmxhZykgJiYgZ2V0RmxhZyhJc0VkaXRpbmdUZXh0T3JVbmRl
ZmluZWRDdXN0b21FbGVtZW50RmxhZyk7IH0KQEAgLTMzMCw4ICszMTksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNldEZsYWcoQ2hpbGROZWVkc1N0
eWxlUmVjYWxjRmxhZyk7IH0KICAgICB2b2lkIGNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCkg
eyBtX25vZGVGbGFncyAmPSB+KENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcgfCBEaXJlY3RDaGls
ZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSA9IEZ1bGxTdHlsZUNoYW5nZSk7Ci0gICAg
dm9pZCBjbGVhck5lZWRzU3R5bGVSZWNhbGMoKSB7IG1fbm9kZUZsYWdzICY9IH5TdHlsZUNoYW5n
ZU1hc2s7IH0KKyAgICB2b2lkIHNldEhhc1ZhbGlkU3R5bGUoKTsKIAogICAgIGJvb2wgaXNMaW5r
KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0xpbmtGbGFnKTsgfQogICAgIHZvaWQgc2V0SXNM
aW5rKGJvb2wgZmxhZykgeyBzZXRGbGFnKGZsYWcsIElzTGlua0ZsYWcpOyB9CkBAIC01OTcsOCAr
NTg1LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICAvLyBUaGVzZSBiaXRzIGFyZSB1c2VkIGJ5IGRl
cml2ZWQgY2xhc3NlcywgcHVsbGVkIHVwIGhlcmUgc28gdGhleSBjYW4KICAgICAgICAgLy8gYmUg
c3RvcmVkIGluIHRoZSBzYW1lIG1lbW9yeSB3b3JkIGFzIHRoZSBOb2RlIGJpdHMgYWJvdmUuCiAg
ICAgICAgIElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnID0gMSA8PCAxMywgLy8gRWxlbWVu
dAotCi0gICAgICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQg
fCAxIDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpIHwgMSA8PCAobm9kZVN0eWxlQ2hhbmdl
U2hpZnQgKyAyKSwKKyAgICAgICAgU3R5bGVWYWxpZGl0eVNoaWZ0ID0gMTQsCisgICAgICAgIFN0
eWxlVmFsaWRpdHlNYXNrID0gMyA8PCBTdHlsZVZhbGlkaXR5U2hpZnQsCisgICAgICAgIFN0eWxl
UmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnID0gMSA8PCAxNiwKICAgICAgICAg
SXNFZGl0aW5nVGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxlbWVudEZsYWcgPSAxIDw8IDE3LAogICAg
ICAgICBIYXNGb2N1c1dpdGhpbiA9IDEgPDwgMTgsCiAgICAgICAgIEhhc1N5bnRoZXRpY0F0dHJD
aGlsZE5vZGVzRmxhZyA9IDEgPDwgMTksCkBAIC02NTksNyArNjQ4LDcgQEAgcHJvdGVjdGVkOgog
CiAgICAgdm9pZCBzZXRUcmVlU2NvcGUoVHJlZVNjb3BlJiBzY29wZSkgeyBtX3RyZWVTY29wZSA9
ICZzY29wZTsgfQogCi0gICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5cGUgY2hh
bmdlVHlwZSkgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5TdHlsZUNoYW5nZU1hc2sp
IHwgY2hhbmdlVHlwZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0
eSwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUgPSBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZTo6Tm9y
bWFsKTsKICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7CiAKICAgICBS
ZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVjdG9yPE5vZGVPclN0
cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNjgyLDYgKzY3MSw4IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPj4q
IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKIAor
ICAgIHZvaWQgYWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHksIFN0eWxlOjpJbnZh
bGlkYXRpb25Nb2RlKTsKKwogICAgIGludCBtX3JlZkNvdW50OwogICAgIG11dGFibGUgdWludDMy
X3QgbV9ub2RlRmxhZ3M7CiAKQEAgLTc3Myw2ICs3NjQsMjIgQEAgaW5saW5lIENvbnRhaW5lck5v
ZGUqIE5vZGU6OnBhcmVudE5vZGVHdQogICAgIHJldHVybiBwYXJlbnROb2RlKCk7CiB9CiAKK2lu
bGluZSBTdHlsZTo6VmFsaWRpdHkgTm9kZTo6c3R5bGVWYWxpZGl0eSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlOjpWYWxpZGl0eT4oKG1fbm9kZUZsYWdzICYgU3R5bGVW
YWxpZGl0eU1hc2spID4+IFN0eWxlVmFsaWRpdHlTaGlmdCk7Cit9CisKK2lubGluZSBib29sIE5v
ZGU6OnN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSBjb25zdAoreworICAg
IHJldHVybiBnZXRGbGFnKFN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFn
KTsKK30KKworaW5saW5lIHZvaWQgTm9kZTo6c2V0SGFzVmFsaWRTdHlsZSgpCit7CisgICAgbV9u
b2RlRmxhZ3MgJj0gflN0eWxlVmFsaWRpdHlNYXNrOworICAgIGNsZWFyRmxhZyhTdHlsZVJlc29s
dXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcg
KzE1Myw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEUKICAgICAg
ICAgLS1tX3JlcXVpcmVkQ291bnQ7CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0b24pIHsK
LSAgICAgICAgYnV0dG9uLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGJ1dHRvbi0+
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9u
ID09IGJ1dHRvbikgewogICAgICAgICAgICAgbV9jaGVja2VkQnV0dG9uID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpzZXROZWVkc1N0eWxlUmVjYQogewogICAg
IGZvciAoYXV0byYgYnV0dG9uIDogbV9tZW1iZXJzKSB7CiAgICAgICAgIEFTU0VSVChidXR0b24t
PmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgICAgIGJ1dHRvbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDE0ICsxMTgsOCBAQCBib29sIFNoYWRvd1Jvb3Q6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5CiAK
IHZvaWQgU2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKGJvb2wgdmFsdWUpCiB7
Ci0gICAgaWYgKGlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1ZSAh
PSBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSkgewotICAgICAgICBtX3Jlc2V0U3R5bGVJbmhlcml0
YW5jZSA9IHZhbHVlOwotICAgICAgICBpZiAoaG9zdCgpKQotICAgICAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOwotICAgIH0KKyAgICAvLyBJZiB0aGlzIHdhcyBldmVyIGNoYW5nZWQgYWZ0
ZXIgaW5pdGlhbGl6YXRpb24sIGNoaWxkIHN0eWxlcyB3b3VsZCBuZWVkIHRvIGJlIGludmFsaWRh
dGVkIGhlcmUuCisgICAgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgPSB2YWx1ZTsKIH0KIAogUmVm
PE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25lTm9kZUludGVybmFsKERvY3VtZW50JiwgQ2xvbmluZ09w
ZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAkocmV2aXNp
b24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFNsb3RBc3NpZ25tZW50OjphZGRTbG90
RWxlbWVudEJ5TmFtCiAjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBkbyBhIHRhcmdldGVkIHJlY29uc3RydWN0aW9uLgotICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgc2hhZG93Um9v
dC5ob3N0KCktPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIAogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2xvdE5hbWUgPSBzbG90TmFtZUZyb21BdHRyaWJ1dGVWYWx1
ZShuYW1lKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc2xvdHMuYWRkKHNsb3ROYW1lLCBzdGQ6
OnVuaXF1ZV9wdHI8U2xvdEluZm8+KCkpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgU2xvdEFz
c2lnbm1lbnQ6OnJlbW92ZVNsb3RFbGVtZW50QnkKICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIGhv
c3QgPSBzaGFkb3dSb290Lmhvc3QoKSkgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGRv
IGEgdGFyZ2V0ZWQgcmVjb25zdHJ1Y3Rpb24uCi0gICAgICAgIGhvc3QtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgaG9zdC0+aW52YWxpZGF0ZVN0
eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogCiAgICAgYXV0byBpdCA9IG1fc2xvdHMuZmlu
ZChzbG90TmFtZUZyb21BdHRyaWJ1dGVWYWx1ZShuYW1lKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
aXQgIT0gbV9zbG90cy5lbmQoKSk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBTbG90QXNzaWdu
bWVudDo6ZGlkQ2hhbmdlU2xvdChjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY2hh
bmdlVHlwZSA9PSBDaGFuZ2VUeXBlOjpEaXJlY3RDaGlsZCkgewotICAgICAgICBzaGFkb3dSb290
Lmhvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAg
ICAgICBzaGFkb3dSb290Lmhvc3QoKS0+aW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3Vi
dHJlZSgpOwogICAgICAgICBtX3Nsb3RBc3NpZ25tZW50c0lzVmFsaWQgPSBmYWxzZTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZChjb24KICAgICAgICAgc3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKG5ld1ZhbHVlLCByZWFzb24pOwog
ICAgIGVsc2UgaWYgKGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpKSB7CiAgICAgICAgIGVs
ZW1lbnREYXRhKCktPnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSh0cnVlKTsK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAg
IGludmFsaWRhdGVTdHlsZSgpOwogICAgIH0KIAogICAgIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCByZWFzb24pOwpAQCAtMjE2LDcgKzIxNiw3IEBA
IHZvaWQgU3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2UKIAogICAgIGVsZW1lbnRE
YXRhKCktPnNldFN0eWxlQXR0cmlidXRlSXNEaXJ0eShmYWxzZSk7CiAKLSAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGUoKTsKICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoZG9jdW1l
bnQoKSwgKnRoaXMpOwogfQogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50
OjppbnZhbGlkYXRlU3R5bGVBdHRyaQogICAgICAgICBkb2N1bWVudCgpLnNldEhhc0VsZW1lbnRV
c2luZ1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpOwogCiAgICAgZWxlbWVudERhdGEoKS0+c2V0U3R5
bGVBdHRyaWJ1dGVJc0RpcnR5KHRydWUpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHlsZSgpOwogfQogCiB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCShyZXZpc2lv
biAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMSw3ICsyMjEsNyBAQCBSZWY8VGV4dD4gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0
KERvCiB2b2lkIFRleHQ6OnVwZGF0ZVJlbmRlcmVyQWZ0ZXJDb250ZW50Q2hhbmdlKHVuc2lnbmVk
IG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSkKIHsK
ICAgICBBU1NFUlQocGFyZW50Tm9kZSgpKTsKLSAgICBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkgPT0g
UmVjb25zdHJ1Y3RSZW5kZXJUcmVlKQorICAgIGlmIChzdHlsZVZhbGlkaXR5KCkgPj0gU3R5bGU6
OlZhbGlkaXR5OjpTdWJ0cmVlQW5kUmVuZGVyZXJzSW52YWxpZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byB0ZXh0VXBkYXRlID0gc3RkOjptYWtlX3VuaXF1ZTxTdHlsZTo6VXBkYXRlPihk
b2N1bWVudCgpKTsKQEAgLTIzNCw3ICsyMzQsNiBAQCB2b2lkIFRleHQ6OnVwZGF0ZVJlbmRlcmVy
QWZ0ZXJDb250ZW50Q2hhCiAgICAgICAgIHJlbmRlcmVyLT5zZXRUZXh0V2l0aE9mZnNldChkYXRh
KCksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKLQog
I2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIHZvaWQgVGV4dDo6Zm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGbwogICAgICAg
ICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxl
bWVudD4obV9kb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkpCi0gICAg
ICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGVsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KIApAQCAtODIsNyArODIs
NyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAgICAgICAgIHJl
dHVybjsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50
PihtX2RvY3VtZW50KSkgewogICAgICAgICBpZiAobGlua0hhc2hGb3JFbGVtZW50KG1fZG9jdW1l
bnQsIGVsZW1lbnQpID09IGxpbmtIYXNoKQotICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4Myw3ICsxOTgzLDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBlbGVt
ZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXItPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlciwgQ29udHJvbFN0YXRl
czo6Rm9jdXNTdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDcgKzk1LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzU3RlcHBhYgogCiB2
b2lkIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCkK
IHsKLSAgICBlbGVtZW50KCkuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQoKS5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIERlY2ltYWwgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBEZWNp
bWFsJiBkZWZhdWx0VmFsdWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJ
bnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlu
cHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIEZpbGVJ
bnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBj
bGVhciB0aGUgZmlsZSBsaXN0LCBvciByZXBsYWNlIGl0IHdpdGggYSBuZXcgZW1wdHkgb25lIGhl
cmU/IFRoaXMgaXMgb2JzZXJ2YWJsZSBmcm9tIEphdmFTY3JpcHQgdGhyb3VnaCBjdXN0b20gcHJv
cGVydGllcy4KICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIG1faWNvbiA9IG51bGxwdHI7
Ci0gICAgZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50KCkuaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBGaWxl
SW5wdXRUeXBlOjpjcmVhdGVGaWxlTGlzdChjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5m
bz4mIGZpbGVzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBib29sIHdhc0xpbmsg
PSBpc0xpbmsoKTsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxk
UHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3YXNMaW5rICE9IGlzTGluaygpKQot
ICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoaXNMaW5rKCkpIHsKICAgICAgICAgICAg
IFN0cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFs
dWUpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAm
JiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJv
ZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQg
SFRNTEJvZHlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFz
RWxlbWVuCiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1
cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRo
ZSBDYW52YXMKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVD
aGFuZ2UpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKQEAg
LTI1MCw3ICsyNTAsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVu
CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycyks
IHR5cGUpOwogICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcg
bGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKLSAgICAgICAgICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAg
ICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwpA
QCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJk
KCkpCiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBh
Y2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KHRoaXMpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKKyAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5pbnZhbGlk
YXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsNyArODk3LDcg
QEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZgogICAgICAgICByZXR1
cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50VG9BZGp1c3QgOiBlbGVtZW50TGluZWFnZSh0aGlz
KSkgewogICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShlbGVtZW50VG9B
ZGp1c3QpKSB7Ci0gICAgICAgICAgICBlbGVtZW50VG9BZGp1c3Quc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgZWxlbWVudFRvQWRqdXN0LmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTkwOSw3ICs5
MDksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJlCiAgICAgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxpdHkoJnN0cm9uZ0RpcmVjdGlv
bmFsaXR5VGV4dE5vZGUpOwogICAgIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkodGhpcywg
dHJ1ZSwgc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgaWYgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSAhPSB0ZXh0RGlyZWN0aW9uKQotICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5l
ZWRlZEFmdGVyQ2hpbGRyZW5DaGFuZ2VkKEVsZW1lbnQqIGJlZm9yZUNoYW5nZSwgQ2hpbGRDaGFu
Z2VUeXBlIGNoYW5nZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBA
QCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmFkZEludmFsaWREZXNjCiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghbV9pbnZhbGlkRGVzY2VuZGFudHMuY29udGFpbnMoJmludmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQpLCAiVXBkYXRpbmcgdGhlIGZpZWxkc2V0IG9uIHZhbGlkaXR5IGNoYW5nZSBp
cyBub3QgYW4gZWZmaWNpZW50IG9wZXJhdGlvbiwgaXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVu
IG5lY2Vzc2FyeS4iKTsKIAogICAgIGlmIChtX2ludmFsaWREZXNjZW5kYW50cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgIG1faW52YWxpZERlc2NlbmRhbnRzLmFkZCgmaW52YWxpZEZvcm1D
b250cm9sRWxlbWVudCk7CiB9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEhUTUxGaWVsZFNl
dEVsZW1lbnQ6OnJlbW92ZUludmFsaWRECiAKICAgICBtX2ludmFsaWREZXNjZW5kYW50cy5yZW1v
dmUoJmZvcm1Db250cm9sRWxlbWVudCk7CiAgICAgaWYgKG1faW52YWxpZERlc2NlbmRhbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmRpc2FibGVkQXR0CiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVk
U3RhdGVDaGFuZ2VkKCkKIHsKICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Ci0gICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
ICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2Uo
KSkKICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCks
IENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YQogdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQoKQogewogICAgIHNldE5lZWRzV2ls
bFZhbGlkYXRlQ2hlY2soKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0dAogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAg
ICAgLy8gU3R5bGUgcmVjYWxjdWxhdGlvbiBpcyBuZWVkZWQgYmVjYXVzZSBzdHlsZSBzZWxlY3Rv
cnMgbWF5IGluY2x1ZGUKICAgICAvLyA6cmVxdWlyZWQgYW5kIDpvcHRpb25hbCBwc2V1ZG8tY2xh
c3Nlcy4KLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRBdXRvZm9jdXMoSFRNTEZvcm1Db250
cm9sRWxlbWVudCogZWxlbWVudCkKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsCiAgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxsVmFs
aWRhdGU7CiAKICAgICB1cGRhdGVWYWxpZGl0eSgpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoIW1fd2lsbFZh
bGlkYXRlICYmICF3YXNWYWxpZCkgewogICAgICAgICByZW1vdmVJbnZhbGlkRWxlbWVudFRvQW5j
ZXN0b3JGcm9tSW5zZXJ0aW9uUG9pbnQoKnRoaXMsIHBhcmVudE5vZGUoKSk7CkBAIC01NTUsNyAr
NTU1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZAogCiAgICAg
aWYgKHdpbGxWYWxpZGF0ZSAmJiBtX2lzVmFsaWQgIT0gd2FzVmFsaWQpIHsKICAgICAgICAgLy8g
VXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6aW52YWxpZC4K
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CiAKICAgICAgICAgaWYgKCFtX2lzVmFsaWQpIHsKICAgICAgICAgICAgIGFk
ZEludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNlcnRpb25Qb2ludCgqdGhpcywgcGFyZW50
Tm9kZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDcgKzU5MSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
OjpyZWdpc3RlckZvcm1FbGVtZW4KICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgY29u
dHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplKTsKICAgICAgICAgaWYg
KGNvbnRyb2wuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgIGlmICgh
bV9kZWZhdWx0QnV0dG9uKQotICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICAgICAgICAgIGNvbnRyb2wuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJl
ZSgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc2V0RGVmYXVsdEJ1dHRv
bigpOwogICAgICAgICB9CkBAIC02MTksNyArNjE5LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVySW52YWxpZEFzcwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50
Jj4oZm9ybUNvbnRyb2xFbGVtZW50KS5tYXRjaGVzSW52YWxpZFBzZXVkb0NsYXNzKCkpOwogCiAg
ICAgaWYgKG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbHMuaXNFbXB0eSgpKQotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICBtX2ludmFsaWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xzLmFkZCgmZm9ybUNvbnRy
b2xFbGVtZW50KTsKIH0KIApAQCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
OjpyZW1vdmVJbnZhbGlkQXNzb2MKIHsKICAgICBpZiAobV9pbnZhbGlkQXNzb2NpYXRlZEZvcm1D
b250cm9scy5yZW1vdmUoJmZvcm1Db250cm9sRWxlbWVudCkpIHsKICAgICAgICAgaWYgKG1faW52
YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogICAgIH0KIH0KIApAQCAtNzM3LDkgKzczNyw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpy
ZXNldERlZmF1bHRCdXR0b24KICAgICBkZWZhdWx0QnV0dG9uKCk7CiAgICAgaWYgKG1fZGVmYXVs
dEJ1dHRvbiAhPSBvbGREZWZhdWx0KSB7CiAgICAgICAgIGlmIChvbGREZWZhdWx0KQotICAgICAg
ICAgICAgb2xkRGVmYXVsdC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgb2xk
RGVmYXVsdC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAobV9kZWZh
dWx0QnV0dG9uKQotICAgICAgICAgICAgbV9kZWZhdWx0QnV0dG9uLT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBtX2RlZmF1bHRCdXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
RWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1
Myw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmZpbmlzaGVkSW5zZXIKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZFJl
bmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICBzZXROYW1lQW5kT3BlblVSTCgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxNSArMTIyLDE1IEBAIFNWR0RvY3VtZW50KiBI
VE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9p
ZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTdHls
ZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKK3ZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzY2hl
ZHVsZWludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKQogewogICAgIGlmIChTdHls
ZTo6cG9zdFJlc29sdXRpb25DYWxsYmFja3NBcmVTdXNwZW5kZWQoKSkgewogICAgICAgICBSZWZQ
dHI8SFRNTEZyYW1lT3duZXJFbGVtZW50PiBlbGVtZW50ID0gdGhpczsKLSAgICAgICAgU3R5bGU6
OnF1ZXVlUG9zdFJlc29sdXRpb25DYWxsYmFjayhbZWxlbWVudCwgY2hhbmdlVHlwZV17Ci0gICAg
ICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKGNoYW5nZVR5cGUpOworICAgICAg
ICBTdHlsZTo6cXVldWVQb3N0UmVzb2x1dGlvbkNhbGxiYWNrKFtlbGVtZW50XSB7CisgICAgICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAgICAg
ICAgIH0pOwogICAgIH0gZWxzZQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKGNoYW5nZVR5
cGUpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAK
IGJvb2wgU3ViZnJhbWVMb2FkaW5nRGlzYWJsZXI6OmNhbkxvYWRGcmFtZShIVE1MRnJhbWVPd25l
ckVsZW1lbnQmIG93bmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5oCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1
YmxpYzoKIAogICAgIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X3NhbmRib3hGbGFnczsgfQogCi0gICAgdm9pZCBzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMo
U3R5bGVDaGFuZ2VUeXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICB2b2lkIHNjaGVkdWxlaW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBIVE1MRnJhbWVT
ZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZQogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICBtX3Jvd0xlbmd0aHMgPSBuZXdMZW5ndGhBcnJheSh2YWx1ZS5zdHJpbmco
KSwgbV90b3RhbFJvd3MpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8g
b3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgbV9yb3dMZW5ndGhzIGRpZCBub3QgY2hhbmdlLgotICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05
Nyw3ICs5Nyw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9jb2xMZW5ndGhzID0g
bmV3TGVuZ3RoQXJyYXkodmFsdWUuc3RyaW5nKCksIG1fdG90YWxDb2xzKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9wdGltaXplIHRoZSBjYXNlIHdoZXJlIG1fY29s
TGVuZ3RocyBkaWQgbm90IGNoYW5nZS4KLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjAyLDEwICsyMDIsOCBAQCB2b2lkIEhUTUxGcmFt
ZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhCiAKIGJvb2wgSFRNTEZyYW1lU2V0RWxlbWVudDo6
d2lsbFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpCiB7Ci0gICAgaWYgKG5lZWRzU3R5bGVSZWNh
bGMoKSAmJiByZW5kZXJlcigpKSB7CisgICAgaWYgKG5lZWRzU3R5bGVSZWNhbGMoKSAmJiByZW5k
ZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCgpOwotICAgICAgICBj
bGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3
NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIGlubGluZSB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnJ1blBvc3RUeXAKICNlbmRpZgogCiAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKGRvY3VtZW50KCkuZm9j
dXNlZEVsZW1lbnQoKSA9PSB0aGlzKQogICAgICAgICB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoU2Vs
ZWN0aW9uUmVzdG9yYXRpb25Nb2RlOjpSZXN0b3JlLCBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZl
YWwpOwpAQCAtNjk1LDE0ICs2OTUsMTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjbwogICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc2V0Q2hhbmdlZCBpZiB0aGUg
Zm9ybSBpcyBsb29raW5nIGF0IHRoZSBkZWZhdWx0IHZhbHVlIHJpZ2h0IG5vdy4KICAgICAgICAg
aWYgKCFoYXNEaXJ0eVZhbHVlKCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlz
aWJpbGl0eSgpOwotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIHNldEZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogICAgICAgICB1cGRhdGVWYWxp
ZGl0eSgpOwogICAgICAgICBtX3ZhbHVlQXR0cmlidXRlV2FzVXBkYXRlZEFmdGVyUGFyc2luZyA9
ICFtX3BhcnNpbmdJblByb2dyZXNzOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjaGVja2VkQXR0
cikgewogICAgICAgICBpZiAobV9pbnB1dFR5cGUtPmlzQ2hlY2thYmxlKCkpCi0gICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAKICAgICAgICAgLy8gQW5vdGhlciByYWRpbyBidXR0b24gaW4gdGhlIHNhbWUg
Z3JvdXAgbWlnaHQgYmUgY2hlY2tlZCBieSBzdGF0ZQogICAgICAgICAvLyByZXN0b3JlLiBXZSBz
aG91bGRuJ3QgY2FsbCBzZXRDaGVja2VkKCkgZXZlbiBpZiB0aGlzIGhhcyB0aGUgY2hlY2tlZApA
QCAtNzMxLDkgKzczMSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y28KICAgICAgICAgbV9tYXhSZXN1bHRzID0gIXZhbHVlLmlzTnVsbCgpID8gc3RkOjptaW4odmFs
dWUudG9JbnQoKSwgbWF4U2F2ZWRSZXN1bHRzKSA6IC0xOwogICAgICAgICBtX2lucHV0VHlwZS0+
bWF4UmVzdWx0c0F0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gYXV0
b3NhdmVBdHRyKSB7Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBpbmNyZW1l
bnRhbEF0dHIpIHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IG1pbkF0dHIp
IHsKICAgICAgICAgbV9pbnB1dFR5cGUtPm1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpOwogICAg
ICAgICB1cGRhdGVWYWxpZGl0eSgpOwpAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KIAogICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmli
dXRlID0gZmFsc2U7CiAgICAgbV9pc0NoZWNrZWQgPSBub3dDaGVja2VkOwotICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBp
ZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQogICAg
ICAgICBidXR0b25zLT51cGRhdGVDaGVja2VkU3RhdGUodGhpcyk7CkBAIC05MjEsNyArOTIxLDcg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbgogICAgICAgICBkaXNw
YXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICB9CiAKLSAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1ZSkKQEAgLTkzMSw3
ICs5MzEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUoCiAKICAg
ICBtX2lzSW5kZXRlcm1pbmF0ZSA9IG5ld1ZhbHVlOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5k
ZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6
Q2hlY2tlZFN0YXRlKTsKQEAgLTEzMzAsNyArMTMzMCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0QXV0b0ZpbGxlZChib28KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc0F1dG9GaWxs
ZWQgPSBhdXRvRmlsbGVkOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2hv
d0F1dG9GaWxsQnV0dG9uKEF1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUpCkBA
IC0xNzg2LDcgKzE3ODYsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aEF0dHJp
YnV0CiAgICAgICAgIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKIAogICAgIC8vIEZJWE1FOiBEbyB3
ZSByZWFsbHkgbmVlZCB0byBkbyB0aGlzIGlmIHRoZSBlZmZlY3RpdmUgbWF4TGVuZ3RoIGhhcyBu
b3QgY2hhbmdlZD8KLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiB9CiAKQEAgLTE4MDIsNyAr
MTgwMiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6bWluTGVuZ3RoQXR0cmlidXQKICAgICAg
ICAgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOwogCiAgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSBu
ZWVkIHRvIGRvIHRoaXMgaWYgdGhlIGVmZmVjdGl2ZSBtaW5MZW5ndGggaGFzIG5vdCBjaGFuZ2Vk
PwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0
cmVlKCk7CiAgICAgdXBkYXRlVmFsaWRpdHkoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3
LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbgogICAgICAgICBi
b29sIHdhc0xpbmsgPSBpc0xpbmsoKTsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwo
KSAmJiAhc2hvdWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3YXNMaW5rICE9
IGlzTGluaygpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBwcm9jZXNzKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NzYsNyArNDU3Niw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZW5kZXIKICAgICBMT0coTWVkaWEsICJIVE1M
TWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKCVwKSIsIHRoaXMp
OwogCiAgICAgLy8gS2ljayBvZmYgYSBmYWtlIHJlY2FsY1N0eWxlIHRoYXQgd2lsbCB1cGRhdGUg
dGhlIGNvbXBvc2l0aW5nIHRyZWUuCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwog
fQogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpAQCAtNTU5MCw3ICs1
NTkwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZQogICAgIH0K
ICAgICAKICAgICBtX3BsYXllci0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIocGxhdGZvcm1MYXll
ciwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsZWFyVXNl
RmFsbGJhY2tDb250ZW50KCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJl
bmRlclRyZWUpOworICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsK
IH0KIAogc3RhdGljIHZvaWQgbWFwRGF0YVBhcmFtVG9TcmMoVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKQEAgLTM1NSw3ICszNTUsNyBAQCB2
b2lkIEhUTUxPYmplY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoCiAgICAgdXBkYXRlRG9jTmFt
ZWRJdGVtKCk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhdXNlRmFsbGJhY2tDb250ZW50KCkp
IHsKICAgICAgICAgc2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
IH0KICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsK
IH0KQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJGYWxs
YmFja0NvCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRl
U3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAKICAgICAvLyBCZWZvcmUgd2UgZ2l2ZSB1
cCBhbmQgdXNlIGZhbGxiYWNrIGNvbnRlbnQsIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgTUlN
RSB0eXBlIGlzc3VlLgogICAgIGF1dG8qIGxvYWRlciA9IGltYWdlTG9hZGVyKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZQogICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKIAogICAgIGlmIChuYW1l
ID09IGRpc2FibGVkQXR0cikKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTE9wdEdyb3VwRWxl
bWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMiArMTc0
LDEyIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAg
Ym9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CiAgICAgICAgIG1fZGlzYWJsZWQgPSAhdmFs
dWUuaXNOdWxsKCk7CiAgICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0g
ICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigp
LT50aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6RW5hYmxl
ZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzZWxlY3RlZEF0dHIp
IHsKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3
aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KICAgICAgICAgLy8gVGhlIHNwZWNpZmlj
YXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5nIHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUgb3IKQEAg
LTIyOSw3ICsyMjksNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRl
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTZWxlY3RlZCA9IHNlbGVjdGVkOwotICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAK
ICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgp
KQogICAgICAgICBzZWxlY3QtPmludmFsaWRhdGVTZWxlY3RlZEl0ZW1zKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTCiAgICAgcm9vdC0+c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOwogICAgIGlm
IChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1lbnQoKnJvb3QpKSB7CiAgICAg
ICAgIHNldERpc3BsYXlTdGF0ZShEaXNwbGF5aW5nUGx1Z2luUmVwbGFjZW1lbnQpOwotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGlu
dmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVMKICAgICBpZiAoc3RhdGUgPT0gUmVzdGFydGluZ1dp
dGhQZW5kaW5nTW91c2VDbGljayB8fCBzdGF0ZSA9PSBSZXN0YXJ0aW5nKSB7CiAgICAgICAgIG1f
aXNSZXN0YXJ0ZWRQbHVnaW4gPSB0cnVlOwogICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24gPSBO
ZXZlclNuYXBzaG90OwotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxl
Q2hhbmdlKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwog
ICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gRGlzcGxheWluZ1NuYXBzaG90KQogICAgICAg
ICAgICAgbV9yZW1vdmVTbmFwc2hvdFRpbWVyLnN0YXJ0T25lU2hvdChyZW1vdmVTbmFwc2hvdFRp
bWVyRGVsYXkpOwogICAgIH0KQEAgLTIzOSwxMyArMjM5LDEzIEBAIGJvb2wgSFRNTFBsdWdJbklt
YWdlRWxlbWVudDo6Y2hpbGRTaG91bGQKIGJvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6d2ls
bFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UgY2hhbmdlKQogewogICAgIC8vIE1ha2Ugc3VyZSBz
dHlsZSByZWNhbGNzIHNjaGVkdWxlZCBieSBhIGNoaWxkIHNoYWRvdyB0cmVlIGRvbid0IHRyaWdn
ZXIgcmVjb25zdHJ1Y3Rpb24gYW5kIGNhdXNlIGZsaWNrZXIuCi0gICAgaWYgKGNoYW5nZSA9PSBT
dHlsZTo6Tm9DaGFuZ2UgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPT0gTm9TdHlsZUNoYW5nZSkKKyAg
ICBpZiAoY2hhbmdlID09IFN0eWxlOjpOb0NoYW5nZSAmJiBzdHlsZVZhbGlkaXR5KCkgPT0gU3R5
bGU6OlZhbGlkaXR5OjpWYWxpZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBGSVhN
RTogVGhlcmUgc2hvdWRuJ3QgYmUgbmVlZCB0byBmb3JjZSByZW5kZXIgdHJlZSByZWNvbnN0cnVj
dGlvbiBoZXJlLgogICAgIC8vIEl0IGlzIG9ubHkgZG9uZSBiZWNhdXNlIGxvYWRpbmcgYW5kIGxv
YWQgZXZlbnQgZGlzcGF0Y2hpbmcgaXMgdGllZCB0byByZW5kZXIgdHJlZSBjb25zdHJ1Y3Rpb24u
CiAgICAgaWYgKCF1c2VGYWxsYmFja0NvbnRlbnQoKSAmJiBuZWVkc1dpZGdldFVwZGF0ZSgpICYm
IHJlbmRlcmVyKCkgJiYgIWlzSW1hZ2VUeXBlKCkgJiYgKGRpc3BsYXlTdGF0ZSgpICE9IERpc3Bs
YXlpbmdTbmFwc2hvdCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RS
ZW5kZXJUcmVlKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJl
ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpmaW5pc2hQYXJzaQogCiAgICAgc2V0TmVlZHNXaWRnZXRVcGRh
dGUodHJ1ZSk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQg
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9s
ZERvY3VtZW50KQpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6cHJlcGFyZUZvckQKIAogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN1bWVGcm9t
RG9jdW1lbnRTdXNwZW5zaW9uKCkKIHsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3Ry
dWN0UmVuZGVyVHJlZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJl
ZSgpOwogCiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1c3BlbnNp
b24oKTsKIH0KQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OnJlbW92ZVNuYXBzCiB7CiAgICAgbV9zbmFwc2hvdEltYWdlID0gbnVsbHB0cjsKICAgICBtX2lz
UmVzdGFydGVkUGx1Z2luID0gZmFsc2U7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0
aWNTdHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9
CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0
U25hcAogICAgICAgICByZXR1cm47CiAKICAgICBzZXREaXNwbGF5U3RhdGUoUmVzdGFydGluZyk7
Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGlu
dmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpkaXNwYXRjaFBlbmRpbmdNb3VzZUNsaWNrKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlk
RWxlbWVudFN0YXQKICAgICAgICAgYm9vbCB3YXNEZXRlcm1pbmF0ZSA9IHJlbmRlci0+aXNEZXRl
cm1pbmF0ZSgpOwogICAgICAgICByZW5kZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgICAg
IGlmICh3YXNEZXRlcm1pbmF0ZSAhPSBpc0RldGVybWluYXRlKCkpCi0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIG1fc2l6ZSA9IHNpemU7
CiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgICAgIGlmIChtX3NpemUgIT0gb2xkU2l6
ZSkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgp
OwogICAgICAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgICAgICAgICB1cGRhdGVW
YWxpZGl0eSgpOwogICAgICAgICB9CkBAIC03NDQsNyArNzQ0LDcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZQogICAgIC8vIE1hbnVhbCBzZWxlY3Rpb24gYW5jaG9y
IGlzIHJlc2V0IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBzZWxlY3QgcHJvZ3JhbW1hdGljYWxseS4K
ICAgICBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4ID0gLTE7CiAgICAgc2V0T3B0aW9uc0No
YW5nZWRPblJlbmRlcmVyKCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAoIWluRG9jdW1lbnQoKSkgewogICAgICAg
ICBpZiAoSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBjYWNoZWRIVE1MQ29sbGVjdGlvbihT
ZWxlY3RPcHRpb25zKSkKICAgICAgICAgICAgIGNvbGxlY3Rpb24tPmludmFsaWRhdGVDYWNoZShk
b2N1bWVudCgpKTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnBhcnNlTXVsdGlwbGVBdHQKICAgICBtX211bHRpcGxlID0gIXZhbHVlLmlzTnVsbCgpOwogICAg
IHVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgaWYgKG9sZFVzZXNNZW51TGlzdCAhPSB1c2VzTWVudUxp
c3QoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUp
OworICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAK
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlz
dCwgYm9vbCkKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJl
c2V0KCkKICAgICAgICAgZmlyc3RPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CiAKICAg
ICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIHVwZGF0ZVZhbGlkaXR5
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgi
CiAjaW5jbHVkZSAiR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uLmgiCkBAIC0yNjUsMjcgKzI2
NiwyOCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kCiAgICAgcm93
LT5yZW1vdmUoZWMpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNUYWJsZUNlbGxBbmNlc3Rv
cihOb2RlKiBuKQorc3RhdGljIGlubGluZSBib29sIGlzVGFibGVDZWxsQW5jZXN0b3IoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0aGVhZFRhZykg
fHwgbi0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwKLSAgICAgICAgICAgbi0+aGFzVGFnTmFtZSh0
Zm9vdFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0clRhZykgfHwKLSAgICAgICAgICAgbi0+aGFzVGFn
TmFtZSh0aFRhZyk7CisgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZSh0aGVhZFRhZykKKyAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRib2R5VGFnKQorICAgICAgICB8fCBlbGVtZW50
Lmhhc1RhZ05hbWUodGZvb3RUYWcpCisgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0clRh
ZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKTsKIH0KIAotc3RhdGljIGJv
b2wgc2V0VGFibGVDZWxsc0NoYW5nZWQoTm9kZSogbikKK3N0YXRpYyBib29sIHNldFRhYmxlQ2Vs
bHNDaGFuZ2VkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG4pOwogICAgIGJvb2wg
Y2VsbENoYW5nZWQgPSBmYWxzZTsKIAotICAgIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFnKSkKKyAg
ICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRkVGFnKSkKICAgICAgICAgY2VsbENoYW5nZWQgPSB0
cnVlOwotICAgIGVsc2UgaWYgKGlzVGFibGVDZWxsQW5jZXN0b3IobikpIHsKLSAgICAgICAgZm9y
IChOb2RlKiBjaGlsZCA9IG4tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCisgICAgZWxzZSBpZiAoaXNUYWJsZUNlbGxBbmNlc3RvcihlbGVtZW50KSkg
eworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oZWxl
bWVudCkpCiAgICAgICAgICAgICBjZWxsQ2hhbmdlZCB8PSBzZXRUYWJsZUNlbGxzQ2hhbmdlZChj
aGlsZCk7CiAgICAgfQogCiAgICAgaWYgKGNlbGxDaGFuZ2VkKQotICAgICAgIG4tPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAKICAgICByZXR1cm4gY2VsbENoYW5nZWQ7CiB9CkBAIC00MjIsMTAgKzQyNCwxMCBAQCB2
b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAgICAgaWYgKGJvcmRlcnNC
ZWZvcmUgIT0gY2VsbEJvcmRlcnMoKSB8fCBvbGRQYWRkaW5nICE9IG1fcGFkZGluZykgewogICAg
ICAgICBtX3NoYXJlZENlbGxTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGJvb2wgY2VsbENoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqdGhpcykpCiAgICAgICAgICAgICBjZWxsQ2hh
bmdlZCB8PSBzZXRUYWJsZUNlbGxzQ2hhbmdlZChjaGlsZCk7CiAgICAgICAgIGlmIChjZWxsQ2hh
bmdlZCkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVD
b21tb24KICAgICBzZXRJbm5lclRleHRWYWx1ZShtX3ZhbHVlKTsKICAgICBzZXRMYXN0Q2hhbmdl
V2FzTm90VXNlckVkaXQoKTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsKLSAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAKICAgICAv
LyBTZXQgdGhlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIHRleHQgdmFsdWUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQCiAgICAgaWYgKHBsYWNlSG9sZGVyV2Fz
VmlzaWJsZSA9PSBtX2lzUGxhY2Vob2xkZXJWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogfQogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFy
dChpbnQgc3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAy
MDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Myw3ICs2ODMsNyBAQCBib29sIElucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0
ZUZyb21BCiB2b2lkIElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRW
YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhh
dmlvcikKIHsKICAgICBlbGVtZW50KCkuc2V0VmFsdWVJbnRlcm5hbChzYW5pdGl6ZWRWYWx1ZSwg
ZXZlbnRCZWhhdmlvcik7Ci0gICAgZWxlbWVudCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICBlbGVtZW50KCkuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIGlmICghdmFsdWVD
aGFuZ2VkKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChldmVudEJlaGF2aW9yKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDc0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIE51bWJlcklucHV0VHlwZTo6bWluT3JNYXhB
dHRyaWJ1dGVDCiB7CiAgICAgSW5wdXRUeXBlOjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsK
ICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwotICAgIGVs
ZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC5y
ZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nCiAgICAgZWxlbWVudCgpLnNldFZhbHVl
RnJvbVJlbmRlcmVyKGlubmVyVGV4dCk7CiAgICAgZWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVy
VmlzaWJpbGl0eSgpOwogICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgY2hhbmdlLgotICAgIGVs
ZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGRpZFNldFZhbHVlQnlVc2VyRWRpdCgpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3
KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgTWF0aE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QKICAgICAgICAgYm9vbCB3YXNMaW5rID0gaXNMaW5rKCk7CiAgICAgICAgIHNldElzTGlu
ayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwogICAgICAg
ICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gcm93c3BhbkF0dHIpIHsKICAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxl
Q2VsbD4ocmVuZGVyZXIoKSkgJiYgaGFzVGFnTmFtZShtdGRUYWcpKQogICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyZXIoKSkuY29sU3Bhbk9yUm93U3BhbkNoYW5n
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxTZWxlY3RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQg
TWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWQKICAgICAgICAgUmVuZGVyVHJlZVVw
ZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKCptX3NlbGVjdGVkQ2hpbGQpOwogCiAgICAgbV9zZWxl
Y3RlZENoaWxkID0gbmV3U2VsZWN0ZWRDaGlsZDsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIE1hdGhNTFNlbGVj
dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmIGV2ZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9u
IDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6
c2V0TmVlZHNTdHlsZVJlY2FsYygKIHsKICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7
CiAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVB
bmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIGRvdWJsZSBBbmltYXRpb25CYXNlOjpkdXJhdGlv
bigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpj
bGVhcihSCiAgICAgfSk7CiAgICAgCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBk
byBhbnl0aGluZyBPUiB3ZSBhcmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAv
LyBkbyBhIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB3aGVuIHN1c3BlbmRlZCkuCisgICAgLy8gZG8g
YSBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCkgd2hlbiBzdXNwZW5kZWQpLgogICAgIFJlZlB0
cjxDb21wb3NpdGVBbmltYXRpb24+IGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy50
YWtlKCZyZW5kZXJlcik7CiAgICAgQVNTRVJUKGFuaW1hdGlvbik7CiAgICAgcmVuZGVyZXIuc2V0
SXNDU1NBbmltYXRpbmcoZmFsc2UpOwpAQCAtMTM4LDcgKzEzOCw3IEBAIGRvdWJsZSBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXQKICAgICAgICAgICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIGNhbGxlZFNldENoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZQogICAgIH0KIAogICAgIGZvciAoYXV0byYgY2hh
bmdlIDogbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+c2V0TmVl
ZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGNoYW5nZS0+aW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCiAgICAgbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2guY2xlYXIoKTsKIApAQCAtMzU4LDcgKzM1OCw3IEBAIGJvb2wgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnBhdXNlQW4KIAogICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKCpyZW5kZXJlcik7CiAg
ICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkg
ewotICAgICAgICByZW5kZXJlci0+ZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRo
ZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM3Myw3
ICszNzMsNyBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyCiAKICAg
ICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0
ZUFuaW1hdGlvbigqcmVuZGVyZXIpOwogICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24ucGF1c2VU
cmFuc2l0aW9uQXRUaW1lKGNzc1Byb3BlcnR5SUQocHJvcGVydHkpLCB0KSkgewotICAgICAgICBy
ZW5kZXJlci0+ZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwogICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTU5MCw3ICs1OTAsNyBAQCB2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsKICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxlbWVu
dC0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNo
ZSk7CiAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5
bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lv
biAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbQogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgbV9uZWVkc1RvU2V0U2l6ZUZv
ckFsdFRleHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNTdHls
ZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudCgp
LT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4NSw3ICs2OTg1
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKIHsKICAgICAvLyBX
ZSB1c2UgdGhlIGVuY2xvc2luZyBlbGVtZW50IHNvIHRoYXQgd2UgcmVjYWxjdWxhdGUgc3R5bGUg
Zm9yIHRoZSBhbmNlc3RvciBvZiBhbiBhbm9ueW1vdXMgb2JqZWN0LgogICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gZW5jbG9zaW5nRWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5zZXROZWVk
c1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgZWxlbWVudC0+aW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgIHJlbmRlcmVyKCkucmVwYWlu
dCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
NDksNyArMzU0OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGEK
ICAgICAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lOiB7CiAgICAg
ICAgICAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgLy8gZm9yIHRoZSBmcmFt
ZSdzIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCi0gICAgICAgICAgICBtX3JlbmRl
clZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKS0+c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVj
YWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIG1fcmVuZGVyVmlldy5kb2N1
bWVudCgpLm93bmVyRWxlbWVudCgpLT5zY2hlZHVsZWludmFsaWRhdGVTdHlsZUFuZExheWVyQ29t
cG9zaXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU3
OCw3ICszNTc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYQog
ICAgICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAKICAg
ICAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9yZW5kZXJW
aWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgICAgICBvd25lckVsZW1lbnQt
PnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxlaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21w
b3NpdGlvbigpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBSb290TGF5ZXJBdHRh
Y2hlZFZpYUNocm9tZUNsaWVudDogewpAQCAtMzYzNyw3ICszNjM3LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6Om5vdGlmeUlGcmFtZQogICAgIC8vIENvbXBvc2l0aW5nIGFmZmVjdHMg
dGhlIGFuc3dlciB0byBSZW5kZXJJRnJhbWU6OnJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpLCBzbwogICAgIC8vIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBzdHlsZSByZWNhbGMgaW4gb3Vy
IHBhcmVudCBkb2N1bWVudC4KICAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVs
ZW1lbnQgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKLSAgICAgICAg
b3duZXJFbGVtZW50LT5zY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVD
aGFuZ2UpOworICAgICAgICBvd25lckVsZW1lbnQtPnNjaGVkdWxlaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5
ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIwNzQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDg4LDEzICsxNDg4LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFn
U3RhdGUoYm9vbCAKIHsKICAgICBib29sIHZhbHVlQ2hhbmdlZCA9IChkcmFnT24gIT0gaXNEcmFn
Z2luZygpKTsKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7Ci0gICAgaWYgKHZhbHVlQ2hhbmdl
ZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0ZWRCeURyYWcoKSB8fCAoaXM8RWxlbWVudD4o
Km5vZGUoKSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUoKSkuY2hpbGRyZW5BZmZlY3RlZEJ5
RHJhZygpKSkpCi0gICAgICAgIG5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCiAgICAg
aWYgKCFpczxSZW5kZXJFbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRv
JiByZW5kZXJFbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpOwogCi0gICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNhc3Q8
UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIHJlbmRlckVs
ZW1lbnQuZWxlbWVudCgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgcmVuZGVyRWxl
bWVudC5lbGVtZW50KCktPmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpCisgICAgICAgIHJlbmRl
ckVsZW1lbnQuZWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisKKyAgICBm
b3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihyZW5kZXJFbGVt
ZW50KSkKICAgICAgICAgY2hpbGQudXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jlc291cmNlc0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZv
aWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmcKICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
LCBmYWxzZSk7CiAKICAgICBpZiAocmVuZGVyZXIuZWxlbWVudCgpICYmICFyZW5kZXJlci5lbGVt
ZW50KCktPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZW5kZXJlci5lbGVtZW50KCktPnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICByZW5kZXJlci5l
bGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIAogdm9p
ZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRl
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTYgKzY1LDE2IEBAIHZvaWQgQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZh
bGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0hUTUwpIHsKLSAgICAgICAgbV9lbGVt
ZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVt
ZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxl
KCkuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LnNl
dE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50Lmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBt
X2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7CiAKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVs
ZW1lbnQ+KG1fZWxlbWVudCkuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNp
b24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTEgKzExNiwxMSBAQCB2b2lkIENsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aGFkb3dSb290ICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuaGFzU2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzKCkpIHsKLSAgICAgICAgbV9lbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0
eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxl
UmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
KCk7CiAKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KG1fZWxlbWVudCkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOSAr
NjEsMTkgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3QoKSAmJiBydWxlU2V0cy5h
dXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKSB7Ci0gICAgICAgIG1f
ZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgIG1f
ZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5n
ZSk7CisgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogCiAgICAgLy8gVGhpcyBjb3Vs
ZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQgZGVzY2VuZGFudCBpbnZhbGlk
YXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi4KICAgICAvLyBIb3dldmVy
IHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUgYW5kIHRoaXMgaXMgcHJvYmFi
bHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1
cmVzLgogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlID0gcnVsZVNldHMuZmVhdHVy
ZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkLmltcGwo
KSk7CiAgICAgaWYgKG1heUFmZmVjdERlc2NlbmRhbnRTdHlsZSkKLSAgICAgICAgbV9lbGVtZW50
LnNldE5lZWRzU3R5bGVSZWNhbGMoRnVsbFN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVtZW50
LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBlbHNlCi0gICAgICAgIG1fZWxlbWVu
dC5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbV9lbGVt
ZW50LmludmFsaWRhdGVTdHlsZSgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3
ICsyODksNyBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVFbGVtZW50UmVuCiAgICAg
ICAgIHJldHVybjsKICAgICBhdXRvJiByZW5kZXJlciA9ICplbGVtZW50LnJlbmRlcmVyKCk7CiAK
LSAgICBpZiAodXBkYXRlLmlzU3ludGhldGljKSB7CisgICAgaWYgKHVwZGF0ZS5yZWNvbXBvc2l0
ZUxheWVyKSB7CiAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKFdURk1vdmUoKnVwZGF0ZS5zdHls
ZSksIFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHJldmlzaW9uIDIwNzQw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMo
VXBkYQogICAgIGlmIChyZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYykgewogICAgICAgICBpZiAobV9z
aGFkb3dSb290KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHNoYWRvd0NoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8RWxlbWVudD4oKm1fc2hhZG93Um9vdCkpCi0gICAgICAgICAgICAgICAgc2hhZG93
Q2hpbGQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIHNoYWRvd0NoaWxk
LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtX2RvY3VtZW50LnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDc0
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgdm9pZCByZXNldFN0eWxlRm9yTm9u
UmVuZGVyZWREZXNjCiAKICAgICAgICAgaWYgKGNoaWxkLm5lZWRzU3R5bGVSZWNhbGMoKSB8fCBh
ZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKSB7CiAgICAgICAgICAgICBjaGlsZC5yZXNldENvbXB1
dGVkU3R5bGUoKTsKLSAgICAgICAgICAgIGNoaWxkLmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgICAgICAgICAgY2hpbGQuc2V0SGFzVmFsaWRTdHlsZSgpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGNoaWxkLmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKSB7CkBAIC0yMDAsMTMgKzIwMCwx
MyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUVsZW1lCiAgICAgaWYgKCFh
ZmZlY3RzUmVuZGVyZWRTdWJ0cmVlKGVsZW1lbnQsICpuZXdTdHlsZSkpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBib29sIHNob3VsZFJlY29uc3RydWN0UmVuZGVyVHJlZSA9IGVsZW1lbnQu
c3R5bGVDaGFuZ2VUeXBlKCkgPT0gUmVjb25zdHJ1Y3RSZW5kZXJUcmVlIHx8IHBhcmVudCgpLmNo
YW5nZSA9PSBEZXRhY2g7CisgICAgYm9vbCBzaG91bGRSZWNvbnN0cnVjdFJlbmRlclRyZWUgPSBl
bGVtZW50LnN0eWxlVmFsaWRpdHkoKSA+PSBWYWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0lu
dmFsaWQgfHwgcGFyZW50KCkuY2hhbmdlID09IERldGFjaDsKICAgICBhdXRvKiByZW5kZXJlclRv
VXBkYXRlID0gc2hvdWxkUmVjb25zdHJ1Y3RSZW5kZXJUcmVlID8gbnVsbHB0ciA6IGVsZW1lbnQu
cmVuZGVyZXIoKTsKIAogICAgIGF1dG8gdXBkYXRlID0gY3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBk
YXRlKFdURk1vdmUobmV3U3R5bGUpLCByZW5kZXJlclRvVXBkYXRlLCBtX2RvY3VtZW50KTsKIAot
ICAgIGlmIChlbGVtZW50LnN0eWxlQ2hhbmdlVHlwZSgpID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KQotICAgICAgICB1cGRhdGUuaXNTeW50aGV0aWMgPSB0cnVlOworICAgIGlmIChlbGVtZW50LnN0
eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlLnJl
Y29tcG9zaXRlTGF5ZXIgPSB0cnVlOwogCiAgICAgYXV0byogZXhpc3RpbmdTdHlsZSA9IGVsZW1l
bnQucmVuZGVyU3R5bGUoKTsKIApAQCAtMjMzLDcgKzIzMyw3IEBAIEVsZW1lbnRVcGRhdGUgVHJl
ZVJlc29sdmVyOjpyZXNvbHZlRWxlbWUKICAgICAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBEZXRh
Y2g7CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZS5jaGFuZ2UgIT0gRGV0YWNoICYmIChwYXJlbnQo
KS5jaGFuZ2UgPT0gRm9yY2UgfHwgZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBGdWxsU3R5
bGVDaGFuZ2UpKQorICAgIGlmICh1cGRhdGUuY2hhbmdlICE9IERldGFjaCAmJiAocGFyZW50KCku
Y2hhbmdlID09IEZvcmNlIHx8IGVsZW1lbnQuc3R5bGVWYWxpZGl0eSgpID49IFZhbGlkaXR5OjpT
dWJ0cmVlSW52YWxpZCkpCiAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBGb3JjZTsKIAogICAgIHJl
dHVybiB1cGRhdGU7CkBAIC0yNDUsNyArMjQ1LDcgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2
ZXI6OmNyZWF0ZUFuaW1hdAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlOwogICAgIGlmIChyZW5kZXJlclRvVXBkYXRlICYmIGRvY3VtZW50LmZyYW1lKCkt
PmFuaW1hdGlvbigpLnVwZGF0ZUFuaW1hdGlvbnMoKnJlbmRlcmVyVG9VcGRhdGUsICpuZXdTdHls
ZSwgYW5pbWF0ZWRTdHlsZSkpCi0gICAgICAgIHVwZGF0ZS5pc1N5bnRoZXRpYyA9IHRydWU7Cisg
ICAgICAgIHVwZGF0ZS5yZWNvbXBvc2l0ZUxheWVyID0gdHJ1ZTsKIAogICAgIGlmIChhbmltYXRl
ZFN0eWxlKSB7CiAgICAgICAgIHVwZGF0ZS5jaGFuZ2UgPSBkZXRlcm1pbmVDaGFuZ2UocmVuZGVy
ZXJUb1VwZGF0ZS0+c3R5bGUoKSwgKmFuaW1hdGVkU3R5bGUpOwpAQCAtMjgyLDcgKzI4Miw3IEBA
IHZvaWQgVHJlZVJlc29sdmVyOjpwb3BQYXJlbnQoKQogewogICAgIGF1dG8mIHBhcmVudEVsZW1l
bnQgPSAqcGFyZW50KCkuZWxlbWVudDsKIAotICAgIHBhcmVudEVsZW1lbnQuY2xlYXJOZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgcGFyZW50RWxlbWVudC5zZXRIYXNWYWxpZFN0eWxlKCk7CiAgICAg
cGFyZW50RWxlbWVudC5jbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogCiAgICAgaWYgKHBh
cmVudCgpLmRpZFB1c2hTY29wZSkKQEAgLTMzMiwxMSArMzMyLDExIEBAIHN0YXRpYyBib29sIHNo
b3VsZFJlc29sdmVFbGVtZW50KGNvbnN0IEUKIAogc3RhdGljIHZvaWQgY2xlYXJOZWVkc1N0eWxl
UmVzb2x1dGlvbihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGVsZW1lbnQuY2xlYXJOZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudC5zZXRIYXNWYWxpZFN0eWxlKCk7CiAgICAgaWYgKGF1
dG8qIGJlZm9yZSA9IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpKQotICAgICAgICBiZWZv
cmUtPmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBiZWZvcmUtPnNldEhhc1ZhbGlk
U3R5bGUoKTsKICAgICBpZiAoYXV0byogYWZ0ZXIgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVu
dCgpKQotICAgICAgICBhZnRlci0+Y2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGFm
dGVyLT5zZXRIYXNWYWxpZFN0eWxlKCk7CiB9CiAKIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZl
Q29tcG9zZWRUcmVlKCkKQEAgLTM2MiwxMCArMzYyLDEwIEBAIHZvaWQgVHJlZVJlc29sdmVyOjpy
ZXNvbHZlQ29tcG9zZWRUcmVlKCkKIAogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAg
ICAgICAgICAgIGF1dG8mIHRleHQgPSBkb3duY2FzdDxUZXh0Pihub2RlKTsKLSAgICAgICAgICAg
IGlmICh0ZXh0LnN0eWxlQ2hhbmdlVHlwZSgpID09IFJlY29uc3RydWN0UmVuZGVyVHJlZSAmJiBw
YXJlbnQuY2hhbmdlICE9IERldGFjaCkKKyAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlVmFsaWRp
dHkoKSA+PSBWYWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0ludmFsaWQgJiYgcGFyZW50LmNo
YW5nZSAhPSBEZXRhY2gpCiAgICAgICAgICAgICAgICAgbV91cGRhdGUtPmFkZFRleHQodGV4dCwg
cGFyZW50LmVsZW1lbnQpOwogCi0gICAgICAgICAgICB0ZXh0LmNsZWFyTmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgdGV4dC5zZXRIYXNWYWxpZFN0eWxlKCk7CiAgICAgICAgICAgICBp
dC50cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuKCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCShyZXZpc2lvbiAy
MDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiBzdHJ1Y3QgRWxlbWVudFVw
ZGF0ZSB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKICAgICBDaGFu
Z2UgY2hhbmdlIHsgTm9DaGFuZ2UgfTsKLSAgICBib29sIGlzU3ludGhldGljIHsgZmFsc2UgfTsK
KyAgICBib29sIHJlY29tcG9zaXRlTGF5ZXIgeyBmYWxzZSB9OwogfTsKIAogY2xhc3MgVXBkYXRl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVmFsaWRpdHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVZhbGlkaXR5LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVWYWxpZGl0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKKworZW51bSBjbGFzcyBWYWxpZGl0eSB7CisgICAg
VmFsaWQsCisgICAgRWxlbWVudEludmFsaWQsCisgICAgU3VidHJlZUludmFsaWQsCisgICAgU3Vi
dHJlZUFuZFJlbmRlcmVyc0ludmFsaWQKK307CisKK2VudW0gY2xhc3MgSW52YWxpZGF0aW9uTW9k
ZSB7CisgICAgTm9ybWFsLAorICAgIFJlY29tcG9zaXRlTGF5ZXIKK307CisKK30KK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgs
NyBAQCB2b2lkIFNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvCiAgICAgICAgIHNl
dElzTGluayghaHJlZigpLmlzTnVsbCgpICYmICFzaG91bGRQcm9oaWJpdExpbmtzKHRoaXMpKTsK
ICAgICAgICAgaWYgKHdhc0xpbmsgIT0gaXNMaW5rKCkpIHsKICAgICAgICAgICAgIEluc3RhbmNl
SW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwotICAgICAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
ICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSwxNCArMjM5LDE0
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXIKICAgICBpZiAoIXRh
cmdldEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkuc2V0UHJvcGVy
dHkoaWQsIHZhbHVlLCBmYWxzZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRhcmdldEVsZW1l
bnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgdGFyZ2V0
RWxlbWVudC5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQoU1ZHRWxlbWVudCYgdGFy
Z2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCkKIHsKICAgICBBU1NFUlQoIXRhcmdldEVsZW1l
bnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKICAgICB0YXJnZXRFbGVtZW50LmVuc3VyZUFuaW1hdGVk
U01JTFN0eWxlUHJvcGVydGllcygpLnJlbW92ZVByb3BlcnR5KGlkKTsKLSAgICB0YXJnZXRFbGVt
ZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIHRhcmdl
dEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0Vs
ZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3IEBAIGludCBTVkdFbGVtZW50Ojp0
YWJJbmRleCgpIGNvbnN0CiAKIGJvb2wgU1ZHRWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKFN0eWxl
OjpDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmICghbV9zdmdSYXJlRGF0YSB8fCBzdHlsZUNoYW5n
ZVR5cGUoKSA9PSBTeW50aGV0aWNTdHlsZUNoYW5nZSkKKyAgICBpZiAoIW1fc3ZnUmFyZURhdGEg
fHwgc3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllcigpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAvLyBJZiB0aGUgc3R5bGUgY2hhbmdlcyBiZWNhdXNlIG9mIGEgcmVndWxh
ciBwcm9wZXJ0eSBjaGFuZ2UgKG5vdCBpbmR1Y2VkIGJ5IFNNSUwgYW5pbWF0aW9ucyB0aGVtc2Vs
dmVzKQogICAgIC8vIHJlc2V0IHRoZSAiY29tcHV0ZWQgc3R5bGUgd2l0aG91dCBTTUlMIHN0eWxl
IHByb3BlcnRpZXMiLCBzbyB0aGUgYmFzZSB2YWx1ZSBjaGFuZ2UgZ2V0cyByZWZsZWN0ZWQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS5zZXRQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkodHJ1ZSk7CiAgICAgICAgIC8vIFRyaWdnZXIg
c3R5bGUgcmVjYWxjdWxhdGlvbiBmb3IgImVsZW1lbnRzIGFzIHJlc291cmNlIiAoZS5nLiByZWZl
cmVuY2VkIGJ5IGZlSW1hZ2UpLgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0
eWxlQ2hhbmdlKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgfQogCiAgICAgLy8g
VGhlIGluc3RhbmNlcyBvZiBhbiBlbGVtZW50IGFyZSBjbG9uZXMgbWFkZSBpbiBzaGFkb3cgdHJl
ZXMgdG8gaW1wbGVtZW50IDx1c2U+LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3Rz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCShyZXZp
c2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgYm9vbCBTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRl
Q2hhbmdlKFNWRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHRhcmdldEVsZW1lbnQt
PnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICB0YXJnZXRF
bGVtZW50LT5pbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW52
YWxpZGF0ZVNoYWRvd1RyZWUKICAgICBpZiAobV9zaGFkb3dUcmVlTmVlZHNVcGRhdGUpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3NoYWRvd1RyZWVOZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgc2V0
TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGludmFsaWRhdGVT
dHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICBpbnZhbGlkYXRlRGVwZW5kZW50U2hh
ZG93VHJlZXMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAko
cmV2aXNpb24gMjA3NDA3KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODYsMTggKzQ4NiwxNiBAQCBib29sIEludGVybmFsczo6bm9k
ZU5lZWRzU3R5bGVSZWNhbGMoTm9kCiAgICAgcmV0dXJuIG5vZGUubmVlZHNTdHlsZVJlY2FsYygp
OwogfQogCi1zdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKFN0eWxlQ2hhbmdl
VHlwZSB0eXBlKQorc3RhdGljIFN0cmluZyBzdHlsZVZhbGlkaXR5VG9Ub1N0cmluZyhTdHlsZTo6
VmFsaWRpdHkgdmFsaWRpdHkpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBOb1N0
eWxlQ2hhbmdlOgorICAgIHN3aXRjaCAodmFsaWRpdHkpIHsKKyAgICBjYXNlIFN0eWxlOjpWYWxp
ZGl0eTo6VmFsaWQ6CiAgICAgICAgIHJldHVybiAiTm9TdHlsZUNoYW5nZSI7Ci0gICAgY2FzZSBJ
bmxpbmVTdHlsZUNoYW5nZToKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6RWxlbWVudEludmFs
aWQ6CiAgICAgICAgIHJldHVybiAiSW5saW5lU3R5bGVDaGFuZ2UiOwotICAgIGNhc2UgRnVsbFN0
eWxlQ2hhbmdlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52YWxpZDoKICAg
ICAgICAgcmV0dXJuICJGdWxsU3R5bGVDaGFuZ2UiOwotICAgIGNhc2UgU3ludGhldGljU3R5bGVD
aGFuZ2U6Ci0gICAgICAgIHJldHVybiAiU3ludGhldGljU3R5bGVDaGFuZ2UiOwotICAgIGNhc2Ug
UmVjb25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVl
QW5kUmVuZGVyZXJzSW52YWxpZDoKICAgICAgICAgcmV0dXJuICJSZWNvbnN0cnVjdFJlbmRlclRy
ZWUiOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUwNiw3ICs1MDQsNyBA
QCBzdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKFN0CiAKIFN0cmluZyBJbnRl
cm5hbHM6OnN0eWxlQ2hhbmdlVHlwZShOb2RlJiBub2RlKQogewotICAgIHJldHVybiBzdHlsZUNo
YW5nZVR5cGVUb1N0cmluZyhub2RlLnN0eWxlQ2hhbmdlVHlwZSgpKTsKKyAgICByZXR1cm4gc3R5
bGVWYWxpZGl0eVRvVG9TdHJpbmcobm9kZS5zdHlsZVZhbGlkaXR5KCkpOwogfQogCiBTdHJpbmcg
SW50ZXJuYWxzOjpkZXNjcmlwdGlvbihKU0M6OkpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0xMC0xNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5bGVSZWNhbGMgdG8gaW52
YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UGx1Z2luVmlldzo6ZGlkSW5pdGlhbGl6ZVBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBsdWdp
blZpZXc6OnBsdWdpblByb2Nlc3NDcmFzaGVkKToKKwogMjAxNi0xMC0xNyAgS29uc3RhbnRpbiBU
b2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRWxlbWluYXRlIGNvZGUgZHVw
bGljYXRpb24gYmV0d2VlbiBSZXNvdXJjZVJlcXVlc3QgZW5jb2RpbmcvZGVjb2RpbmcgaW1wbGVt
ZW50YXRpb25zCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAyMDc0MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3ICs2
NjMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmRpZEluaXRpYWxpemVQbHVnaW4oKQogICAgIGlmICht
X3BsdWdpbkVsZW1lbnQtPmRpc3BsYXlTdGF0ZSgpIDwgSFRNTFBsdWdJbkVsZW1lbnQ6OlJlc3Rh
cnRpbmcpIHsKICAgICAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5MYXllcigpICYmIGZyYW1lKCkp
IHsKICAgICAgICAgICAgIGZyYW1lKCktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsK
LSAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0
aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmludmFsaWRhdGVT
dHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJhbWUo
KSAmJiAhZnJhbWUoKS0+c2V0dGluZ3MoKS5tYXhpbXVtUGx1Z0luU25hcHNob3RBdHRlbXB0cygp
KSB7CiAgICAgICAgICAgICBiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4oKTsKQEAgLTY3
Myw3ICs2NzMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmRpZEluaXRpYWxpemVQbHVnaW4oKQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luTGF5ZXIoKSAmJiBmcmFtZSgp
KSB7CiAgICAgICAgICAgICBmcmFtZSgpLT52aWV3KCktPmVudGVyQ29tcG9zaXRpbmdNb2RlKCk7
Ci0gICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhl
dGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fcGx1
Z2luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPT0gSFRNTFBsdWdJbkVsZW1lbnQ6OlJlc3RhcnRp
bmdXaXRoUGVuZGluZ01vdXNlQ2xpY2spCiAgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRp
c3BhdGNoUGVuZGluZ01vdXNlQ2xpY2soKTsKQEAgLTE1NzAsNyArMTU3MCw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQogICAgIGlmICghaXM8UmVuZGVyRW1iZWRk
ZWRPYmplY3Q+KHJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wbHVnaW5FbGVt
ZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBtX3Bs
dWdpbkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIAogICAg
IGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpLnNldFBsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVkKTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMTAtMTcg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBzZXRO
ZWVkc1N0eWxlUmVjYWxjIHRvIGludmFsaWRhdGVTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2Fw
ZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyBj
cmVhdGVQbHVnaW5MYXllcl0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3JlYXRlUGx1Z2luXSk6
CisKIDIwMTYtMTAtMTcgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEVuYWJsZSBrZXlib2FyZCBpbiBmdWxsc2NyZWVuLgpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDIw
NzQwNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk5LDEwICsxMDk5LDEwIEBAIC0gKEJPT0wpY3JlYXRl
UGx1Z2luCiAgICAgICAgICAgICAgICAgcmVhbFBsdWdpbkxheWVyLmdldCgpLmF1dG9yZXNpemlu
Z01hc2sgPSBrQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtDQUxheWVySGVpZ2h0U2l6YWJsZTsKICAg
ICAgICAgICAgICAgICBbX3BsdWdpbkxheWVyLmdldCgpIGFkZFN1YmxheWVyOnJlYWxQbHVnaW5M
YXllci5nZXQoKV07CiAKLSAgICAgICAgICAgICAgICAvLyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0
aW5nIG1vZGUsIHNpbmNlIHdlIGtub3cgd2UnbGwgbmVlZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5n
IHNldE5lZWRzU3R5bGVSZWNhbGMoKQorICAgICAgICAgICAgICAgIC8vIEVhZ2VybHkgZW50ZXIg
Y29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lk
cyBmaXJpbmcgaW52YWxpZGF0ZVN0eWxlKCkKICAgICAgICAgICAgICAgICAvLyBmb3IgaWZyYW1l
cyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5zIGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDMzCiAgICAgICAgICAgICAgICAgY29y
ZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVyQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgIFtzZWxmIGVsZW1lbnRdLT5pbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICBbc2VsZiBzZXRXYW50c0xheWVyOllFU107CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2Fw
ZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDIwNzQwNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDcgKzE2OCw3IEBAIC0gKHZvaWQpY3JlYXRlUGx1Z2luTGF5ZXIKICAgICAgICAg
Ly8gRWFnZXJseSBlbnRlciBjb21wb3NpdGluZyBtb2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xsIG5l
ZWQgaXQuIFRoaXMgYXZvaWRzIGZpcmluZyBzZXROZWVkc1N0eWxlUmVjYWxjKCkKICAgICAgICAg
Ly8gZm9yIGlmcmFtZXMgdGhhdCBjb250YWluIGNvbXBvc2l0ZWQgcGx1Z2lucyBhdCBiYWQgdGlt
ZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTAzMwogICAgICAg
ICBjb3JlKFtzZWxmIHdlYkZyYW1lXSktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsK
LSAgICAgICAgW3NlbGYgZWxlbWVudF0tPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5
bGVDaGFuZ2UpOworICAgICAgICBbc2VsZiBlbGVtZW50XS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwogICAgIH0gZWxzZQogICAgICAgICBzZWxmLndhbnRzTGF5ZXIgPSBZ
RVM7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291938</attachid>
            <date>2016-10-18 04:46:58 -0700</date>
            <delta_ts>2016-10-18 04:46:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-enum-14.patch</filename>
            <type>text/plain</type>
            <size>104604</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MiBAQAorMjAxNi0xMC0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNldE5lZWRzU3R5
bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBBbHNvIHJlbmFtZSBTdHlsZUNoYW5nZVR5cGUgZW51bSBhbmQgc29t
ZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY2xhcml0eS4gRm9yIGV4YW1wbGUKKworICAgICAgICAg
ICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKwor
ICAgICAgICBiZWNvbWVzCisKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOworCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVJ
Zk5lZWRlZCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlVmlld3BvcnRVbml0c09uUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpz
ZXRDU1NUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6dW53cmFwRnVsbFNjcmVlblJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRBbmltYXRpbmdGdWxsU2NyZWVuKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0Rm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0SG92ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFs
aWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnZhbGlkYXRlU3R5bGVB
bmRMYXllckNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSk6CisKKyAgICAgICAgICAgIE1vdmUgcHVibGlj
IGludmFsaWRhdGlvbiBmdW5jdGlvbnMgdG8gRWxlbWVudCB0aWdodGVuaW5nIHR5cGluZy4KKyAg
ICAgICAgICAgIFVzZSBzZXBhcmF0ZSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBlbnVtIHZhbHVlcy4K
KyAgICAgICAgICAgIFRoaXMgd2F5IHRoZSBjYWxsIHNpdGVzIGxvb2sgbmljZXIgYW5kIG9ubHkg
dXNlZnVsIGNvbWJpbmF0aW9ucyBhcmUgZXhwb3NlZC4KKworICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6YWRkU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5U3R5
bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om5lZWRzU3R5bGVJbnZhbGlkYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCk6
CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNl
dEhhc0ZvY3VzV2l0aGluKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlRWRpdGFiaWxpdHlGcm9tQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjphZGp1c3RTdHlsZVZhbGlkaXR5KToKKworICAgICAgICAgICAgVXBkYXRlIHZh
bGlkaXR5IGFuZCBtb2RlIHNlcGFyYXRlbHkuIFRoZXJlIHdhcyBhIHBvdGVudGlhbCBidWcgaGVy
ZSB3aGVyZQorICAgICAgICAgICAgU3ludGhldGljU3R5bGVDaGFuZ2UgY291bGQgb3ZlcndyaXRl
IEZ1bGxTdHlsZUNoYW5nZSAobm8ga25vd24gcmVwcm8pLgorCisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJ
bnRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMpOiBEZWxl
dGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpuZWVk
c1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnN0eWxlVmFsaWRpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRIYXNWYWxpZFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OnN0eWxlQ2hhbmdlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpjbGVhck5lZWRzU3R5bGVSZWNhbGMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0U3R5bGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNT
dHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSk6
CisgICAgICAgICogZG9tL1Nsb3RBc3NpZ25tZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNs
b3RBc3NpZ25tZW50OjphZGRTbG90RWxlbWVudEJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
bG90QXNzaWdubWVudDo6cmVtb3ZlU2xvdEVsZW1lbnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5nZVNsb3QpOgorICAgICAgICAqIGRvbS9TdHlsZWRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHls
ZUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dDo6dXBkYXRlUmVuZGVyZXJBZnRlckNvbnRlbnRDaGFuZ2UpOgorICAgICAgICAqIGRvbS9W
aXNpdGVkTGlua1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6
OmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRM
aW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvckxpbmspOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
OjptaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3RE
aXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5
KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6YWRkSW52YWxpZERlc2NlbmRhbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6cmVtb3ZlSW52YWxpZERlc2NlbmRhbnQp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seUF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVx
dWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlVmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6
cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUludmFsaWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0RGVmYXVsdEJ1
dHRvbik6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVl
KToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnNjaGVkdWxlaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1l
bnQ6OnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyk6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbFJl
Y2FsY1N0eWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cnVuUG9zdFR5cGVVcGRhdGVUYXNrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b0ZpbGxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjptYXhMZW5ndGhBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om1pbkxlbmd0aEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBs
YXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJG
YWxsYmFja0NvbnRlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUpOgorICAgICAgICAqIGh0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6
OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpzZXREaXNwbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZVNuYXBzaG90VGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0
U25hcHNob3R0ZWRQbHVnSW4pOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3Rh
dGVDaGFuZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNhbGNMaXN0SXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNUYWJsZUNlbGxB
bmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRUYWJsZUNlbGxzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlQ29tbW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIGh0
bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWUp
OgorICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok51bWJlcklucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJ
bnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgICogbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRDaGlsZCk6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25CYXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1h
dGlvbkF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6Om5vdGlmeUlGcmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRTdHlsZUNoYW5nZWQpOgorICAgICAgICAqIHN0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QXR0cmlidXRlQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdl
SW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9JZENoYW5nZUlu
dmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SWRDaGFuZ2VJbnZhbGlk
YXRpb246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUVsZW1l
bnRSZW5kZXJlcik6CisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6U2NvcGU6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
cmVzZXRTdHlsZUZvck5vblJlbmRlcmVkRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnBvcFBhcmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y2xlYXJOZWVkc1N0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlVmFsaWRpdHkuaDog
QWRkZWQuCisKKyAgICAgICAgICAgIFN0eWxlQ2hhbmdlVHlwZSBlbnVtIHNwbGl0cyBpbnRvIFN0
eWxlOjpWYWxpZGl0eSBhbmQgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUuCisgICAgICAgICAgICBN
b3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorCisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVD
U1NQcm9wZXJ0eUZyb21UYXJnZXQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICog
c3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmludmFsaWRh
dGVTVkdQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3Rz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2Up
OgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmludmFsaWRhdGVTaGFkb3dUcmVlKToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVZhbGlkaXR5VG9Ub1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN0eWxlQ2hhbmdlVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyk6IERlbGV0ZWQuCisKIDIwMTYtMTAt
MTcgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W2Nzcy1ncmlkXSBDb25zdHJhaW4gYnkgbWlufG1heC1oZWlnaHQgb24gYXV0byByZXBlYXQgY29t
cHV0YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjI1Miw2ICs2
MjUyLDcgQEAKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07
CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZC
IC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAgKi87IH07CisJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHls
ZVZhbGlkaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0ODk0NEEyMTgwQjU3RDgw
MEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVM
aW5lTGF5b3V0LmNwcCAqLzsgfTsKIAkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBs
ZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5MTZGRjcxOTVE
RjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkg
LyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQwMTUsNiArMTQwMTYsNyBAQAogCQlFNDdCNEJFNzBF
NzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3Njcx
NjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxl
VmFsaWRpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVWYWxpZGl0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVz
aFRocm90dGxlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJG
bHVzaFRocm90dGxlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjk2
LDYgKzIyNjk4LDcgQEAKIAkJCQlFNERFQUExNjE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVUcmVl
UmVzb2x2ZXIuaCAqLywKIAkJCQlFNDJFNzZEOTFDN0FGNzZDMDBFMzYxNEQgLyogU3R5bGVVcGRh
dGUuY3BwICovLAogCQkJCUU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5o
ICovLAorCQkJCUU0ODEzN0I4MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHN0eWxlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTI1NTY1LDYgKzI1NTY4LDggQEAKIAkJCQlCQzkyNkY4MTBDMDU1MjQ3MDA4Mjc3NkIgLyogSlNI
VE1MRnJhbWVTZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0IxNTBBMTlENjA2
MDA3RkI4QzUgLyogSlNIVE1MSGVhZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJB
QTJGMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIZWFkaW5nRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTFBMjk5RkU4MUQ3RjVGQTYwMEE2MDA5MyAvKiBSZW5kZXJUaGVtZUNv
Y29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUEzMTBBMUNEQUI0MDBCNDJCMjUgLyogSlNI
VE1MSFJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg1QjE5MDBBMUIxOEEyMDBEOEM4
N0MgLyogSlNIVE1MSHRtbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDkxOEM5MEJG
RUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5j
cHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDI0ICsxMDAsMjMgQEAgU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYQogICAgIGlmIChtX2hhc1NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQpIHsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgZG8gYWN0dWFsIHJ1bGUgbWF0Y2hpbmcgdG9vLgogICAgICAgICBpZiAoZWxlbWVu
dC5zaGFkb3dSb290KCkpCi0gICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
IH0KIAotICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSkgewotICAgIGNhc2Ug
Tm9TdHlsZUNoYW5nZTogeworICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZVZhbGlkaXR5KCkpIHsK
KyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ6IHsKICAgICAgICAgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXQsIGZpbHRlcik7CiAgICAg
ICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3Rp
bmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzKTsKICAgICAgICAgcnVsZUNvbGxl
Y3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKIAogICAgICAgICBpZiAocnVsZUNvbGxlY3Rv
ci5oYXNNYXRjaGVkUnVsZXMoKSkKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJl
Y2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVT
dHlsZSgpOwogICAgICAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwogICAgIH0KLSAg
ICBjYXNlIElubGluZVN0eWxlQ2hhbmdlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpFbGVt
ZW50SW52YWxpZDoKICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICBj
YXNlIEZ1bGxTdHlsZUNoYW5nZToKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAg
IGNhc2UgUmVjb25zdHJ1Y3RSZW5kZXJUcmVlOgorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpT
dWJ0cmVlSW52YWxpZDoKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFuZFJlbmRl
cmVyc0ludmFsaWQ6CiAgICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpObzsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NTMsNyArMTg1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlOjpDaGFuZ2UKIAogICAgICAgICBtX2xhc3RTdHlsZVVwZGF0ZVNpemVGb3JUZXN0
aW5nID0gc3R5bGVVcGRhdGUgPyBzdHlsZVVwZGF0ZS0+c2l6ZSgpIDogMDsKIAotICAgICAgICBj
bGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgc2V0SGFzVmFsaWRTdHlsZSgpOwogICAg
ICAgICBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB1bnNjaGVkdWxlU3R5
bGVSZWNhbGMoKTsKIApAQCAtMzUwMCw3ICszNTAwLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaQogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3ROb2RlKCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbygqZWxlbWVudCkpIHsKICAgICAgICAg
YXV0byogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzVmlld3BvcnRVbml0cygpKQotICAgICAgICAgICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsKICAgICB9CiB9CiAKQEAgLTM4MTgsMTAg
KzM4MTgsMTAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmZvY3VzTmF2aWdhdGlvblN0YXJ0aQogdm9p
ZCBEb2N1bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiB7CiAgICAgaWYgKG1fY3NzVGFy
Z2V0KQotICAgICAgICBtX2Nzc1RhcmdldC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICBtX2Nzc1RhcmdldC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIG1fY3NzVGFy
Z2V0ID0gbjsKICAgICBpZiAobikKLSAgICAgICAgbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgICAgICBuLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnJlZ2lzdGVyTm9kZUxpc3RGb3JJbnZhbGlkYXRpb24oTGl2ZU5vZGVMaXN0JiBsaXN0KQpA
QCAtNTgzNSw4ICs1ODM1LDggQEAgc3RhdGljIHZvaWQgdW53cmFwRnVsbFNjcmVlblJlbmRlcmVy
KFJlbgogICAgIGJvb2wgcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZDsKICAgICBmdWxsU2NyZWVu
UmVuZGVyZXItPnVud3JhcFJlbmRlcmVyKHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQpOwogCi0g
ICAgaWYgKHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQgJiYgZnVsbFNjcmVlbkVsZW1lbnQgJiYg
ZnVsbFNjcmVlbkVsZW1lbnQtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgZnVsbFNjcmVlbkVsZW1l
bnQtPnBhcmVudE5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRy
ZWUpOworICAgIGlmIChyZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkICYmIGZ1bGxTY3JlZW5FbGVt
ZW50ICYmIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIGZ1bGxT
Y3JlZW5FbGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVy
c0ZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKQEAgLTYwMjcsNyArNjAyNyw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm8KICAgICBtX2lzQW5pbWF0aW5n
RnVsbFNjcmVlbiA9IGZsYWc7CiAKICAgICBpZiAobV9mdWxsU2NyZWVuRWxlbWVudCAmJiBtX2Z1
bGxTY3JlZW5FbGVtZW50LT5pc0Rlc2NlbmRhbnRPZih0aGlzKSkgewotICAgICAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgc2NoZWR1bGVG
b3JjZWRTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJv
b2wgZmxhZywgYm9vbCAKICAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSB0aGlz
LT5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IChyZW5kZXJTdHlsZSAm
JiByZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2ZSgpKSB8fCBzdHlsZUFmZmVjdGVkQnlBY3Rp
dmUoKTsKICAgICBpZiAocmVhY3RzVG9QcmVzcykKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoIXJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lkIEVsZW1l
bnQ6OnNldEZvY3VzKGJvb2wgZmxhZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZG9jdW1lbnQo
KS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKHRoaXMsIGZsYWcpOwotICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAg
ICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKQogICAgICAgICBlbGVtZW50LT5zZXRIYXNG
b2N1c1dpdGhpbihmbGFnKTsKQEAgLTYzMiwxMyArNjMyLDEzIEBAIHZvaWQgRWxlbWVudDo6c2V0
SG92ZXJlZChib29sIGZsYWcpCiAgICAgICAgIC8vIHN0eWxlLCBpdCB3b3VsZCBuZXZlciBnbyBi
YWNrIHRvIGl0cyBub3JtYWwgc3R5bGUgYW5kIHJlbWFpbgogICAgICAgICAvLyBzdHVjayBpbiBp
dHMgaG92ZXJlZCBzdHlsZSkuCiAgICAgICAgIGlmICghZmxhZykKLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxl
KCkuYWZmZWN0ZWRCeUhvdmVyKCkgfHwgY2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSkKLSAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0
cmVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAg
ICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlKTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHZvaWQgRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWEKICAgICAgICAgICAgIGVsZW1lbnREYXRhKCkt
PnNldEhhc05hbWVBdHRyaWJ1dGUoIW5ld1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSBIVE1MTmFtZXM6OnBzZXVkb0F0dHIpIHsKICAgICAgICAgICAgIGlmIChuZWVk
c1N0eWxlSW52YWxpZGF0aW9uKCkgJiYgaXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAg
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gSFRNTE5hbWVzOjpzbG90QXR0cikgewogICAgICAgICAgICAgaWYgKGF1dG8qIHBh
cmVudCA9IHBhcmVudEVsZW1lbnQoKSkgewpAQCAtMTQ0MCw2ICsxNDQwLDI2IEBAIEVsZW1lbnRT
dHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QKICAgICByZXR1cm4gc3R5bGVSZXNvbHZl
cigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywgcGFyZW50U3R5bGUpOwogfQogCit2b2lkIEVsZW1l
bnQ6OmludmFsaWRhdGVTdHlsZSgpCit7CisgICAgTm9kZTo6aW52YWxpZGF0ZVN0eWxlKFN0eWxl
OjpWYWxpZGl0eTo6RWxlbWVudEludmFsaWQpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHls
ZShTdHlsZTo6VmFsaWRpdHk6OkVsZW1lbnRJbnZhbGlkLCBTdHlsZTo6SW52YWxpZGF0aW9uTW9k
ZTo6UmVjb21wb3NpdGVMYXllcik7Cit9CisKK3ZvaWQgRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpCit7CisgICAgTm9kZTo6aW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0
eTo6U3VidHJlZUludmFsaWQpOworfQorCit2b2lkIEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUFu
ZFJlbmRlcmVyc0ZvclN1YnRyZWUoKQoreworICAgIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHls
ZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5kZXJlcnNJbnZhbGlkKTsKK30KKwogI2lmIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKIFdlYkFuaW1hdGlvblZlY3RvciBFbGVtZW50OjpnZXRBbmltYXRp
b25zKCkKIHsKQEAgLTE3NTQsNyArMTc3NCw3IEBAIHZvaWQgRWxlbWVudDo6YWRkU2hhZG93Um9v
dChSZWY8U2hhZG93Um8KICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHBvc3RJbnNlcnRpb25Ob3Rp
ZmljYXRpb25UYXJnZXRzKQogICAgICAgICB0YXJnZXQtPmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJl
ZSgpOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOwor
ICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3QoKnRoaXMsIHNoYWRvd1Jvb3Qp
OwogCkBAIC0xOTM2LDcgKzE5NTYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlCiAgICAgaWYgKGVsZW1lbnQuc3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSkgewogICAg
ICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwgZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkp
KQotICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAg
ICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKQEAgLTE5
NDcsNyArMTk2Nyw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygK
ICAgICAvLyA6ZW1wdHkgc2VsZWN0b3IuCiAgICAgY2hlY2tGb3JFbXB0eVN0eWxlQ2hhbmdlKHBh
cmVudCk7CiAKLSAgICBpZiAocGFyZW50LnN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNo
YW5nZSkKKyAgICBpZiAocGFyZW50LnN0eWxlVmFsaWRpdHkoKSA+PSBTdHlsZTo6VmFsaWRpdHk6
OlN1YnRyZWVJbnZhbGlkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA6Zmlyc3QtY2hpbGQu
ICBJbiB0aGUgcGFyc2VyIGNhbGxiYWNrIGNhc2UsIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgYW55
dGhpbmcsIHNpbmNlIHdlIHdlcmUgcmlnaHQgdGhlIGZpcnN0IHRpbWUuCkBAIC0xOTYyLDE0ICsx
OTgyLDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAg
ICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2UpIHsKICAgICAgICAg
ICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCi0gICAgICAg
ICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gaGFuZGxlIG5vZGUg
cmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQg
JiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAmJiBuZXdGaXJzdEVsZW1l
bnQpIHsKICAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJT
dHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0
ZSgpKQotICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTgyLDcgKzIwMDIsNyBAQCBzdGF0
aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIGlmIChuZXdMYXN0
RWxlbWVudCAhPSBlbGVtZW50QmVmb3JlQ2hhbmdlKSB7CiAgICAgICAgICAgICBhdXRvKiBzdHls
ZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAo
IXN0eWxlIHx8IHN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQotICAgICAgICAgICAgICAgIGVsZW1l
bnRCZWZvcmVDaGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBl
bGVtZW50QmVmb3JlQ2hhbmdlLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRo
ZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBpcyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxs
IGluIHRoYXQgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxhc3QgY2hpbGQKQEAgLTE5OTAsMTMgKzIw
MTAsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAg
ICBpZiAoKGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09
IEZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVm
b3JlQ2hhbmdlICYmIG5ld0xhc3RFbGVtZW50KSB7CiAgICAgICAgICAgICBhdXRvKiBzdHlsZSA9
IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCi0gICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1l
bnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBuZXdMYXN0RWxlbWVu
dC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGVsZW1lbnRBZnRlckNoYW5nZSkgewogICAgICAgICBpZiAoZWxlbWVudEFmdGVyQ2hhbmdl
LT5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgZWxlbWVu
dEFmdGVyQ2hhbmdlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50
QWZ0ZXJDaGFuZ2UtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudEFmdGVyQ2hhbmdlLT5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSkg
ewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudFRvSW52YWxpZGF0ZSA9IGVsZW1lbnRBZnRl
ckNoYW5nZTsKICAgICAgICAgICAgIGRvIHsKQEAgLTIwMDQsNyArMjAyNCw3IEBAIHN0YXRpYyB2
b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgICAgIH0gd2hpbGUgKGVs
ZW1lbnRUb0ludmFsaWRhdGUgJiYgIWVsZW1lbnRUb0ludmFsaWRhdGUtPnN0eWxlSXNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKCkpOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSW52YWxp
ZGF0ZSkKLSAgICAgICAgICAgICAgICBlbGVtZW50VG9JbnZhbGlkYXRlLT5zZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudFRvSW52YWxpZGF0ZS0+aW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDE1LDcgKzIwMzUs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgLy8gRm9y
IHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UganVzdCBtYXJrIHRoZSBwYXJlbnQgbm9kZSBhcyBjaGFu
Z2VkLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIG1ha2UgY2hpbGRyZW5DaGFuZ2VkIE8obl4yKSBi
eSBjcmF3bGluZyBhbGwgb3VyIGtpZHMKICAgICAvLyBoZXJlLiAgcmVjYWxjU3R5bGUgd2lsbCB0
aGVuIGZvcmNlIGEgd2FsayBvZiB0aGUgY2hpbGRyZW4gd2hlbiBpdCBzZWVzIHRoYXQgdGhpcyBo
YXMgaGFwcGVuZWQuCiAgICAgaWYgKHBhcmVudC5jaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBv
c2l0aW9uYWxSdWxlcygpICYmIGVsZW1lbnRCZWZvcmVDaGFuZ2UpCi0gICAgICAgIHBhcmVudC5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIHBhcmVudC5pbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJiBjaGFuZ2UpCkBAIC0yNzA0LDcgKzI3MjQsNyBAQCBib29sIEVsZW1lbnQ6Om5lZWRz
U3R5bGVJbnZhbGlkYXRpb24oKSBjCiB7CiAgICAgaWYgKCFpblJlbmRlcmVkRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxs
U3R5bGVDaGFuZ2UpCisgICAgaWYgKHN0eWxlVmFsaWRpdHkoKSA+PSBTdHlsZTo6VmFsaWRpdHk6
OlN1YnRyZWVJbnZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGRvY3VtZW50
KCkuaGFzUGVuZGluZ0ZvcmNlZFN0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMwNzEsNyArMzA5MSw3IEBAIGJvb2wgRWxlbWVudDo6Y29udGFpbnNGdWxsU2NyZWVuRWxl
bWVudCgKIHZvaWQgRWxlbWVudDo6c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChib29sIGZs
YWcpCiB7CiAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0Q29udGFpbnNGdWxsU2NyZWVu
RWxlbWVudChmbGFnKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIHN0
YXRpYyBFbGVtZW50KiBwYXJlbnRDcm9zc2luZ0ZyYW1lQm91bmRhcmllcyhFbGVtZW50KiBlbGVt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsNiArNTQzLDI2IEBA
IHB1YmxpYzoKICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7CiAgICAgRWxlbWVu
dFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCisg
ICAgLy8gSW52YWxpZGF0ZXMgdGhlIHN0eWxlIG9mIGEgc2luZ2xlIGVsZW1lbnQuIFN0eWxlIGlz
IHJlc29sdmVkIGxhemlseS4KKyAgICAvLyBEZXNjZW5kYW50IGVsZW1lbnRzIGFyZSByZXNvbHZl
ZCBhcyBuZWVkZWQsIGZvciBleGFtcGxlIGlmIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBjaGFuZ2Vz
LgorICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBhbiBlbGVtZW50IGNoYW5n
ZXMgaW4gYSBtYW5uZXIgdGhhdCBjYW4gYWZmZWN0IGl0cyBzdHlsZS4KKyAgICB2b2lkIGludmFs
aWRhdGVTdHlsZSgpOworCisgICAgLy8gQXMgYWJvdmUgYnV0IGFsc28gY2FsbCBSZW5kZXJFbGVt
ZW50OjpzZXRTdHlsZSB3aXRoIFN0eWxlRGlmZmVyZW5jZVJlY29tcG9zaXRlTGF5ZXIgZmxhZyBm
b3IKKyAgICAvLyB0aGUgZWxlbWVudCBldmVuIHdoZW4gdGhlIHN0eWxlIGRvZXNuJ3QgY2hhbmdl
LiBUaGlzIGlzIG1vc3RseSBuZWVkZWQgYnkgdGhlIGFuaW1hdGlvbiBjb2RlLgorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworCisg
ICAgLy8gSW52YWxpZGF0ZSB0aGUgZWxlbWVudCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gVGhp
cyBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgc29tZSBzb3J0IG9mIGNoYW5nZQorICAgIC8vIGluIHRo
ZSB0cmVlIHRoYXQgbWF5IGFmZmVjdCB0aGUgc3R5bGUgb2YgYW55IG9mIHRoZSBkZXNjZW5kYW50
cyBhbmQgd2UgZG9uJ3Qga25vdyBob3cgdG8gb3B0aW1pemUKKyAgICAvLyB0aGUgY2FzZSB0byBs
aW1pdCB0aGUgc2NvcGUuIFRoaXMgaXMgZXhwZW5zaXZlIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4K
KyAgICB2b2lkIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKworICAgIC8vIEludmFsaWRh
dGVzIHJlbmRlcmVycyBmb3IgdGhlIGVsZW1lbnQgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMgY2F1
c2luZyB0aGVtIHRvIGJlIHRvcm4gZG93bgorICAgIC8vIGFuZCByZWJ1aWxkIGR1cmluZyBzdHls
ZSByZXNvbHV0aW9uLiBTdHlsZSBpcyBhbHNvIHJlY29tcHV0ZWQuIFRoaXMgaXMgdXNlZCBpbiBj
b2RlIGRlYWxpbmcgd2l0aAorICAgIC8vIGN1c3RvbSAobm90IHN0eWxlIGJhc2VkKSByZW5kZXJl
cnMuIFRoaXMgaXMgZXhwZW5zaXZlIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4KKyAgICAvLyBFbGVt
ZW50cyBuZXdseSBhZGRlZCB0byB0aGUgdHJlZSBhcmUgYWxzbyBpbiB0aGlzIHN0YXRlLgorICAg
IHZvaWQgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOworCiAgICAgYm9v
bCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhhc0Rpc3BsYXlDb250
ZW50cyhib29sKTsKIApAQCAtODA4LDcgKzgyOCw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNl
dEhhc0ZvY3VzV2l0aGluKGIKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZsYWcoZmxhZywgSGFz
Rm9jdXNXaXRoaW4pOwogICAgIGlmIChzdHlsZUFmZmVjdGVkQnlGb2N1c1dpdGhpbigpKQotICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjYsNyArNjY2LDcgQEAgdm9pZCBOb2RlOjppbnNwZWN0KCkKIHN0YXRp
YyBOb2RlOjpFZGl0YWJpbGl0eSBjb21wdXRlRWRpdGFiaWxpdHlGcm9tQ29tcHV0ZWRTdHlsZShj
b25zdCBOb2RlJiBzdGFydE5vZGUsIE5vZGU6OlVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJlYXRt
ZW50KQogewogICAgIC8vIElkZWFsbHkgd2UnZCBjYWxsIEFTU0VSVCghbmVlZHNTdHlsZVJlY2Fs
YygpKSBoZXJlLCBidXQKLSAgICAvLyBDb250YWluZXJOb2RlOjpzZXRGb2N1cygpIGNhbGxzIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKSwgc28gdGhlIGFzc2VydGlvbgorICAgIC8vIENvbnRhaW5lck5v
ZGU6OnNldEZvY3VzKCkgY2FsbHMgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpLCBzbyB0aGUg
YXNzZXJ0aW9uCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50Ojpz
ZXRGb2N1c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0
Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewpAQCAtNzUwLDYgKzc1MCwx
NiBAQCB2b2lkIE5vZGU6OmRlcmVmRXZlbnRUYXJnZXQoKQogICAgIGRlcmVmKCk7CiB9CiAKK3Zv
aWQgTm9kZTo6YWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHkgdmFsaWRpdHksIFN0
eWxlOjpJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHZhbGlkaXR5ID4gc3R5bGVW
YWxpZGl0eSgpKSB7CisgICAgICAgIG1fbm9kZUZsYWdzICY9IH5TdHlsZVZhbGlkaXR5TWFzazsK
KyAgICAgICAgbV9ub2RlRmxhZ3MgfD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbGlkaXR5KSA8
PCBTdHlsZVZhbGlkaXR5U2hpZnQ7CisgICAgfQorICAgIGlmIChtb2RlID09IFN0eWxlOjpJbnZh
bGlkYXRpb25Nb2RlOjpSZWNvbXBvc2l0ZUxheWVyKQorICAgICAgICBzZXRGbGFnKFN0eWxlUmVz
b2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnKTsKK30KKwogaW5saW5lIHZvaWQgTm9k
ZTo6dXBkYXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKQogewogICAgIGF1dG8gY29tcG9zZWRB
bmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtNzU4LDEwICs3Njgs
OCBAQCBpbmxpbmUgdm9pZCBOb2RlOjp1cGRhdGVBbmNlc3RvcnNGb3JTdHlsCiAgICAgaWYgKGl0
ICE9IGVuZCkgewogICAgICAgICBpdC0+c2V0RGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7
CiAKLSAgICAgICAgaWYgKGl0LT5jaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dh
cmRQb3NpdGlvbmFsUnVsZXMoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zdHlsZUNoYW5nZVR5
cGUoKSA8IEZ1bGxTdHlsZUNoYW5nZSkKLSAgICAgICAgICAgICAgICBpdC0+c2V0U3R5bGVDaGFu
Z2UoRnVsbFN0eWxlQ2hhbmdlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXQtPmNoaWxkcmVu
QWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpKQorICAgICAg
ICAgICAgaXQtPmFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52
YWxpZCwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7CiAKICAgICAgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgLy8gSXRlcmF0b3Igc2tpcHMgb3ZlciBz
aGFkb3cgcm9vdHMuCkBAIC03ODIsOSArNzkwLDkgQEAgaW5saW5lIHZvaWQgTm9kZTo6dXBkYXRl
QW5jZXN0b3JzRm9yU3R5bAogICAgIGRvY3VtZW50KCkuc2NoZWR1bGVTdHlsZVJlY2FsYygpOwog
fQogCi12b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlIGNoYW5n
ZVR5cGUpCit2b2lkIE5vZGU6OmludmFsaWRhdGVTdHlsZShTdHlsZTo6VmFsaWRpdHkgdmFsaWRp
dHksIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGNoYW5nZVR5
cGUgIT0gTm9TdHlsZUNoYW5nZSk7CisgICAgQVNTRVJUKHZhbGlkaXR5ICE9IFN0eWxlOjpWYWxp
ZGl0eTo6VmFsaWQpOwogICAgIGlmICghaW5SZW5kZXJlZERvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNzkyLDExICs4MDAsMTIgQEAgdm9pZCBOb2RlOjpzZXROZWVkc1N0eWxlUmVj
YWxjKFN0eWxlQ2hhbgogICAgIGlmIChkb2N1bWVudCgpLmluUmVuZGVyVHJlZVVwZGF0ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHlsZUNoYW5nZVR5cGUgZXhpc3RpbmdDaGFuZ2VUeXBl
ID0gc3R5bGVDaGFuZ2VUeXBlKCk7Ci0gICAgaWYgKGNoYW5nZVR5cGUgPiBleGlzdGluZ0NoYW5n
ZVR5cGUpCi0gICAgICAgIHNldFN0eWxlQ2hhbmdlKGNoYW5nZVR5cGUpOworICAgIC8vIEZJWE1F
OiBXaHkgdGhlIHNlY29uZCBjb25kaXRpb24/CisgICAgYm9vbCBtYXJrQW5jZXN0b3JzID0gc3R5
bGVWYWxpZGl0eSgpID09IFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQgfHwgdmFsaWRpdHkgPT0gU3R5
bGU6OlZhbGlkaXR5OjpTdWJ0cmVlQW5kUmVuZGVyZXJzSW52YWxpZDsKKworICAgIGFkanVzdFN0
eWxlVmFsaWRpdHkodmFsaWRpdHksIG1vZGUpOwogCi0gICAgaWYgKGV4aXN0aW5nQ2hhbmdlVHlw
ZSA9PSBOb1N0eWxlQ2hhbmdlIHx8IGNoYW5nZVR5cGUgPT0gUmVjb25zdHJ1Y3RSZW5kZXJUcmVl
KQorICAgIGlmIChtYXJrQW5jZXN0b3JzKQogICAgICAgICB1cGRhdGVBbmNlc3RvcnNGb3JTdHls
ZVJlY2FsYygpOwogfQogCkBAIC0xMTk2LDcgKzEyMDUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IE5vZGU6CiAgICAgaWYgKHBhcmVudE9yU2hhZG93SG9zdE5vZGUoKS0+
aXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgc2V0RmxhZyhJc0luU2hhZG93VHJlZUZsYWcpOwog
Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIGlu
dmFsaWRhdGVTdHlsZShTdHlsZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5kZXJlcnNJbnZhbGlk
KTsKIAogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZp
c2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIk11
dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2lu
Y2x1ZGUgIlN0eWxlVmFsaWRpdHkuaCIKICNpbmNsdWRlICJUcmVlU2NvcGUuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNjEsMjEg
KzYyLDggQEAgY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZlbnQ7CiBjbGFzcyBVSVJl
cXVlc3RFdmVudDsKIAotY29uc3QgaW50IG5vZGVTdHlsZUNoYW5nZVNoaWZ0ID0gMTQ7Ci0KIHVz
aW5nIE5vZGVPclN0cmluZyA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxOb2Rl
PiwgU3RyaW5nPjsKIAotLy8gU3ludGhldGljU3R5bGVDaGFuZ2UgbWVhbnMgdGhhdCB3ZSBuZWVk
IHRvIGdvIHRocm91Z2ggdGhlIGVudGlyZSBzdHlsZSBjaGFuZ2UgbG9naWMgZXZlbiB0aG91Z2gK
LS8vIG5vIHN0eWxlIHByb3BlcnR5IGhhcyBhY3R1YWxseSBjaGFuZ2VkLiBJdCBpcyB1c2VkIHRv
IHJlc3RydWN0dXJlIHRoZSB0cmVlIHdoZW4sIGZvciBpbnN0YW5jZSwKLS8vIFJlbmRlckxheWVy
cyBhcmUgY3JlYXRlZCBvciBkZXN0cm95ZWQgZHVlIHRvIGFuaW1hdGlvbiBjaGFuZ2VzLgotZW51
bSBTdHlsZUNoYW5nZVR5cGUgeyAKLSAgICBOb1N0eWxlQ2hhbmdlID0gMCwgCi0gICAgSW5saW5l
U3R5bGVDaGFuZ2UgPSAxIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0LCAKLSAgICBGdWxsU3R5bGVD
aGFuZ2UgPSAyIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0LCAKLSAgICBTeW50aGV0aWNTdHlsZUNo
YW5nZSA9IDMgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQsCi0gICAgUmVjb25zdHJ1Y3RSZW5kZXJU
cmVlID0gNCA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdCwKLX07Ci0KIGNsYXNzIE5vZGVSYXJlRGF0
YUJhc2UgewogcHVibGljOgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmVyOyB9CkBAIC0zMjEsOCArMzA5LDkgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VXNlckFjdGlvbkVsZW1lbnQoYm9vbCBmbGFnKSB7IHNldEZsYWcoZmxhZywgSXNVc2VyQWN0
aW9uRWxlbWVudCk7IH0KIAogICAgIGJvb2wgaW5SZW5kZXJlZERvY3VtZW50KCkgY29uc3Q7Ci0g
ICAgYm9vbCBuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gc3R5bGVDaGFuZ2VUeXBl
KCkgIT0gTm9TdHlsZUNoYW5nZTsgfQotICAgIFN0eWxlQ2hhbmdlVHlwZSBzdHlsZUNoYW5nZVR5
cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZUNoYW5nZVR5cGU+KG1fbm9kZUZs
YWdzICYgU3R5bGVDaGFuZ2VNYXNrKTsgfQorICAgIGJvb2wgbmVlZHNTdHlsZVJlY2FsYygpIGNv
bnN0IHsgcmV0dXJuIHN0eWxlVmFsaWRpdHkoKSAhPSBTdHlsZTo6VmFsaWRpdHk6OlZhbGlkOyB9
CisgICAgU3R5bGU6OlZhbGlkaXR5IHN0eWxlVmFsaWRpdHkoKSBjb25zdDsKKyAgICBib29sIHN0
eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSBjb25zdDsKICAgICBib29sIGNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoQ2hpbGROZWVkc1N0
eWxlUmVjYWxjRmxhZyk7IH0KICAgICBib29sIHN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJs
aW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZyk7IH0KICAgICBib29sIGlzRWRpdGluZ1RleHQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFn
KElzVGV4dEZsYWcpICYmIGdldEZsYWcoSXNFZGl0aW5nVGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxl
bWVudEZsYWcpOyB9CkBAIC0zMzAsOCArMzE5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2hp
bGROZWVkc1N0eWxlUmVjYWxjKCkgeyBzZXRGbGFnKENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcp
OyB9CiAgICAgdm9pZCBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgbV9ub2RlRmxhZ3Mg
Jj0gfihDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnIHwgRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVj
YWxjRmxhZyk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2Fs
YyhTdHlsZUNoYW5nZVR5cGUgPSBGdWxsU3R5bGVDaGFuZ2UpOwotICAgIHZvaWQgY2xlYXJOZWVk
c1N0eWxlUmVjYWxjKCkgeyBtX25vZGVGbGFncyAmPSB+U3R5bGVDaGFuZ2VNYXNrOyB9CisgICAg
dm9pZCBzZXRIYXNWYWxpZFN0eWxlKCk7CiAKICAgICBib29sIGlzTGluaygpIGNvbnN0IHsgcmV0
dXJuIGdldEZsYWcoSXNMaW5rRmxhZyk7IH0KICAgICB2b2lkIHNldElzTGluayhib29sIGZsYWcp
IHsgc2V0RmxhZyhmbGFnLCBJc0xpbmtGbGFnKTsgfQpAQCAtNTk3LDggKzU4NSw5IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgLy8gVGhlc2UgYml0cyBhcmUgdXNlZCBieSBkZXJpdmVkIGNsYXNzZXMs
IHB1bGxlZCB1cCBoZXJlIHNvIHRoZXkgY2FuCiAgICAgICAgIC8vIGJlIHN0b3JlZCBpbiB0aGUg
c2FtZSBtZW1vcnkgd29yZCBhcyB0aGUgTm9kZSBiaXRzIGFib3ZlLgogICAgICAgICBJc1BhcnNp
bmdDaGlsZHJlbkZpbmlzaGVkRmxhZyA9IDEgPDwgMTMsIC8vIEVsZW1lbnQKLQotICAgICAgICBT
dHlsZUNoYW5nZU1hc2sgPSAxIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0IHwgMSA8PCAobm9kZVN0
eWxlQ2hhbmdlU2hpZnQgKyAxKSB8IDEgPDwgKG5vZGVTdHlsZUNoYW5nZVNoaWZ0ICsgMiksCisg
ICAgICAgIFN0eWxlVmFsaWRpdHlTaGlmdCA9IDE0LAorICAgICAgICBTdHlsZVZhbGlkaXR5TWFz
ayA9IDMgPDwgU3R5bGVWYWxpZGl0eVNoaWZ0LAorICAgICAgICBTdHlsZVJlc29sdXRpb25TaG91
bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyA9IDEgPDwgMTYsCiAgICAgICAgIElzRWRpdGluZ1RleHRP
clVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnID0gMSA8PCAxNywKICAgICAgICAgSGFzRm9jdXNX
aXRoaW4gPSAxIDw8IDE4LAogICAgICAgICBIYXNTeW50aGV0aWNBdHRyQ2hpbGROb2Rlc0ZsYWcg
PSAxIDw8IDE5LApAQCAtNjU5LDcgKzY0OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0
VHJlZVNjb3BlKFRyZWVTY29wZSYgc2NvcGUpIHsgbV90cmVlU2NvcGUgPSAmc2NvcGU7IH0KIAot
ICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpIHsgbV9u
b2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8IGNoYW5nZVR5cGU7
IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShTdHlsZTo6VmFsaWRpdHksIFN0eWxlOjpJbnZh
bGlkYXRpb25Nb2RlID0gU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6Ok5vcm1hbCk7CiAgICAgdm9p
ZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygpOwogCiAgICAgUmVmUHRyPE5vZGU+IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTY4Miw2ICs2NzEsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4+KiBtdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKTsKICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24q
PiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7CiAKKyAgICB2b2lkIGFkanVz
dFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7
CisKICAgICBpbnQgbV9yZWZDb3VudDsKICAgICBtdXRhYmxlIHVpbnQzMl90IG1fbm9kZUZsYWdz
OwogCkBAIC03NzMsNiArNzY0LDIyIEBAIGlubGluZSBDb250YWluZXJOb2RlKiBOb2RlOjpwYXJl
bnROb2RlR3UKICAgICByZXR1cm4gcGFyZW50Tm9kZSgpOwogfQogCitpbmxpbmUgU3R5bGU6OlZh
bGlkaXR5IE5vZGU6OnN0eWxlVmFsaWRpdHkoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTdHlsZTo6VmFsaWRpdHk+KChtX25vZGVGbGFncyAmIFN0eWxlVmFsaWRpdHlNYXNrKSA+
PiBTdHlsZVZhbGlkaXR5U2hpZnQpOworfQorCitpbmxpbmUgYm9vbCBOb2RlOjpzdHlsZVJlc29s
dXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0Rmxh
ZyhTdHlsZVJlc29sdXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyk7Cit9CisKK2lubGlu
ZSB2b2lkIE5vZGU6OnNldEhhc1ZhbGlkU3R5bGUoKQoreworICAgIG1fbm9kZUZsYWdzICY9IH5T
dHlsZVZhbGlkaXR5TWFzazsKKyAgICBjbGVhckZsYWcoU3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVj
b21wb3NpdGVMYXllckZsYWcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBF
TkFCTEUoVFJFRV9ERUJVR0dJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0
b25Hcm91cHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRv
bkdyb3Vwcy5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYWRp
b0J1dHRvbkdyb3Vwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFCiAgICAgICAgIC0tbV9yZXF1aXJl
ZENvdW50OwogICAgIH0KICAgICBpZiAobV9jaGVja2VkQnV0dG9uKSB7Ci0gICAgICAgIGJ1dHRv
bi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKICAgICAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pIHsK
ICAgICAgICAgICAgIG1fY2hlY2tlZEJ1dHRvbiA9IG51bGxwdHI7CiAgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjRm9yQWxsQnV0dG9ucygpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQg
UmFkaW9CdXR0b25Hcm91cDo6c2V0TmVlZHNTdHlsZVJlY2EKIHsKICAgICBmb3IgKGF1dG8mIGJ1
dHRvbiA6IG1fbWVtYmVycykgewogICAgICAgICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9u
KCkpOwotICAgICAgICBidXR0b24tPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgYnV0
dG9uLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93Um9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxNCArMTE4LDggQEAg
Ym9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeQogCiB2b2lkIFNoYWRvd1Jv
b3Q6OnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZShib29sIHZhbHVlKQogewotICAgIGlmIChpc09y
cGhhbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodmFsdWUgIT0gbV9yZXNldFN0eWxl
SW5oZXJpdGFuY2UpIHsKLSAgICAgICAgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgPSB2YWx1ZTsK
LSAgICAgICAgaWYgKGhvc3QoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
LSAgICB9CisgICAgLy8gSWYgdGhpcyB3YXMgZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0
aW9uLCBjaGlsZCBzdHlsZXMgd291bGQgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBoZXJlLgorICAg
IG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlID0gdmFsdWU7CiB9CiAKIFJlZjxOb2RlPiBTaGFkb3dS
b290OjpjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRpb24pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6YWRkU2xvdEVsZW1lbnRCeU5hbQog
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYSB0YXJnZXRl
ZCByZWNvbnN0cnVjdGlvbi4KLSAgICBzaGFkb3dSb290Lmhvc3QoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgIHNoYWRvd1Jvb3QuaG9zdCgpLT5pbnZh
bGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHNsb3ROYW1lID0gc2xvdE5hbWVGcm9tQXR0cmlidXRlVmFsdWUobmFtZSk7CiAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3Nsb3RzLmFkZChzbG90TmFtZSwgc3RkOjp1bmlxdWVfcHRyPFNs
b3RJbmZvPigpKTsKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFNsb3RBc3NpZ25tZW50OjpyZW1v
dmVTbG90RWxlbWVudEJ5CiAjZW5kaWYKIAogICAgIGlmIChhdXRvKiBob3N0ID0gc2hhZG93Um9v
dC5ob3N0KCkpIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBkbyBhIHRhcmdldGVkIHJl
Y29uc3RydWN0aW9uLgotICAgICAgICBob3N0LT5zZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3Ry
dWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGhvc3QtPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVy
c0ZvclN1YnRyZWUoKTsKIAogICAgIGF1dG8gaXQgPSBtX3Nsb3RzLmZpbmQoc2xvdE5hbWVGcm9t
QXR0cmlidXRlVmFsdWUobmFtZSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGl0ICE9IG1fc2xvdHMu
ZW5kKCkpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU2xvdEFzc2lnbm1lbnQ6OmRpZENoYW5n
ZVNsb3QoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNoYW5nZVR5cGUgPT0gQ2hh
bmdlVHlwZTo6RGlyZWN0Q2hpbGQpIHsKLSAgICAgICAgc2hhZG93Um9vdC5ob3N0KCktPnNldE5l
ZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgc2hhZG93Um9v
dC5ob3N0KCktPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICAg
ICAgbV9zbG90QXNzaWdubWVudHNJc1ZhbGlkID0gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsx
NTksNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uCiAgICAgICAg
IHN0eWxlQXR0cmlidXRlQ2hhbmdlZChuZXdWYWx1ZSwgcmVhc29uKTsKICAgICBlbHNlIGlmIChp
c1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKSkgewogICAgICAgICBlbGVtZW50RGF0YSgpLT5z
ZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkodHJ1ZSk7Ci0gICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICBpbnZhbGlkYXRlU3R5
bGUoKTsKICAgICB9CiAKICAgICBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgcmVhc29uKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlCiAKICAgICBlbGVtZW50RGF0YSgpLT5zZXRTdHls
ZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpOwogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxp
bmVTdHlsZUNoYW5nZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlKCk7CiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGRvY3VtZW50KCksICp0aGlzKTsK
IH0KIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0
eWxlQXR0cmkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNFbGVtZW50VXNpbmdTdHlsZUJhc2Vk
RWRpdGFiaWxpdHkoKTsKIAogICAgIGVsZW1lbnREYXRhKCktPnNldFN0eWxlQXR0cmlidXRlSXNE
aXJ0eSh0cnVlKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsK
KyAgICBpbnZhbGlkYXRlU3R5bGUoKTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjppbmxpbmVT
dHlsZUNoYW5nZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIx
LDcgQEAgUmVmPFRleHQ+IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChEbwogdm9pZCBUZXh0
Ojp1cGRhdGVSZW5kZXJlckFmdGVyQ29udGVudENoYW5nZSh1bnNpZ25lZCBvZmZzZXRPZlJlcGxh
Y2VkRGF0YSwgdW5zaWduZWQgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpCiB7CiAgICAgQVNTRVJUKHBh
cmVudE5vZGUoKSk7Ci0gICAgaWYgKHN0eWxlQ2hhbmdlVHlwZSgpID09IFJlY29uc3RydWN0UmVu
ZGVyVHJlZSkKKyAgICBpZiAoc3R5bGVWYWxpZGl0eSgpID49IFN0eWxlOjpWYWxpZGl0eTo6U3Vi
dHJlZUFuZFJlbmRlcmVyc0ludmFsaWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gdGV4
dFVwZGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGU6OlVwZGF0ZT4oZG9jdW1lbnQoKSk7CkBA
IC0yMzQsNyArMjM0LDYgQEAgdm9pZCBUZXh0Ojp1cGRhdGVSZW5kZXJlckFmdGVyQ29udGVudENo
YQogICAgICAgICByZW5kZXJlci0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0YSgpLCBvZmZzZXRPZlJl
cGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOwogfQogCi0KICNpZiBFTkFCTEUoVFJF
RV9ERUJVR0dJTkcpCiB2b2lkIFRleHQ6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0
ZWRMaW5rU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVk
TGlua1N0YXRlLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Zp
c2l0ZWRMaW5rU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQg
VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICAgICAgcmV0dXJuOwogICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KG1fZG9jdW1l
bnQpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LmlzTGluaygpKQotICAgICAgICAgICAgZWxlbWVu
dC5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBWaXNp
dGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGbwogICAgICAgICByZXR1cm47CiAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4obV9kb2N1bWVudCkp
IHsKICAgICAgICAgaWYgKGxpbmtIYXNoRm9yRWxlbWVudChtX2RvY3VtZW50LCBlbGVtZW50KSA9
PSBsaW5rSGFzaCkKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2
aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODMsNyArMTk4Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXQKICAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkg
Y2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBz
dHlsZSBhbmQgdGhlbWUgc3RhdGUgdGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KICAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSB7Ci0gICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVy
ZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyLT50
aGVtZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIsIENvbnRyb2xTdGF0ZXM6OkZvY3VzU3RhdGUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGJv
b2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc1N0ZXBwYWIKIAogdm9pZCBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpCiB7Ci0gICAgZWxlbWVu
dCgpLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogfQogCiBEZWNpbWFsIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6cGFy
c2VUb051bWJlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgRGVjaW1hbCYgZGVmYXVsdFZh
bHVlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRW
YWx1ZShjb25zdCBTdHJpbgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2xlYXIgdGhlIGZpbGUg
bGlzdCwgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbmV3IGVtcHR5IG9uZSBoZXJlPyBUaGlzIGlzIG9i
c2VydmFibGUgZnJvbSBKYXZhU2NyaXB0IHRocm91Z2ggY3VzdG9tIHByb3BlcnRpZXMuCiAgICAg
bV9maWxlTGlzdC0+Y2xlYXIoKTsKICAgICBtX2ljb24gPSBudWxscHRyOwotICAgIGVsZW1lbnQo
KS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLmludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gRmlsZUlucHV0VHlwZTo6Y3Jl
YXRlRmlsZUxpc3QoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgYm9vbCB3YXNMaW5rID0gaXNMaW5rKCk7CiAg
ICAgICAgIHNldElzTGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0TGlua3Mo
dGhpcykpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKLSAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICAgICAgaWYgKGlzTGluaygpKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFyc2Vk
VVJMID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChkb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkgJiYgZG9jdW1lbnQoKS5m
cmFtZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyAr
MjM1LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbgogCiAjaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzCi0gICAg
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CkBAIC0yNTAsNyArMjUwLDcg
QEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbgogICAgICAgICAgICAg
ICAgIG1fY29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSh0aGlzLCBz
dGF0aWNfY2FzdDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpLCB0eXBlKTsKICAgICAg
ICAgICAgICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVh
dGVkIGZvciB0aGUgQ2FudmFzCi0gICAgICAgICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKQEAgLTY2Miw3ICs2NjIs
NyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAjaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKQogICAgICAgICAv
LyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0
YXRlIGNoYW5nZWQuCi0gICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlz
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk3LDcgKzg5Nyw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWYKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAo
YXV0byYgZWxlbWVudFRvQWRqdXN0IDogZWxlbWVudExpbmVhZ2UodGhpcykpIHsKICAgICAgICAg
aWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoZWxlbWVudFRvQWRqdXN0KSkgewotICAg
ICAgICAgICAgZWxlbWVudFRvQWRqdXN0LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIGVsZW1lbnRUb0FkanVzdC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC05MDksNyArOTA5LDcgQEAgdm9pZCBI
VE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5kQWRqdXN0RGlyZQogICAgIFRleHREaXJlY3Rpb24gdGV4
dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2Rl
KTsKICAgICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KHRoaXMsIHRydWUsIHN0cm9uZ0Rp
cmVjdGlvbmFsaXR5VGV4dE5vZGUpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCkt
PnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gdGV4dERpcmVjdGlvbikKLSAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiB9CiAK
IHZvaWQgSFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxk
cmVuQ2hhbmdlZChFbGVtZW50KiBiZWZvcmVDaGFuZ2UsIENoaWxkQ2hhbmdlVHlwZSBjaGFuZ2VU
eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBIVE1MRmll
bGRTZXRFbGVtZW50OjphZGRJbnZhbGlkRGVzYwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1f
aW52YWxpZERlc2NlbmRhbnRzLmNvbnRhaW5zKCZpbnZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KSwg
IlVwZGF0aW5nIHRoZSBmaWVsZHNldCBvbiB2YWxpZGl0eSBjaGFuZ2UgaXMgbm90IGFuIGVmZmlj
aWVudCBvcGVyYXRpb24sIGl0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbiBuZWNlc3NhcnkuIik7
CiAKICAgICBpZiAobV9pbnZhbGlkRGVzY2VuZGFudHMuaXNFbXB0eSgpKQotICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
ICAgICBtX2ludmFsaWREZXNjZW5kYW50cy5hZGQoJmludmFsaWRGb3JtQ29udHJvbEVsZW1lbnQp
OwogfQogCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpyZW1v
dmVJbnZhbGlkRAogCiAgICAgbV9pbnZhbGlkRGVzY2VuZGFudHMucmVtb3ZlKCZmb3JtQ29udHJv
bEVsZW1lbnQpOwogICAgIGlmIChtX2ludmFsaWREZXNjZW5kYW50cy5pc0VtcHR5KCkpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxl
ZEF0dAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwotICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgaWYgKHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgIHJl
bmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVz
OjpFbmFibGVkU3RhdGUpOwogfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6ZGlzYWJsZWRTdGEKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVh
ZE9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNr
KCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0dHJp
YnV0ZUNoYW5nZWQoKQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cmVxdWlyZWRBdHQKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogICAgIC8vIFN0eWxlIHJl
Y2FsY3VsYXRpb24gaXMgbmVlZGVkIGJlY2F1c2Ugc3R5bGUgc2VsZWN0b3JzIG1heSBpbmNsdWRl
CiAgICAgLy8gOnJlcXVpcmVkIGFuZCA6b3B0aW9uYWwgcHNldWRvLWNsYXNzZXMuCi0gICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0K
IAogc3RhdGljIGJvb2wgc2hvdWxkQXV0b2ZvY3VzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVs
ZW1lbnQpCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXROZWVkc1dpbAogICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRlOwogCiAgICAg
dXBkYXRlVmFsaWRpdHkoKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKCFtX3dpbGxWYWxpZGF0ZSAmJiAhd2Fz
VmFsaWQpIHsKICAgICAgICAgcmVtb3ZlSW52YWxpZEVsZW1lbnRUb0FuY2VzdG9yRnJvbUluc2Vy
dGlvblBvaW50KCp0aGlzLCBwYXJlbnROb2RlKCkpOwpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlVmFsaWQKIAogICAgIGlmICh3aWxsVmFsaWRh
dGUgJiYgbV9pc1ZhbGlkICE9IHdhc1ZhbGlkKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZSBm
b3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFsaWQuCi0gICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwog
CiAgICAgICAgIGlmICghbV9pc1ZhbGlkKSB7CiAgICAgICAgICAgICBhZGRJbnZhbGlkRWxlbWVu
dFRvQW5jZXN0b3JGcm9tSW5zZXJ0aW9uUG9pbnQoKnRoaXMsIHBhcmVudE5vZGUoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5MSw3ICs1OTEsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3Jt
RWxlbWVuCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3duY2Fz
dDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZSk7CiAgICAgICAgIGlmIChjb250cm9sLmlzU3Vj
Y2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgICAgICBpZiAoIW1fZGVmYXVsdEJ1dHRv
bikKLSAgICAgICAgICAgICAgICBjb250cm9sLnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAg
ICAgICAgICAgICBjb250cm9sLmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXNldERlZmF1bHRCdXR0b24oKTsKICAgICAgICAg
fQpAQCAtNjE5LDcgKzYxOSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckludmFs
aWRBc3MKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCY+KGZvcm1Db250cm9s
RWxlbWVudCkubWF0Y2hlc0ludmFsaWRQc2V1ZG9DbGFzcygpKTsKIAogICAgIGlmIChtX2ludmFs
aWRBc3NvY2lhdGVkRm9ybUNvbnRyb2xzLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgbV9p
bnZhbGlkQXNzb2NpYXRlZEZvcm1Db250cm9scy5hZGQoJmZvcm1Db250cm9sRWxlbWVudCk7CiB9
CiAKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlSW52YWxp
ZEFzc29jCiB7CiAgICAgaWYgKG1faW52YWxpZEFzc29jaWF0ZWRGb3JtQ29udHJvbHMucmVtb3Zl
KCZmb3JtQ29udHJvbEVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChtX2ludmFsaWRBc3NvY2lhdGVk
Rm9ybUNvbnRyb2xzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiB9CiAK
QEAgLTczNyw5ICs3MzcsOSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXREZWZhdWx0QnV0
dG9uCiAgICAgZGVmYXVsdEJ1dHRvbigpOwogICAgIGlmIChtX2RlZmF1bHRCdXR0b24gIT0gb2xk
RGVmYXVsdCkgewogICAgICAgICBpZiAob2xkRGVmYXVsdCkKLSAgICAgICAgICAgIG9sZERlZmF1
bHQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIG9sZERlZmF1bHQtPmludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgaWYgKG1fZGVmYXVsdEJ1dHRvbikKLSAg
ICAgICAgICAgIG1fZGVmYXVsdEJ1dHRvbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICAgICAgbV9kZWZhdWx0QnV0dG9uLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjpmaW5pc2hlZEluc2VyCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVj
dFJlbmRlclRyZWUpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0
cmVlKCk7CiAgICAgc2V0TmFtZUFuZE9wZW5VUkwoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMjA3NDU3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjIsMTUgKzEyMiwxNSBAQCBTVkdEb2N1bWVudCogSFRNTEZyYW1lT3duZXJF
bGVtZW50OjpnZXRTCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OjpzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpCit2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2NoZWR1bGVpbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCkKIHsKICAgICBpZiAoU3R5bGU6OnBvc3RSZXNvbHV0
aW9uQ2FsbGJhY2tzQXJlU3VzcGVuZGVkKCkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxGcmFtZU93
bmVyRWxlbWVudD4gZWxlbWVudCA9IHRoaXM7Ci0gICAgICAgIFN0eWxlOjpxdWV1ZVBvc3RSZXNv
bHV0aW9uQ2FsbGJhY2soW2VsZW1lbnQsIGNoYW5nZVR5cGVdewotICAgICAgICAgICAgZWxlbWVu
dC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhjaGFuZ2VUeXBlKTsKKyAgICAgICAgU3R5bGU6OnF1ZXVl
UG9zdFJlc29sdXRpb25DYWxsYmFjayhbZWxlbWVudF0geworICAgICAgICAgICAgZWxlbWVudC0+
aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICB9KTsKICAgICB9
IGVsc2UKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhjaGFuZ2VUeXBlKTsKKyAgICAgICAg
aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogfQogCiBib29sIFN1YmZyYW1l
TG9hZGluZ0Rpc2FibGVyOjpjYW5Mb2FkRnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBvd25l
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAko
cmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBT
YW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7
IH0KIAotICAgIHZvaWQgc2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlw
ZSA9IEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgdm9pZCBzY2hlZHVsZWludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKIAogcHJvdGVjdGVkOgogICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAg
bV9yb3dMZW5ndGhzID0gbmV3TGVuZ3RoQXJyYXkodmFsdWUuc3RyaW5nKCksIG1fdG90YWxSb3dz
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIG9wdGltaXplIHRoZSBj
YXNlIHdoZXJlIG1fcm93TGVuZ3RocyBkaWQgbm90IGNoYW5nZS4KLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTcsNyArOTcsNyBAQCB2
b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fY29sTGVuZ3RocyA9IG5ld0xlbmd0aEFycmF5
KHZhbHVlLnN0cmluZygpLCBtX3RvdGFsQ29scyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV291
bGQgYmUgbmljZSB0byBvcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSBtX2NvbExlbmd0aHMgZGlkIG5v
dCBjaGFuZ2UuCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIwMiwxMCArMjAyLDggQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYQogCiBib29sIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHls
ZShTdHlsZTo6Q2hhbmdlKQogewotICAgIGlmIChuZWVkc1N0eWxlUmVjYWxjKCkgJiYgcmVuZGVy
ZXIoKSkgeworICAgIGlmIChuZWVkc1N0eWxlUmVjYWxjKCkgJiYgcmVuZGVyZXIoKSkKICAgICAg
ICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICAgICAgY2xlYXJOZWVkc1N0eWxl
UmVjYWxjKCk7Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
OSw3ICs1NDksNyBAQCBpbmxpbmUgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpydW5Qb3N0VHlwCiAj
ZW5kaWYKIAogICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRl
cmVyc0ZvclN1YnRyZWUoKTsKIAogICAgIGlmIChkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkg
PT0gdGhpcykKICAgICAgICAgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKFNlbGVjdGlvblJlc3RvcmF0
aW9uTW9kZTo6UmVzdG9yZSwgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsKTsKQEAgLTY5NSwx
NCArNjk1LDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY28KICAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHNldENoYW5nZWQgaWYgdGhlIGZvcm0gaXMgbG9va2lu
ZyBhdCB0aGUgZGVmYXVsdCB2YWx1ZSByaWdodCBub3cuCiAgICAgICAgIGlmICghaGFzRGlydHlW
YWx1ZSgpKSB7CiAgICAgICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsKLSAg
ICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKICAgICAg
ICAgbV92YWx1ZUF0dHJpYnV0ZVdhc1VwZGF0ZWRBZnRlclBhcnNpbmcgPSAhbV9wYXJzaW5nSW5Q
cm9ncmVzczsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gY2hlY2tlZEF0dHIpIHsKICAgICAgICAg
aWYgKG1faW5wdXRUeXBlLT5pc0NoZWNrYWJsZSgpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAg
ICAgICAgIC8vIEFub3RoZXIgcmFkaW8gYnV0dG9uIGluIHRoZSBzYW1lIGdyb3VwIG1pZ2h0IGJl
IGNoZWNrZWQgYnkgc3RhdGUKICAgICAgICAgLy8gcmVzdG9yZS4gV2Ugc2hvdWxkbid0IGNhbGwg
c2V0Q2hlY2tlZCgpIGV2ZW4gaWYgdGhpcyBoYXMgdGhlIGNoZWNrZWQKQEAgLTczMSw5ICs3MzEs
OSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAgICAgICAgIG1f
bWF4UmVzdWx0cyA9ICF2YWx1ZS5pc051bGwoKSA/IHN0ZDo6bWluKHZhbHVlLnRvSW50KCksIG1h
eFNhdmVkUmVzdWx0cykgOiAtMTsKICAgICAgICAgbV9pbnB1dFR5cGUtPm1heFJlc3VsdHNBdHRy
aWJ1dGVDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGF1dG9zYXZlQXR0cikgewot
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gaW5jcmVtZW50YWxBdHRyKSB7Ci0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBtaW5BdHRyKSB7CiAgICAgICAgIG1f
aW5wdXRUeXBlLT5taW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAgICAgdXBkYXRlVmFs
aWRpdHkoKTsKQEAgLTg5NSw3ICs4OTUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENo
ZWNrZWQoYm9vbCBuCiAKICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IGZhbHNlOwog
ICAgIG1faXNDaGVja2VkID0gbm93Q2hlY2tlZDsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKFJhZGlvQnV0dG9u
R3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKICAgICAgICAgYnV0dG9ucy0+
dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJv
bENoYW5nZUV2ZW50KCk7CiAgICAgfQogCi0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAg
IGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRJbmRldGVybWluYXRlKGJvb2wgbmV3VmFsdWUpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWluYXRlKAogCiAgICAgbV9pc0luZGV0ZXJt
aW5hdGUgPSBuZXdWYWx1ZTsKIAotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUo
KS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7
CkBAIC0xMzMwLDcgKzEzMzAsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9GaWxs
ZWQoYm9vCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBdXRvRmlsbGVkID0gYXV0b0ZpbGxl
ZDsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNob3dBdXRvRmlsbEJ1dHRv
bihBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAtMTc4Niw3ICsxNzg2
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjptYXhMZW5ndGhBdHRyaWJ1dAogICAgICAgICB1
cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQg
dG8gZG8gdGhpcyBpZiB0aGUgZWZmZWN0aXZlIG1heExlbmd0aCBoYXMgbm90IGNoYW5nZWQ/Ci0g
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUo
KTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCkBAIC0xODAyLDcgKzE4MDIsNyBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6Om1pbkxlbmd0aEF0dHJpYnV0CiAgICAgICAgIHVwZGF0ZVZhbHVl
SWZOZWVkZWQoKTsKIAogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBkbyB0aGlz
IGlmIHRoZSBlZmZlY3RpdmUgbWluTGVuZ3RoIGhhcyBub3QgY2hhbmdlZD8KLSAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIHVw
ZGF0ZVZhbGlkaXR5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSFRN
TExpbmtFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgYm9vbCB3YXNMaW5rID0g
aXNMaW5rKCk7CiAgICAgICAgIHNldElzTGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFBy
b2hpYml0TGlua3ModGhpcykpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKLSAg
ICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTc2LDcgKzQ1NzYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyUmVuZGVyCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZCglcCkiLCB0aGlzKTsKIAogICAgIC8vIEtp
Y2sgb2ZmIGEgZmFrZSByZWNhbGNTdHlsZSB0aGF0IHdpbGwgdXBkYXRlIHRoZSBjb21wb3NpdGlu
ZyB0cmVlLgotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwor
ICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgVVNFKEFWRk9VTkRBVElPTikKQEAgLTU1OTAsNyArNTU5MCw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWUKICAgICB9CiAgICAgCiAgICAgbV9w
bGF5ZXItPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHBsYXRmb3JtTGF5ZXIsIGNvbXBsZXRpb25I
YW5kbGVyKTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
KyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoYwogICAgICAgICByZXR1cm47CiAKICAgICBjbGVhclVzZUZhbGxiYWNrQ29udGVu
dCgpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAg
ICBpbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKIHN0YXRpYyB2
b2lkIG1hcERhdGFQYXJhbVRvU3JjKFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKAogICAgIHVwZGF0ZURvY05hbWVkSXRlbSgpOwogICAg
IGlmIChpbkRvY3VtZW50KCkgJiYgIXVzZUZhbGxiYWNrQ29udGVudCgpKSB7CiAgICAgICAgIHNl
dE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB9CiAgICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSk7CiB9CkBAIC0zNzgsNyAr
Mzc4LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDbwogICAgIGlm
ICghaW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVy
ZXJzRm9yU3VidHJlZSgpOwogCiAgICAgLy8gQmVmb3JlIHdlIGdpdmUgdXAgYW5kIHVzZSBmYWxs
YmFjayBjb250ZW50LCBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIE1JTUUgdHlwZSBpc3N1ZS4K
ICAgICBhdXRvKiBsb2FkZXIgPSBpbWFnZUxvYWRlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUK
ICAgICByZWNhbGNTZWxlY3RPcHRpb25zKCk7CiAKICAgICBpZiAobmFtZSA9PSBkaXNhYmxlZEF0
dHIpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1Nl
bGVjdE9wdGlvbnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIEhU
TUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgIGJvb2wgb2xkRGlzYWJs
ZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIXZhbHVlLmlzTnVsbCgpOwog
ICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJl
ZSgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5o
YXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0
ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkVuYWJsZWRTdGF0ZSk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gc2VsZWN0ZWRBdHRyKSB7Ci0gICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgp
OwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgbWF0Y2ggd2hhdCB0aGUgSFRNTCBz
cGVjaWZpY2F0aW9uIHNheXMuCiAgICAgICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIGltcGxpZXMg
dGhhdCByZW1vdmluZyB0aGUgc2VsZWN0ZWQgYXR0cmlidXRlIG9yCkBAIC0yMjksNyArMjI5LDcg
QEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2lzU2VsZWN0ZWQgPSBzZWxlY3RlZDsKLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgc2Vs
ZWN0LT5pbnZhbGlkYXRlU2VsZWN0ZWRJdGVtcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyAr
MzAwLDcgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50UwogICAgIHJv
b3QtPnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKICAgICBpZiAobV9wbHVnaW5SZXBs
YWNlbWVudC0+aW5zdGFsbFJlcGxhY2VtZW50KCpyb290KSkgewogICAgICAgICBzZXREaXNwbGF5
U3RhdGUoRGlzcGxheWluZ1BsdWdpblJlcGxhY2VtZW50KTsKLSAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUpOworICAgICAgICBpbnZhbGlkYXRlU3R5bGVB
bmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OnNldERpc3BsYXlTCiAgICAgaWYgKHN0YXRlID09IFJlc3RhcnRpbmdXaXRoUGVuZGluZ01vdXNl
Q2xpY2sgfHwgc3RhdGUgPT0gUmVzdGFydGluZykgewogICAgICAgICBtX2lzUmVzdGFydGVkUGx1
Z2luID0gdHJ1ZTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgaWYgKGRp
c3BsYXlTdGF0ZSgpID09IERpc3BsYXlpbmdTbmFwc2hvdCkKICAgICAgICAgICAgIG1fcmVtb3Zl
U25hcHNob3RUaW1lci5zdGFydE9uZVNob3QocmVtb3ZlU25hcHNob3RUaW1lckRlbGF5KTsKICAg
ICB9CkBAIC0yMzksMTMgKzIzOSwxMyBAQCBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNo
aWxkU2hvdWxkCiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShT
dHlsZTo6Q2hhbmdlIGNoYW5nZSkKIHsKICAgICAvLyBNYWtlIHN1cmUgc3R5bGUgcmVjYWxjcyBz
Y2hlZHVsZWQgYnkgYSBjaGlsZCBzaGFkb3cgdHJlZSBkb24ndCB0cmlnZ2VyIHJlY29uc3RydWN0
aW9uIGFuZCBjYXVzZSBmbGlja2VyLgotICAgIGlmIChjaGFuZ2UgPT0gU3R5bGU6Ok5vQ2hhbmdl
ICYmIHN0eWxlQ2hhbmdlVHlwZSgpID09IE5vU3R5bGVDaGFuZ2UpCisgICAgaWYgKGNoYW5nZSA9
PSBTdHlsZTo6Tm9DaGFuZ2UgJiYgc3R5bGVWYWxpZGl0eSgpID09IFN0eWxlOjpWYWxpZGl0eTo6
VmFsaWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFRoZXJlIHNob3Vk
bid0IGJlIG5lZWQgdG8gZm9yY2UgcmVuZGVyIHRyZWUgcmVjb25zdHJ1Y3Rpb24gaGVyZS4KICAg
ICAvLyBJdCBpcyBvbmx5IGRvbmUgYmVjYXVzZSBsb2FkaW5nIGFuZCBsb2FkIGV2ZW50IGRpc3Bh
dGNoaW5nIGlzIHRpZWQgdG8gcmVuZGVyIHRyZWUgY29uc3RydWN0aW9uLgogICAgIGlmICghdXNl
RmFsbGJhY2tDb250ZW50KCkgJiYgbmVlZHNXaWRnZXRVcGRhdGUoKSAmJiByZW5kZXJlcigpICYm
ICFpc0ltYWdlVHlwZSgpICYmIChkaXNwbGF5U3RhdGUoKSAhPSBEaXNwbGF5aW5nU25hcHNob3Qp
KQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7Cisg
ICAgICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6ZmluaXNoUGFyc2kKIAogICAgIHNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwogICAg
IGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKQEAg
LTMzMiw3ICszMzIsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnByZXBhcmVGb3JE
CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVu
c2lvbigpCiB7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhSZWNvbnN0cnVjdFJlbmRlclRyZWUp
OworICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIAogICAgIEhU
TUxQbHVnSW5FbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCk7CiB9CkBAIC00
MzcsNyArNDM3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW1vdmVTbmFwcwog
ewogICAgIG1fc25hcHNob3RJbWFnZSA9IG51bGxwdHI7CiAgICAgbV9pc1Jlc3RhcnRlZFBsdWdp
biA9IGZhbHNlOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2Up
OworICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICBpZiAocmVu
ZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQpAQCAtNTE1LDcgKzUx
NSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNuYXAKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2V0RGlzcGxheVN0YXRlKFJlc3RhcnRpbmcpOwotICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVB
bmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6ZGlzcGF0Y2hQZW5kaW5nTW91c2VDbGljaygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCB2b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEVsZW1lbnRTdGF0CiAg
ICAgICAgIGJvb2wgd2FzRGV0ZXJtaW5hdGUgPSByZW5kZXItPmlzRGV0ZXJtaW5hdGUoKTsKICAg
ICAgICAgcmVuZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgICAgICBpZiAod2FzRGV0ZXJt
aW5hdGUgIT0gaXNEZXRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworICAgICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoYwogICAgICAgICBtX3NpemUgPSBzaXplOwogICAgICAgICB1cGRh
dGVWYWxpZGl0eSgpOwogICAgICAgICBpZiAobV9zaXplICE9IG9sZFNpemUpIHsKLSAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAg
ICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICAgICAgICAg
IHNldFJlY2FsY0xpc3RJdGVtcygpOwogICAgICAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKICAg
ICAgICAgfQpAQCAtNzQ0LDcgKzc0NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJl
Y2FsY0xpc3RJdGUKICAgICAvLyBNYW51YWwgc2VsZWN0aW9uIGFuY2hvciBpcyByZXNldCB3aGVu
IG1hbmlwdWxhdGluZyB0aGUgc2VsZWN0IHByb2dyYW1tYXRpY2FsbHkuCiAgICAgbV9hY3RpdmVT
ZWxlY3Rpb25BbmNob3JJbmRleCA9IC0xOwogICAgIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJl
cigpOwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAgICAgaWYgKCFpbkRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKEhUTUxDb2xs
ZWN0aW9uKiBjb2xsZWN0aW9uID0gY2FjaGVkSFRNTENvbGxlY3Rpb24oU2VsZWN0T3B0aW9ucykp
CiAgICAgICAgICAgICBjb2xsZWN0aW9uLT5pbnZhbGlkYXRlQ2FjaGUoZG9jdW1lbnQoKSk7CkBA
IC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU11bHRpcGxl
QXR0CiAgICAgbV9tdWx0aXBsZSA9ICF2YWx1ZS5pc051bGwoKTsKICAgICB1cGRhdGVWYWxpZGl0
eSgpOwogICAgIGlmIChvbGRVc2VzTWVudUxpc3QgIT0gdXNlc01lbnVMaXN0KCkpCi0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogfQogCiBib29sIEhUTUxTZWxl
Y3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCkBAIC0x
MDcxLDcgKzEwNzEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiAgICAgICAg
IGZpcnN0T3B0aW9uLT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogCiAgICAgc2V0T3B0aW9uc0No
YW5nZWRPblJlbmRlcmVyKCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgor
I2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkdl
bmVyaWNDYWNoZWRIVE1MQ29sbGVjdGlvbi5oIgpAQCAtMjY1LDI3ICsyNjYsMjggQEAgdm9pZCBI
VE1MVGFibGVFbGVtZW50OjpkZWxldGVSb3coaW50IGluZAogICAgIHJvdy0+cmVtb3ZlKGVjKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGlzVGFibGVDZWxsQW5jZXN0b3IoTm9kZSogbikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc1RhYmxlQ2VsbEFuY2VzdG9yKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IG4tPmhhc1RhZ05h
bWUodGJvZHlUYWcpIHx8Ci0gICAgICAgICAgIG4tPmhhc1RhZ05hbWUodGZvb3RUYWcpIHx8IG4t
Pmhhc1RhZ05hbWUodHJUYWcpIHx8Ci0gICAgICAgICAgIG4tPmhhc1RhZ05hbWUodGhUYWcpOwor
ICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUodGhlYWRUYWcpCisgICAgICAgIHx8IGVsZW1l
bnQuaGFzVGFnTmFtZSh0Ym9keVRhZykKKyAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRm
b290VGFnKQorICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodHJUYWcpCisgICAgICAgIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZSh0aFRhZyk7CiB9CiAKLXN0YXRpYyBib29sIHNldFRhYmxlQ2Vs
bHNDaGFuZ2VkKE5vZGUqIG4pCitzdGF0aWMgYm9vbCBzZXRUYWJsZUNlbGxzQ2hhbmdlZChFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChuKTsKICAgICBib29sIGNlbGxDaGFuZ2VkID0g
ZmFsc2U7CiAKLSAgICBpZiAobi0+aGFzVGFnTmFtZSh0ZFRhZykpCisgICAgaWYgKGVsZW1lbnQu
aGFzVGFnTmFtZSh0ZFRhZykpCiAgICAgICAgIGNlbGxDaGFuZ2VkID0gdHJ1ZTsKLSAgICBlbHNl
IGlmIChpc1RhYmxlQ2VsbEFuY2VzdG9yKG4pKSB7Ci0gICAgICAgIGZvciAoTm9kZSogY2hpbGQg
PSBuLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQor
ICAgIGVsc2UgaWYgKGlzVGFibGVDZWxsQW5jZXN0b3IoZWxlbWVudCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAg
ICAgICAgY2VsbENoYW5nZWQgfD0gc2V0VGFibGVDZWxsc0NoYW5nZWQoY2hpbGQpOwogICAgIH0K
IAogICAgIGlmIChjZWxsQ2hhbmdlZCkKLSAgICAgICBuLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgcmV0
dXJuIGNlbGxDaGFuZ2VkOwogfQpAQCAtNDIyLDEwICs0MjQsMTAgQEAgdm9pZCBIVE1MVGFibGVF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgIGlmIChib3JkZXJzQmVmb3JlICE9IGNlbGxC
b3JkZXJzKCkgfHwgb2xkUGFkZGluZyAhPSBtX3BhZGRpbmcpIHsKICAgICAgICAgbV9zaGFyZWRD
ZWxsU3R5bGUgPSBudWxscHRyOwogICAgICAgICBib29sIGNlbGxDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4oKnRoaXMpKQogICAgICAgICAgICAgY2VsbENoYW5nZWQgfD0gc2V0VGFi
bGVDZWxsc0NoYW5nZWQoY2hpbGQpOwogICAgICAgICBpZiAoY2VsbENoYW5nZWQpCi0gICAgICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw3ICsz
OTcsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlQ29tbW9uCiAgICAgc2V0
SW5uZXJUZXh0VmFsdWUobV92YWx1ZSk7CiAgICAgc2V0TGFzdENoYW5nZVdhc05vdFVzZXJFZGl0
KCk7CiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7Ci0gICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBzZXRGb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogCiAgICAgLy8gU2V0IHRoZSBjYXJl
dCB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0IHZhbHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6dXBkYXRlUAogICAgIGlmIChwbGFjZUhvbGRlcldhc1Zpc2libGUgPT0gbV9p
c1BsYWNlaG9sZGVyVmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOworICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODMsNyAr
NjgzLDcgQEAgYm9vbCBJbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQQogdm9pZCBJ
bnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFs
dWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCiB7CiAgICAg
ZWxlbWVudCgpLnNldFZhbHVlSW50ZXJuYWwoc2FuaXRpemVkVmFsdWUsIGV2ZW50QmVoYXZpb3Ip
OwotICAgIGVsZW1lbnQoKS5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgZWxlbWVudCgpLmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKICAgICAg
ICAgcmV0dXJuOwogICAgIHN3aXRjaCAoZXZlbnRCZWhhdmlvcikgewpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAs
NyArMzAwLDcgQEAgdm9pZCBOdW1iZXJJbnB1dFR5cGU6Om1pbk9yTWF4QXR0cmlidXRlQwogewog
ICAgIElucHV0VHlwZTo6bWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKLSAgICBlbGVtZW50LnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNp
b24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5
cGU6OnN1YnRyZWVIYXNDaGFuZwogICAgIGVsZW1lbnQoKS5zZXRWYWx1ZUZyb21SZW5kZXJlcihp
bm5lclRleHQpOwogICAgIGVsZW1lbnQoKS51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsK
ICAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGNoYW5nZS4KLSAgICBlbGVtZW50KCkuc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVl
KCk7CiAKICAgICBkaWRTZXRWYWx1ZUJ5VXNlckVkaXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNyBAQCB2b2lkIE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0CiAgICAgICAg
IGJvb2wgd2FzTGluayA9IGlzTGluaygpOwogICAgICAgICBzZXRJc0xpbmsoIXZhbHVlLmlzTnVs
bCgpICYmICFzaG91bGRQcm9oaWJpdExpbmtzKHRoaXMpKTsKICAgICAgICAgaWYgKHdhc0xpbmsg
IT0gaXNMaW5rKCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09
IHJvd3NwYW5BdHRyKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KHJlbmRlcmVy
KCkpICYmIGhhc1RhZ05hbWUobXRkVGFnKSkKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRh
YmxlQ2VsbD4oKnJlbmRlcmVyKCkpLmNvbFNwYW5PclJvd1NwYW5DaGFuZ2VkKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIE1hdGhNTFNlbGVjdEVs
ZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkCiAgICAgICAgIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93
blJlbmRlcmVycygqbV9zZWxlY3RlZENoaWxkKTsKIAogICAgIG1fc2VsZWN0ZWRDaGlsZCA9IG5l
d1NlbGVjdGVkQ2hpbGQ7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUoKTsKIH0KIAogdm9pZCBNYXRoTUxTZWxlY3RFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVS
ZWNhbGMoCiB7CiAgICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucGFn
ZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOwogICAgIGlmIChlbGVt
ZW50KQotICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxl
Q2hhbmdlKTsKKyAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3Np
dGlvbigpOwogfQogCiBkb3VibGUgQW5pbWF0aW9uQmFzZTo6ZHVyYXRpb24oKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyAr
MTEyLDcgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoUgogICAgIH0p
OwogICAgIAogICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBkaWRuJ3QgZG8gYW55dGhpbmcgT1Ig
d2UgYXJlIHN1c3BlbmRlZCAoc28gd2UgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gZG8gYSBzZXROZWVk
c1N0eWxlUmVjYWxjKCkgd2hlbiBzdXNwZW5kZWQpLgorICAgIC8vIGRvIGEgaW52YWxpZGF0ZVN0
eWxlRm9yU3VidHJlZSgpIHdoZW4gc3VzcGVuZGVkKS4KICAgICBSZWZQdHI8Q29tcG9zaXRlQW5p
bWF0aW9uPiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMudGFrZSgmcmVuZGVyZXIp
OwogICAgIEFTU0VSVChhbmltYXRpb24pOwogICAgIHJlbmRlcmVyLnNldElzQ1NTQW5pbWF0aW5n
KGZhbHNlKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0CiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGNvbXBvc2l0
ZUFuaW1hdGlvbi5rZXktPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVu
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZUNhY2hl
U3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOwotICAgICAgICAgICAgICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmZpcmVFdmUKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1fZWxlbWVu
dENoYW5nZXNUb0Rpc3BhdGNoKQotICAgICAgICBjaGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICBjaGFuZ2UtPmludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKIAogICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoLmNs
ZWFyKCk7CiAKQEAgLTM1OCw3ICszNTgsNyBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpwYXVzZUFuCiAKICAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlv
biA9IGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbigqcmVuZGVyZXIpOwogICAgIGlmIChjb21wb3Np
dGVBbmltYXRpb24ucGF1c2VBbmltYXRpb25BdFRpbWUobmFtZSwgdCkpIHsKLSAgICAgICAgcmVu
ZGVyZXItPmVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5n
ZSk7CisgICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZExheWVy
Q29tcG9zaXRpb24oKTsKICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hl
cigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNzMsNyArMzczLDcgQEAgYm9v
bCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcgogCiAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oKnJl
bmRlcmVyKTsKICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAgcmVuZGVyZXItPmVsZW1l
bnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAg
IHJlbmRlcmVyLT5lbGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKICAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBBbmltYXRpb25D
b250cm9sbGVyOjpjYW5jZWxBbmltYXRpbwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCk7CiAgICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOwogICAgIGlmIChl
bGVtZW50KQotICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0
eWxlQ2hhbmdlKTsKKyAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21w
b3NpdGlvbigpOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlv
bnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChXcmFwcGVk
SW0KICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgICAgICAgICAgaWYgKGVsZW1l
bnQoKSkgewogICAgICAgICAgICAgICAgIG1fbmVlZHNUb1NldFNpemVGb3JBbHRUZXh0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBlbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhl
dGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgIGVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5ODUsNyArNjk4NSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCiB7CiAgICAgLy8gV2UgdXNlIHRoZSBlbmNs
b3NpbmcgZWxlbWVudCBzbyB0aGF0IHdlIHJlY2FsY3VsYXRlIHN0eWxlIGZvciB0aGUgYW5jZXN0
b3Igb2YgYW4gYW5vbnltb3VzIG9iamVjdC4KICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGVu
Y2xvc2luZ0VsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhT
eW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQ5LDcgKzM1NDksNyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExhCiAgICAgICAgIGNhc2Ug
Um9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewogICAgICAgICAgICAgLy8gVGhl
IGxheWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVD
b25maWd1cmF0aW9uKCkKICAgICAgICAgICAgIC8vIGZvciB0aGUgZnJhbWUncyByZW5kZXJlciBp
biB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgICAgICAgICAgbV9yZW5kZXJWaWV3LmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCktPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CisgICAgICAgICAgICBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVs
ZW1lbnQoKS0+c2NoZWR1bGVpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTM1NzgsNyArMzU3OCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hSb290TGEKICAgICAgICAgICAgIG1f
cm9vdENvbnRlbnRMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwogCiAgICAgICAgIGlmIChIVE1M
RnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgb3duZXJFbGVtZW50LT5zY2hlZHVsZVNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgb3duZXJF
bGVtZW50LT5zY2hlZHVsZWludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFDaHJvbWVD
bGllbnQ6IHsKQEAgLTM2MzcsNyArMzYzNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpub3RpZnlJRnJhbWUKICAgICAvLyBDb21wb3NpdGluZyBhZmZlY3RzIHRoZSBhbnN3ZXIgdG8g
UmVuZGVySUZyYW1lOjpyZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSwgc28KICAgICAv
LyB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgc3R5bGUgcmVjYWxjIGluIG91ciBwYXJlbnQgZG9jdW1l
bnQuCiAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9yZW5k
ZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIG93bmVyRWxlbWVudC0+
c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAg
ICAgb3duZXJFbGVtZW50LT5zY2hlZHVsZWludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVySGFzM0RDb250ZW50
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4OCwx
MyArMTQ4OCwxNSBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgCiB7
CiAgICAgYm9vbCB2YWx1ZUNoYW5nZWQgPSAoZHJhZ09uICE9IGlzRHJhZ2dpbmcoKSk7CiAgICAg
c2V0SXNEcmFnZ2luZyhkcmFnT24pOwotICAgIGlmICh2YWx1ZUNoYW5nZWQgJiYgbm9kZSgpICYm
IChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQotICAg
ICAgICBub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgIGlmICghaXM8UmVuZGVy
RWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47CisgICAgYXV0byYgcmVuZGVyRWxlbWVu
dCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKTsKIAotICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+
KCp0aGlzKSkpCisgICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiByZW5kZXJFbGVtZW50LmVsZW1lbnQo
KSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8IHJlbmRlckVsZW1lbnQuZWxlbWVudCgp
LT5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKQorICAgICAgICByZW5kZXJFbGVtZW50LmVsZW1l
bnQoKS0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworCisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4ocmVuZGVyRWxlbWVudCkpCiAgICAgICAg
IGNoaWxkLnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkocmV2aXNpb24g
MjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlciwgZmFsc2UpOwogCiAg
ICAgaWYgKHJlbmRlcmVyLmVsZW1lbnQoKSAmJiAhcmVuZGVyZXIuZWxlbWVudCgpLT5pc1NWR0Vs
ZW1lbnQoKSkKLSAgICAgICAgcmVuZGVyZXIuZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgcmVuZGVyZXIuZWxlbWVudCgpLT5pbnZh
bGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKIHZvaWQgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFsaWRh
dGlvbi5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJp
YnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE2ICs2NSwx
NiBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmICghaXNIVE1MKSB7Ci0gICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV9l
bGVtZW50LnNoYWRvd1Jvb3QoKSAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1Bz
ZXVkb0VsZW1lbnRSdWxlcygpKSB7Ci0gICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVj
YWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVG
b3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQuc2V0
TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgbV9lbGVtZW50LmludmFs
aWRhdGVTdHlsZSgpOwogCiAgICAgaWYgKCFjaGlsZHJlbk9mVHlwZTxFbGVtZW50PihtX2VsZW1l
bnQpLmZpcnN0KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDExICsxMTYsMTEgQEAgdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hhZG93Um9vdCAmJiBy
dWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKSB7Ci0g
ICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7Cisg
ICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVT
dHlsZUNoYW5nZSk7CisgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwogCiAgICAgaWYg
KCFjaGlsZHJlbk9mVHlwZTxFbGVtZW50PihtX2VsZW1lbnQpLmZpcnN0KCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JZENoYW5nZUludmFsaWRhdGlv
bi5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hhbmdl
SW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTkgKzYxLDE5IEBAIHZvaWQg
SWRDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fZWxlbWVudC5zaGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5o
YXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkgewotICAgICAgICBtX2VsZW1lbnQuc2V0TmVl
ZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOworICAgICAgICBtX2VsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9l
bGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgIG1fZWxl
bWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgZWFzaWx5IG9w
dGltaXplZCBmb3IgZmluZS1ncmFpbmVkIGRlc2NlbmRhbnQgaW52YWxpZGF0aW9uIHNpbWlsYXIg
dG8gQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uCiAgICAgLy8gSG93ZXZlciB1c2luZyBpZHMgZm9y
IGR5bmFtaWMgc3R5bGluZyBpcyByYXJlIGFuZCB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aCB0
aGUgbWVtb3J5IGNvc3Qgb2YgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcy4KICAgICBib29s
IG1heUFmZmVjdERlc2NlbmRhbnRTdHlsZSA9IHJ1bGVTZXRzLmZlYXR1cmVzKCkuaWRzTWF0Y2hp
bmdBbmNlc3RvcnNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRJZC5pbXBsKCkpOwogICAgIGlmICht
YXlBZmZlY3REZXNjZW5kYW50U3R5bGUpCi0gICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxl
UmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CisgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAgICAgZWxzZQotICAgICAgICBtX2VsZW1lbnQuc2V0TmVlZHNTdHls
ZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CisgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRl
U3R5bGUoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVw
ZGF0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVV
cGRhdGVyLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAgdm9p
ZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlRWxlbWVudFJlbgogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byYgcmVuZGVyZXIgPSAqZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHVwZGF0
ZS5pc1N5bnRoZXRpYykgeworICAgIGlmICh1cGRhdGUucmVjb21wb3NpdGVMYXllcikgewogICAg
ICAgICByZW5kZXJlci5zZXRTdHlsZShXVEZNb3ZlKCp1cGRhdGUuc3R5bGUpLCBTdHlsZURpZmZl
cmVuY2VSZWNvbXBvc2l0ZUxheWVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDcgKzM5
Miw3IEBAIHZvaWQgU2NvcGU6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGEKICAgICBpZiAo
cmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpIHsKICAgICAgICAgaWYgKG1fc2hhZG93Um9vdCkgewog
ICAgICAgICAgICAgZm9yIChhdXRvJiBzaGFkb3dDaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1l
bnQ+KCptX3NoYWRvd1Jvb3QpKQotICAgICAgICAgICAgICAgIHNoYWRvd0NoaWxkLnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dDaGlsZC5pbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9kb2N1bWVudC5z
Y2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjgsNyArMTY4LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRTdHlsZUZvck5vblJlbmRlcmVkRGVzYwog
CiAgICAgICAgIGlmIChjaGlsZC5uZWVkc1N0eWxlUmVjYWxjKCkgfHwgYWZmZWN0ZWRCeVByZXZp
b3VzU2libGluZykgewogICAgICAgICAgICAgY2hpbGQucmVzZXRDb21wdXRlZFN0eWxlKCk7Ci0g
ICAgICAgICAgICBjaGlsZC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGNo
aWxkLnNldEhhc1ZhbGlkU3R5bGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjaGlsZC5j
aGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkgewpAQCAtMjAwLDEzICsyMDAsMTMgQEAgRWxlbWVudFVw
ZGF0ZSBUcmVlUmVzb2x2ZXI6OnJlc29sdmVFbGVtZQogICAgIGlmICghYWZmZWN0c1JlbmRlcmVk
U3VidHJlZShlbGVtZW50LCAqbmV3U3R5bGUpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
Ym9vbCBzaG91bGRSZWNvbnN0cnVjdFJlbmRlclRyZWUgPSBlbGVtZW50LnN0eWxlQ2hhbmdlVHlw
ZSgpID09IFJlY29uc3RydWN0UmVuZGVyVHJlZSB8fCBwYXJlbnQoKS5jaGFuZ2UgPT0gRGV0YWNo
OworICAgIGJvb2wgc2hvdWxkUmVjb25zdHJ1Y3RSZW5kZXJUcmVlID0gZWxlbWVudC5zdHlsZVZh
bGlkaXR5KCkgPj0gVmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5kZXJlcnNJbnZhbGlkIHx8IHBhcmVu
dCgpLmNoYW5nZSA9PSBEZXRhY2g7CiAgICAgYXV0byogcmVuZGVyZXJUb1VwZGF0ZSA9IHNob3Vs
ZFJlY29uc3RydWN0UmVuZGVyVHJlZSA/IG51bGxwdHIgOiBlbGVtZW50LnJlbmRlcmVyKCk7CiAK
ICAgICBhdXRvIHVwZGF0ZSA9IGNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShXVEZNb3ZlKG5l
d1N0eWxlKSwgcmVuZGVyZXJUb1VwZGF0ZSwgbV9kb2N1bWVudCk7CiAKLSAgICBpZiAoZWxlbWVu
dC5zdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNTdHlsZUNoYW5nZSkKLSAgICAgICAgdXBk
YXRlLmlzU3ludGhldGljID0gdHJ1ZTsKKyAgICBpZiAoZWxlbWVudC5zdHlsZVJlc29sdXRpb25T
aG91bGRSZWNvbXBvc2l0ZUxheWVyKCkpCisgICAgICAgIHVwZGF0ZS5yZWNvbXBvc2l0ZUxheWVy
ID0gdHJ1ZTsKIAogICAgIGF1dG8qIGV4aXN0aW5nU3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxl
KCk7CiAKQEAgLTIzMyw3ICsyMzMsNyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6cmVz
b2x2ZUVsZW1lCiAgICAgICAgICAgICB1cGRhdGUuY2hhbmdlID0gRGV0YWNoOwogICAgIH0KIAot
ICAgIGlmICh1cGRhdGUuY2hhbmdlICE9IERldGFjaCAmJiAocGFyZW50KCkuY2hhbmdlID09IEZv
cmNlIHx8IGVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlKSkKKyAg
ICBpZiAodXBkYXRlLmNoYW5nZSAhPSBEZXRhY2ggJiYgKHBhcmVudCgpLmNoYW5nZSA9PSBGb3Jj
ZSB8fCBlbGVtZW50LnN0eWxlVmFsaWRpdHkoKSA+PSBWYWxpZGl0eTo6U3VidHJlZUludmFsaWQp
KQogICAgICAgICB1cGRhdGUuY2hhbmdlID0gRm9yY2U7CiAKICAgICByZXR1cm4gdXBkYXRlOwpA
QCAtMjQ1LDcgKzI0NSw3IEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXQKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZTsKICAg
ICBpZiAocmVuZGVyZXJUb1VwZGF0ZSAmJiBkb2N1bWVudC5mcmFtZSgpLT5hbmltYXRpb24oKS51
cGRhdGVBbmltYXRpb25zKCpyZW5kZXJlclRvVXBkYXRlLCAqbmV3U3R5bGUsIGFuaW1hdGVkU3R5
bGUpKQotICAgICAgICB1cGRhdGUuaXNTeW50aGV0aWMgPSB0cnVlOworICAgICAgICB1cGRhdGUu
cmVjb21wb3NpdGVMYXllciA9IHRydWU7CiAKICAgICBpZiAoYW5pbWF0ZWRTdHlsZSkgewogICAg
ICAgICB1cGRhdGUuY2hhbmdlID0gZGV0ZXJtaW5lQ2hhbmdlKHJlbmRlcmVyVG9VcGRhdGUtPnN0
eWxlKCksICphbmltYXRlZFN0eWxlKTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIFRyZWVSZXNv
bHZlcjo6cG9wUGFyZW50KCkKIHsKICAgICBhdXRvJiBwYXJlbnRFbGVtZW50ID0gKnBhcmVudCgp
LmVsZW1lbnQ7CiAKLSAgICBwYXJlbnRFbGVtZW50LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgIHBhcmVudEVsZW1lbnQuc2V0SGFzVmFsaWRTdHlsZSgpOwogICAgIHBhcmVudEVsZW1lbnQu
Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgIGlmIChwYXJlbnQoKS5kaWRQdXNo
U2NvcGUpCkBAIC0zMzIsMTEgKzMzMiwxMSBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZXNvbHZlRWxl
bWVudChjb25zdCBFCiAKIHN0YXRpYyB2b2lkIGNsZWFyTmVlZHNTdHlsZVJlc29sdXRpb24oRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBlbGVtZW50LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwor
ICAgIGVsZW1lbnQuc2V0SGFzVmFsaWRTdHlsZSgpOwogICAgIGlmIChhdXRvKiBiZWZvcmUgPSBl
bGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgYmVmb3JlLT5jbGVhck5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgYmVmb3JlLT5zZXRIYXNWYWxpZFN0eWxlKCk7CiAgICAg
aWYgKGF1dG8qIGFmdGVyID0gZWxlbWVudC5hZnRlclBzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAg
YWZ0ZXItPmNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBhZnRlci0+c2V0SGFzVmFs
aWRTdHlsZSgpOwogfQogCiB2b2lkIFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSgp
CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2Vk
VHJlZSgpCiAKICAgICAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBhdXRv
JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4obm9kZSk7Ci0gICAgICAgICAgICBpZiAodGV4dC5zdHls
ZUNoYW5nZVR5cGUoKSA9PSBSZWNvbnN0cnVjdFJlbmRlclRyZWUgJiYgcGFyZW50LmNoYW5nZSAh
PSBEZXRhY2gpCisgICAgICAgICAgICBpZiAodGV4dC5zdHlsZVZhbGlkaXR5KCkgPj0gVmFsaWRp
dHk6OlN1YnRyZWVBbmRSZW5kZXJlcnNJbnZhbGlkICYmIHBhcmVudC5jaGFuZ2UgIT0gRGV0YWNo
KQogICAgICAgICAgICAgICAgIG1fdXBkYXRlLT5hZGRUZXh0KHRleHQsIHBhcmVudC5lbGVtZW50
KTsKIAotICAgICAgICAgICAgdGV4dC5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIHRleHQuc2V0SGFzVmFsaWRTdHlsZSgpOwogICAgICAgICAgICAgaXQudHJhdmVyc2VOZXh0
U2tpcHBpbmdDaGlsZHJlbigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjA3NDU3KQorKysgU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBuYW1lc3BhY2UgU3R5bGUgewogc3RydWN0IEVsZW1lbnRVcGRhdGUgewogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CiAgICAgQ2hhbmdlIGNoYW5nZSB7IE5v
Q2hhbmdlIH07Ci0gICAgYm9vbCBpc1N5bnRoZXRpYyB7IGZhbHNlIH07CisgICAgYm9vbCByZWNv
bXBvc2l0ZUxheWVyIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIFVwZGF0ZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVZhbGlkaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVWYWxpZGl0eS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlVmFsaWRpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBTdHlsZSB7CisKK2VudW0gY2xhc3MgVmFsaWRpdHkgeworICAgIFZhbGlkLAorICAgIEVs
ZW1lbnRJbnZhbGlkLAorICAgIFN1YnRyZWVJbnZhbGlkLAorICAgIFN1YnRyZWVBbmRSZW5kZXJl
cnNJbnZhbGlkCit9OworCitlbnVtIGNsYXNzIEludmFsaWRhdGlvbk1vZGUgeworICAgIE5vcm1h
bCwKKyAgICBSZWNvbXBvc2l0ZUxheWVyCit9OworCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBTVkdB
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjbwogICAgICAgICBzZXRJc0xpbmsoIWhyZWYo
KS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CiAgICAgICAgIGlmICh3
YXNMaW5rICE9IGlzTGluaygpKSB7CiAgICAgICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1
YXJkIGd1YXJkKCp0aGlzKTsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAg
ICAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAJ
KHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVu
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMTQgKzIzOSwxNCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyCiAgICAgaWYgKCF0YXJnZXRFbGVtZW50LmVu
c3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLnNldFByb3BlcnR5KGlkLCB2YWx1ZSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0YXJnZXRFbGVtZW50LnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIHRhcmdldEVsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQg
cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIENT
U1Byb3BlcnR5SUQgaWQpCiB7CiAgICAgQVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25I
YXNCZWd1bik7CiAgICAgdGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3Bl
cnRpZXMoKS5yZW1vdmVQcm9wZXJ0eShpZCk7Ci0gICAgdGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcyhTVkdFbGVtZW50JiB0YXJnZXRF
bGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlQXNTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lv
biAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMSw3ICszMDEsNyBAQCBpbnQgU1ZHRWxlbWVudDo6dGFiSW5kZXgoKSBjb25z
dAogCiBib29sIFNWR0VsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlIGNoYW5n
ZSkKIHsKLSAgICBpZiAoIW1fc3ZnUmFyZURhdGEgfHwgc3R5bGVDaGFuZ2VUeXBlKCkgPT0gU3lu
dGhldGljU3R5bGVDaGFuZ2UpCisgICAgaWYgKCFtX3N2Z1JhcmVEYXRhIHx8IHN0eWxlUmVzb2x1
dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Ly8gSWYgdGhlIHN0eWxlIGNoYW5nZXMgYmVjYXVzZSBvZiBhIHJlZ3VsYXIgcHJvcGVydHkgY2hh
bmdlIChub3QgaW5kdWNlZCBieSBTTUlMIGFuaW1hdGlvbnMgdGhlbXNlbHZlcykKICAgICAvLyBy
ZXNldCB0aGUgImNvbXB1dGVkIHN0eWxlIHdpdGhvdXQgU01JTCBzdHlsZSBwcm9wZXJ0aWVzIiwg
c28gdGhlIGJhc2UgdmFsdWUgY2hhbmdlIGdldHMgcmVmbGVjdGVkLgpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCkuc2V0UHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGVJc0RpcnR5KHRydWUpOwogICAgICAgICAvLyBUcmlnZ2VyIHN0eWxlIHJlY2FsY3Vs
YXRpb24gZm9yICJlbGVtZW50cyBhcyByZXNvdXJjZSIgKGUuZy4gcmVmZXJlbmNlZCBieSBmZUlt
YWdlKS4KLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7Cisg
ICAgICAgIGludmFsaWRhdGVTdHlsZSgpOwogICAgIH0KIAogICAgIC8vIFRoZSBpbnN0YW5jZXMg
b2YgYW4gZWxlbWVudCBhcmUgY2xvbmVzIG1hZGUgaW4gc2hhZG93IHRyZWVzIHRvIGltcGxlbWVu
dCA8dXNlPi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAkocmV2aXNpb24gMjA3NDU3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkz
LDcgKzE5Myw3IEBAIGJvb2wgU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShTVkcKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghdGFyZ2V0RWxlbWVudC0+aW5Eb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB0YXJnZXRFbGVtZW50LT5zZXROZWVkc1N0eWxl
UmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7CisgICAgdGFyZ2V0RWxlbWVudC0+aW52YWxp
ZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc0NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmludmFsaWRhdGVTaGFkb3dU
cmVlCiAgICAgaWYgKG1fc2hhZG93VHJlZU5lZWRzVXBkYXRlKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zaGFkb3dUcmVlTmVlZHNVcGRhdGUgPSB0cnVlOwotICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVlKTsKKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJl
cnNGb3JTdWJ0cmVlKCk7CiAgICAgaW52YWxpZGF0ZURlcGVuZGVudFNoYWRvd1RyZWVzKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDIwNzQ1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDg2LDE4ICs0ODYsMTYgQEAgYm9vbCBJbnRlcm5hbHM6Om5vZGVOZWVkc1N0eWxlUmVj
YWxjKE5vZAogICAgIHJldHVybiBub2RlLm5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAotc3RhdGlj
IFN0cmluZyBzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyhTdHlsZUNoYW5nZVR5cGUgdHlwZSkKK3N0
YXRpYyBTdHJpbmcgc3R5bGVWYWxpZGl0eVRvVG9TdHJpbmcoU3R5bGU6OlZhbGlkaXR5IHZhbGlk
aXR5KQogewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTm9TdHlsZUNoYW5nZToKKyAg
ICBzd2l0Y2ggKHZhbGlkaXR5KSB7CisgICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OlZhbGlkOgog
ICAgICAgICByZXR1cm4gIk5vU3R5bGVDaGFuZ2UiOwotICAgIGNhc2UgSW5saW5lU3R5bGVDaGFu
Z2U6CisgICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OkVsZW1lbnRJbnZhbGlkOgogICAgICAgICBy
ZXR1cm4gIklubGluZVN0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIEZ1bGxTdHlsZUNoYW5nZToKKyAg
ICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUludmFsaWQ6CiAgICAgICAgIHJldHVybiAi
RnVsbFN0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIFN5bnRoZXRpY1N0eWxlQ2hhbmdlOgotICAgICAg
ICByZXR1cm4gIlN5bnRoZXRpY1N0eWxlQ2hhbmdlIjsKLSAgICBjYXNlIFJlY29uc3RydWN0UmVu
ZGVyVHJlZToKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0lu
dmFsaWQ6CiAgICAgICAgIHJldHVybiAiUmVjb25zdHJ1Y3RSZW5kZXJUcmVlIjsKICAgICB9CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MDYsNyArNTA0LDcgQEAgc3RhdGljIFN0cmlu
ZyBzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyhTdAogCiBTdHJpbmcgSW50ZXJuYWxzOjpzdHlsZUNo
YW5nZVR5cGUoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gc3R5bGVDaGFuZ2VUeXBlVG9TdHJp
bmcobm9kZS5zdHlsZUNoYW5nZVR5cGUoKSk7CisgICAgcmV0dXJuIHN0eWxlVmFsaWRpdHlUb1Rv
U3RyaW5nKG5vZGUuc3R5bGVWYWxpZGl0eSgpKTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6ZGVz
Y3JpcHRpb24oSlNDOjpKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3
NDU3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTYtMTAtMTcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBzZXROZWVkc1N0eWxlUmVjYWxjIHRvIGludmFsaWRhdGVTdHlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmRp
ZEluaXRpYWxpemVQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5Q
cm9jZXNzQ3Jhc2hlZCk6CisKIDIwMTYtMTAtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBQZW5kaW5nRG93bmxv
YWQgaXMgbGVha2VkIGlmIGNhbmNlbGVkIGJlZm9yZSB3aWxsRGVjaWRlUGVuZGluZ0Rvd25sb2Fk
RGVzdGluYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIwNzQ1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYzLDcg
KzY2Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6ZGlkSW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgaWYg
KG1fcGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPCBIVE1MUGx1Z0luRWxlbWVudDo6UmVz
dGFydGluZykgewogICAgICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkxheWVyKCkgJiYgZnJhbWUo
KSkgewogICAgICAgICAgICAgZnJhbWUoKS0+dmlldygpLT5lbnRlckNvbXBvc2l0aW5nTW9kZSgp
OwotICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRo
ZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+aW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChmcmFt
ZSgpICYmICFmcmFtZSgpLT5zZXR0aW5ncygpLm1heGltdW1QbHVnSW5TbmFwc2hvdEF0dGVtcHRz
KCkpIHsKICAgICAgICAgICAgIGJlZ2luU25hcHNob3R0aW5nUnVubmluZ1BsdWdpbigpOwpAQCAt
NjczLDcgKzY3Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6ZGlkSW5pdGlhbGl6ZVBsdWdpbigpCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5MYXllcigpICYmIGZyYW1l
KCkpIHsKICAgICAgICAgICAgIGZyYW1lKCktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUo
KTsKLSAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50
aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9w
bHVnaW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA9PSBIVE1MUGx1Z0luRWxlbWVudDo6UmVzdGFy
dGluZ1dpdGhQZW5kaW5nTW91c2VDbGljaykKICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+
ZGlzcGF0Y2hQZW5kaW5nTW91c2VDbGljaygpOwpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpCiAgICAgaWYgKCFpczxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4ocmVuZGVyZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BsdWdpbkVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIG1f
cGx1Z2luRWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCiAg
ICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcikuc2V0UGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbkNyYXNoZWQpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc0NTcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0xMC0x
NyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNl
dE5lZWRzU3R5bGVSZWNhbGMgdG8gaW52YWxpZGF0ZVN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3
IGNyZWF0ZVBsdWdpbkxheWVyXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5d
KToKKwogMjAxNi0xMC0xNyAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CiAKICAg
ICAgICAgRW5hYmxlIGtleWJvYXJkIGluIGZ1bGxzY3JlZW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24g
MjA3NDU3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgLSAoQk9PTCljcmVh
dGVQbHVnaW4KICAgICAgICAgICAgICAgICByZWFsUGx1Z2luTGF5ZXIuZ2V0KCkuYXV0b3Jlc2l6
aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5ZXJIZWlnaHRTaXphYmxlOwog
ICAgICAgICAgICAgICAgIFtfcGx1Z2luTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6cmVhbFBsdWdp
bkxheWVyLmdldCgpXTsKIAotICAgICAgICAgICAgICAgIC8vIEVhZ2VybHkgZW50ZXIgY29tcG9z
aXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lkcyBmaXJp
bmcgc2V0TmVlZHNTdHlsZVJlY2FsYygpCisgICAgICAgICAgICAgICAgLy8gRWFnZXJseSBlbnRl
ciBjb21wb3NpdGluZyBtb2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xsIG5lZWQgaXQuIFRoaXMgYXZv
aWRzIGZpcmluZyBpbnZhbGlkYXRlU3R5bGUoKQogICAgICAgICAgICAgICAgIC8vIGZvciBpZnJh
bWVzIHRoYXQgY29udGFpbiBjb21wb3NpdGVkIHBsdWdpbnMgYXQgYmFkIHRpbWVzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwMzMKICAgICAgICAgICAgICAgICBj
b3JlKFtzZWxmIHdlYkZyYW1lXSktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAg
ICAgICAgICAgICAgICBbc2VsZiBlbGVtZW50XS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0
aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPmludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIFtzZWxmIHNldFdhbnRzTGF5ZXI6WUVTXTsKIApJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMjA3NDU3KQorKysgU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgLSAodm9pZCljcmVhdGVQbHVnaW5MYXllcgogICAgICAg
ICAvLyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNpbmNlIHdlIGtub3cgd2UnbGwg
bmVlZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5bGVSZWNhbGMoKQogICAgICAg
ICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5zIGF0IGJhZCB0
aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDMzCiAgICAg
ICAgIGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+dmlldygpLT5lbnRlckNvbXBvc2l0aW5nTW9kZSgp
OwotICAgICAgICBbc2VsZiBlbGVtZW50XS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CisgICAgICAgIFtzZWxmIGVsZW1lbnRdLT5pbnZhbGlkYXRlU3R5bGVBbmRM
YXllckNvbXBvc2l0aW9uKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNlbGYud2FudHNMYXllciA9
IFlFUzsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>