<?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>216069</bug_id>
          
          <creation_ts>2020-09-02 00:38:55 -0700</creation_ts>
          <short_desc>Store all styling flags in m_rendererWithStyleFlags</short_desc>
          <delta_ts>2020-09-03 22:59:48 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215936</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=200744</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1684741</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 00:38:55 -0700</bug_when>
    <thetext>Right now, there are quite a few node flags that are only used by elements for styling purposes.

Move all the remaining flags there since CSS JIT no longer rely on these flags directly,
and CompactPointerTuple has been expanded to store up to 16 bits of data as opposed to just 8 bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684750</commentid>
    <comment_count>1</comment_count>
      <attachid>407751</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 01:38:39 -0700</bug_when>
    <thetext>Created attachment 407751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684837</commentid>
    <comment_count>2</comment_count>
      <attachid>407751</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-02 09:19:09 -0700</bug_when>
    <thetext>Comment on attachment 407751
Patch

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

&gt; Source/WebCore/dom/Node.cpp:843
&gt; +        uint16_t flags = m_rendererWithStyleFlags.type();
&gt; +        flags &amp;= ~static_cast&lt;uint16_t&gt;(NodeStyleFlag::StyleValidityMask);
&gt; +        flags |= static_cast&lt;uint16_t&gt;(validity) &lt;&lt; s_styleValidityShift;
&gt; +        m_rendererWithStyleFlags.setType(flags);

Can we make this cleaner by defining m_rendererWithStyleFlags differently?

&gt; Source/WebCore/dom/Node.h:603
&gt; +        DynamicChildMatchingFlagMask = (1 &lt;&lt; 6) - 1,
&gt; +
&gt; +        ChildNeedsStyleRecalc = 1 &lt;&lt; 6,
&gt; +        DirectChildNeedsStyleRecalc = 1 &lt;&lt; 7,
&gt; +        StyleRecalcMask = ChildNeedsStyleRecalc | DirectChildNeedsStyleRecalc,
&gt; +
&gt; +        // Bits 8 &amp; 9 are used to store StyleValidity
&gt; +        StyleValidityMask = 3 &lt;&lt; s_styleValidityShift,
&gt; +        StyleResolutionShouldRecompositeLayer = 1 &lt;&lt; 10,
&gt; +
&gt; +        ChildrenAffectedByFirstChildRules = 1 &lt;&lt; 11,
&gt; +        ChildrenAffectedByLastChildRules = 1 &lt;&lt; 12,
&gt; +        AffectsNextSiblingElementStyle = 1 &lt;&lt; 13,
&gt; +        StyleIsAffectedByPreviousSibling = 1 &lt;&lt; 14,
&gt; +        DescendantsAffectedByPreviousSibling = 1 &lt;&lt; 15,

This looks pretty messy. Can we separate out the pure settings bits into an OptionSet&lt;&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684843</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 09:32:42 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #2)
&gt; Comment on attachment 407751 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407751&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:843
&gt; &gt; +        uint16_t flags = m_rendererWithStyleFlags.type();
&gt; &gt; +        flags &amp;= ~static_cast&lt;uint16_t&gt;(NodeStyleFlag::StyleValidityMask);
&gt; &gt; +        flags |= static_cast&lt;uint16_t&gt;(validity) &lt;&lt; s_styleValidityShift;
&gt; &gt; +        m_rendererWithStyleFlags.setType(flags);
&gt; 
&gt; Can we make this cleaner by defining m_rendererWithStyleFlags differently?

What do you mean by “cleaner”?

&gt; &gt; Source/WebCore/dom/Node.h:603
&gt; &gt; +        DynamicChildMatchingFlagMask = (1 &lt;&lt; 6) - 1,
&gt; &gt; +
&gt; &gt; +        ChildNeedsStyleRecalc = 1 &lt;&lt; 6,
&gt; &gt; +        DirectChildNeedsStyleRecalc = 1 &lt;&lt; 7,
&gt; &gt; +        StyleRecalcMask = ChildNeedsStyleRecalc | DirectChildNeedsStyleRecalc,
&gt; &gt; +
&gt; &gt; +        // Bits 8 &amp; 9 are used to store StyleValidity
&gt; &gt; +        StyleValidityMask = 3 &lt;&lt; s_styleValidityShift,
&gt; &gt; +        StyleResolutionShouldRecompositeLayer = 1 &lt;&lt; 10,
&gt; &gt; +
&gt; &gt; +        ChildrenAffectedByFirstChildRules = 1 &lt;&lt; 11,
&gt; &gt; +        ChildrenAffectedByLastChildRules = 1 &lt;&lt; 12,
&gt; &gt; +        AffectsNextSiblingElementStyle = 1 &lt;&lt; 13,
&gt; &gt; +        StyleIsAffectedByPreviousSibling = 1 &lt;&lt; 14,
&gt; &gt; +        DescendantsAffectedByPreviousSibling = 1 &lt;&lt; 15,
&gt; 
&gt; This looks pretty messy. Can we separate out the pure settings bits into an
&gt; OptionSet&lt;&gt;?

No, CompactTuplePointer doesn’t support OptionSet. There have been multiple attempts to add the support and all of them got rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685083</commentid>
    <comment_count>4</comment_count>
      <attachid>407841</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 17:57:16 -0700</bug_when>
    <thetext>Created attachment 407841
Updated per review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685145</commentid>
    <comment_count>5</comment_count>
      <attachid>407841</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 21:09:45 -0700</bug_when>
    <thetext>Comment on attachment 407841
Updated per review comments

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

&gt; Source/WebCore/dom/Node.h:605
&gt; +        uint16_t toRaw() { return bitwise_cast&lt;uint16_t&gt;(*this); }

const

&gt; Source/WebCore/dom/Node.h:622
&gt; +        uint8_t m_styleValidity : 2;
&gt; +        uint8_t m_dynamicStyleRelation : 6;
&gt; +        uint8_t m_flags : 8;

Why is uint8_t better for this than unsigned? I ask in part because the style script checks and complains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685150</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 21:19:02 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 407841 [details]
&gt; Updated per review comments
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407841&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.h:605
&gt; &gt; +        uint16_t toRaw() { return bitwise_cast&lt;uint16_t&gt;(*this); }
&gt; 
&gt; const
&gt; 
&gt; &gt; Source/WebCore/dom/Node.h:622
&gt; &gt; +        uint8_t m_styleValidity : 2;
&gt; &gt; +        uint8_t m_dynamicStyleRelation : 6;
&gt; &gt; +        uint8_t m_flags : 8;
&gt; 
&gt; Why is uint8_t better for this than unsigned? I ask in part because the
&gt; style script checks and complains.

Oh, I initially used uint16_t since we don&apos;t have 32 bits here and then switched to use uint8_t when I realized I can get away with it. I guess it could be been more clear to use uint16_t since that&apos;s what we&apos;re using for CompactPointerType? I think it would be confusing for this struct to be using unsigned but only having 16-bit storage underneath.

That style checker warning is there to complain about different types being mixed in bitfields resulting in padding on Windows (cl.exe). Here, the warning doesn&apos;t apply because all bitfields use uint8_t. In any case, if there was any padding added, this. code would be totally incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685158</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 21:25:49 -0700</bug_when>
    <thetext>Can we fix the style checker? It’s checking a rule that’s incorrect.

But also, I don’t agree that &quot;unsigned x : 1&quot; is confusing. To be it says &quot;a 1-bit unsigned value&quot;. Maybe to you it says &quot;a 1-bit 32-bit unsigned value&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685161</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 21:32:42 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Can we fix the style checker? It’s checking a rule that’s incorrect.
&gt; 
&gt; But also, I don’t agree that &quot;unsigned x : 1&quot; is confusing. To be it says &quot;a
&gt; 1-bit unsigned value&quot;. Maybe to you it says &quot;a 1-bit 32-bit unsigned value&quot;?

Well, sizeof(X) is 4 and sizeof(Y) is 1 so the type used to define the bitfield matters to determine the width of the overall struct. Here, Because I&apos;m trying to bitwise cast this struct with uint16_t, I think it would be confusing to be using unsigned, which has the same width as uint32_t.

struct X {
  unsigned x : 1;
}

struct Y {
  unsigned char x : 1;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685165</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 21:36:12 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Can we fix the style checker? It’s checking a rule that’s incorrect.

Hm... odd. This rule isn&apos;t really listed anywhere on https://webkit.org/code-style-guidelines/. I guess we can update the style checker but we should probably add a rule there as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685170</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 21:44:03 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; Well, sizeof(X) is 4 and sizeof(Y) is 1 so the type used to define the
&gt; bitfield matters to determine the width of the overall struct.

That is something I don’t understand. Why would the underlying type behind a 1-bit bit field affect the width of the structure it’s in? Nothing in the C++ standard suggests that should be done. I seem to remember it as a thing I thought of as a compiler bug in old versions of Visual Studio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685176</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-02 22:15:18 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; (In reply to Ryosuke Niwa from comment #8)
&gt; &gt; Well, sizeof(X) is 4 and sizeof(Y) is 1 so the type used to define the
&gt; &gt; bitfield matters to determine the width of the overall struct.
&gt; 
&gt; That is something I don’t understand. Why would the underlying type behind a
&gt; 1-bit bit field affect the width of the structure it’s in? Nothing in the
&gt; C++ standard suggests that should be done. I seem to remember it as a thing
&gt; I thought of as a compiler bug in old versions of Visual Studio.

I&apos;m not familiar with C++ spec but the aforementioned sizeof behavior is exhibited by both GCC and clang. The issue specific to Visual Studio is padding between bitfields of different underlying types. In the following example, Visual Studio may end up using 8+ bytes as opposed to 4 bytes in clang/GCC because cl.exec will &quot;y&quot; to be 4-byte aligned:

struct {
    unsigned short y : 4;
    unsigned int x : 4;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685214</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 01:36:00 -0700</bug_when>
    <thetext>Anyway, I think I&apos;m gonna land this as with (after const fix). I can change it to unsigned if you&apos;re so inclined but I think it&apos;s better to stick with uint16_t or uint8_t to keep struct same size as what CompactPointerTuple::type/setType returns/accepts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685310</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-03 10:01:01 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #12)
&gt; I can change it to unsigned if you&apos;re so inclined

I just want to understand the C++ language and compiler situation/rules and what our guideline is. I won’t insist on anything specific here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685561</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 22:58:19 -0700</bug_when>
    <thetext>Committed r266578: &lt;https://trac.webkit.org/changeset/266578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685562</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-03 22:59:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/68325332&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685563</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-03 22:59:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)
&gt; (In reply to Ryosuke Niwa from comment #12)
&gt; &gt; I can change it to unsigned if you&apos;re so inclined
&gt; 
&gt; I just want to understand the C++ language and compiler situation/rules and
&gt; what our guideline is. I won’t insist on anything specific here!

Okay, I&apos;ve brought back my old PSA thread from 2012 on webkit-dev to discuss this:
https://lists.webkit.org/pipermail/webkit-dev/2020-September/031376.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407751</attachid>
            <date>2020-09-02 01:38:39 -0700</date>
            <delta_ts>2020-09-02 17:57:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216069-20200902013841.patch</filename>
            <type>text/plain</type>
            <size>20169</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmMzOTE1NDdlMjJkZDIz
NTdiNDk1MGIzMmFhOTE5Mjc1MWViYmRmOS4uN2Q5OGM0ZjMzYmZiNjUzYjYzOTZhNWRlZTk0YjEx
YjlkNjc0ZmI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIwLTA5LTAyICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFN0b3JlIGFsbCBzdHlsaW5n
YCBmbGFncyBpbiBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjA2OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIHJlbWFpbmlu
ZyBlbGVtZW50IHN0eWxpbmcgZmxhZ3MgYXMgd2VsbCBhcyBTdHlsZTo6VmFsaWRpdHkgZnJvbSBt
X25vZGVGbGFncyB0bworICAgICAgICBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3Mgbm93IHRoYXQg
Q1NTIEpJVCBubyBsb25nZXIgcmVseSBvbiB0aGVzZSBmbGFncyBkaXJlY3RseSBhbmQgQ29tcGFj
dFBvaW50ZXJUdXBsZQorICAgICAgICBoYXMgYmVlbiBleHBhbmRlZCB0byBzdG9yZSB1cCB0byAx
NiBiaXRzIG9mIGRhdGEgYXMgb3Bwb3NlZCB0byBqdXN0IDggYml0cy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OmRpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2FsYyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWluZXJOb2RlOjpzZXREaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMpOgorICAg
ICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlc2V0
U3R5bGVSZWxhdGlvbnMpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpzdHlsZUFmZmVjdGVkQnlFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpkZXNjZW5kYW50c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGls
ZFJ1bGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNo
aWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6ZGVzY2VuZGFudHNBZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxS
dWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjaGlsZHJlbkFmZmVjdGVk
QnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpkZXNjZW5kYW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJh
c2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6YWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIGNvbnN0KTog
TW92ZWQgaGVyZSBmcm9tIE5vZGUuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTdHls
ZUFmZmVjdGVkQnlFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXREZXNjZW5k
YW50c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0RGVzY2VuZGFudHNBZmZl
Y3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpzZXREZXNjZW5kYW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRDaGlsZHJlbkFmZmVj
dGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5n
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZGp1
c3RTdHlsZVZhbGlkaXR5KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y2hpbGROZWVkc1N0eWxlUmVjYWxjIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIGNvbnN0KTogTW92ZWQgdG8g
RWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldENoaWxkTmVlZHNTdHlsZVJlY2Fs
Yyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpmbGFnQ2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGls
ZFJ1bGVzRmxhZyk6IERlbGV0ZWQgc2luY2UgaXQncyBubyBsb25nZXIgdXNlZCBieSBDU1MgSklU
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZmxhZ0NoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGls
ZFJ1bGVzRmxhZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZmxhZ0FmZmVjdHNO
ZXh0U2libGluZ0VsZW1lbnRTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZmxhZ1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpoYXNTdHlsZUZsYWcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2V0U3R5bGVGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyU3R5bGVGbGFn
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhckR5bmFtaWNDaGlsZE1hdGNo
aW5nRmxhZ3MpOiBSZW5hbWVkIGZyb20gY2xlYXJTdHlsZUZsYWdzIGFzIGl0IGRvZXNuJ3QgY2xl
YXIgYWxsIGZsYWdzLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3R5bGVWYWxpZGl0eSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzdHlsZVJlc29sdXRpb25TaG91bGRSZWNvbXBv
c2l0ZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEhhc1ZhbGlkU3R5
bGUpOgorCiAyMDIwLTA5LTAxICBIZWN0b3IgTG9wZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNjY0MDguCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuaAppbmRleCAyZmFhYmFjYmVkY2Y1NGJiZTA0YzRkOWY0YWFjOTc0YTE0
YzVjOTRmLi40MDRlZjAwNzI4NTM5MDRkMGEwMDYzM2M2YzZkYzU5ODI2YjcxOTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTQ3LDggKzQ3LDggQEAgcHVibGljOgogICAgIGJv
b2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIGJv
b2wgaGFzT25lQ2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQgJiYgIW1fZmlyc3RD
aGlsZC0+bmV4dFNpYmxpbmcoKTsgfQogCi0gICAgYm9vbCBkaXJlY3RDaGlsZE5lZWRzU3R5bGVS
ZWNhbGMoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKERpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2Fs
Y0ZsYWcpOyB9Ci0gICAgdm9pZCBzZXREaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNl
dEZsYWcoRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KKyAgICBib29sIGRpcmVj
dENoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2Rl
U3R5bGVGbGFnOjpEaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMpOyB9CisgICAgdm9pZCBzZXRE
aXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFn
OjpEaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGMpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBjb3VudENoaWxkTm9kZXMoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOb2Rl
KiB0cmF2ZXJzZVRvQ2hpbGRBdCh1bnNpZ25lZCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNzIyZGNmNGJlN2QyNjgxOWEwYzU2ZjgzZDU5ZGZhMWYwNzI0ZWU4MS4uOGJjZjgxMzRi
ZGM5OWZlMzg5OTUzNTBjMGE4MTA4MTQwY2UzMWY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtNDI0OSw3ICs0MjQ5LDcgQEAgdm9pZCBFbGVtZW50OjpyZXNldENvbXB1dGVkU3R5bGUoKQog
dm9pZCBFbGVtZW50OjpyZXNldFN0eWxlUmVsYXRpb25zKCkKIHsKICAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIGNvZGUgbW9yZSBjb25zaXN0ZW50LgotICAgIGNsZWFyU3R5bGVGbGFncygpOworICAg
IGNsZWFyRHluYW1pY0NoaWxkTWF0Y2hpbmdGbGFncygpOwogICAgIGlmICghaGFzUmFyZURhdGEo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGVsZW1lbnRSYXJlRGF0YSgpLT5yZXNldFN0eWxlUmVs
YXRpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCAwOTVkNmZhZWRhOWI0YmFhODNhNmY1ZjQ3
M2UxOGFjZjQ4M2JhYzIxLi4xYzhlOTJmMGQ2YTg3M2U3ZTg1NGFkY2MzZDA1OTZkZTRhYTQ0OTlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTM1MywzMSArMzUzLDMyIEBAIHB1YmxpYzoKICAgICBi
b29sIGlzVmlzaWJsZVdpdGhvdXRSZXNvbHZpbmdGdWxsU3R5bGUoKSBjb25zdDsKIAogICAgIC8v
IE1ldGhvZHMgZm9yIGluZGljYXRpbmcgdGhlIHN0eWxlIGlzIGFmZmVjdGVkIGJ5IGR5bmFtaWMg
dXBkYXRlcyAoZS5nLiwgY2hpbGRyZW4gY2hhbmdpbmcsIG91ciBwb3NpdGlvbiBjaGFuZ2luZyBp
biBvdXIgc2libGluZyBsaXN0LCBldGMuKQotICAgIGJvb2wgc3R5bGVBZmZlY3RlZEJ5RW1wdHko
KSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6U3R5bGVBZmZl
Y3RlZEJ5RW1wdHkpOyB9Ci0gICAgYm9vbCBkZXNjZW5kYW50c0FmZmVjdGVkQnlQcmV2aW91c1Np
YmxpbmcoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKERlc2NlbmRhbnRzQWZmZWN0ZWRCeVByZXZp
b3VzU2libGluZ0ZsYWcpOyB9Ci0gICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxk
UnVsZXMoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hp
bGRSdWxlc0ZsYWcpOyB9Ci0gICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxl
cygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVs
ZXNGbGFnKTsgfQotICAgIGJvb2wgY2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxS
dWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnOjpDaGls
ZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIGJvb2wgZGVzY2Vu
ZGFudHNBZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhh
c1N0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnOjpEZXNjZW5kYW50c0FmZmVjdGVkQnlGb3J3YXJk
UG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIGJvb2wgY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0eWxl
RmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9Ci0gICAg
Ym9vbCBkZXNjZW5kYW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnOjpEZXNjZW5kYW50c0FmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KLSAgICBib29sIGNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IGhhc1N0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0
eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9Ci0gICAgYm9vbCBhZmZlY3RzTmV4dFNp
YmxpbmdFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEFmZmVjdHNOZXh0U2li
bGluZ0VsZW1lbnRTdHlsZSk7IH0KKyAgICBib29sIHN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgY29u
c3QgeyByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlQWZmZWN0ZWRCeUVt
cHR5KTsgfQorICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkg
Y29uc3QgeyByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkRlc2NlbmRhbnRzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZyk7IH0KKyAgICBib29sIGNoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFn
OjpDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMpOyB9CisgICAgYm9vbCBjaGlsZHJl
bkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhO
b2RlU3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7IH0KKyAgICBi
b29sIGNoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBoYXNTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2Fy
ZFBvc2l0aW9uYWxSdWxlcyk7IH0KKyAgICBib29sIGRlc2NlbmRhbnRzQWZmZWN0ZWRCeUZvcndh
cmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoTm9kZVN0eWxl
RmxhZzo6RGVzY2VuZGFudHNBZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KKyAg
ICBib29sIGNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkNoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoTm9k
ZVN0eWxlRmxhZzo6RGVzY2VuZGFudHNBZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMp
OyB9CisgICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6
Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsg
fQorICAgIGJvb2wgYWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRT
dHlsZSk7IH0KKyAgICBib29sIHN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgY29u
c3QgeyByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlSXNBZmZlY3RlZEJ5
UHJldmlvdXNTaWJsaW5nKTsgfQogICAgIHVuc2lnbmVkIGNoaWxkSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGFDaGlsZEluZGV4KCkgOiAwOyB9CiAKICAgICBi
b29sIGhhc0ZsYWdzU2V0RHVyaW5nU3R5bGluZ09mQ2hpbGRyZW4oKSBjb25zdDsKIAotICAgIHZv
aWQgc2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSB7IHNldFN0eWxlRmxhZyhFbGVtZW50U3R5bGVG
bGFnOjpTdHlsZUFmZmVjdGVkQnlFbXB0eSk7IH0KLSAgICB2b2lkIHNldERlc2NlbmRhbnRzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZygpIHsgc2V0RmxhZyhEZXNjZW5kYW50c0FmZmVjdGVkQnlQ
cmV2aW91c1NpYmxpbmdGbGFnKTsgfQotICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmly
c3RDaGlsZFJ1bGVzKCkgeyBzZXRGbGFnKENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxl
c0ZsYWcpOyB9Ci0gICAgdm9pZCBzZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygp
IHsgc2V0RmxhZyhDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcpOyB9Ci0gICAg
dm9pZCBzZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBzZXRT
dHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0
aW9uYWxSdWxlcyk7IH0KLSAgICB2b2lkIHNldERlc2NlbmRhbnRzQWZmZWN0ZWRCeUZvcndhcmRQ
b3NpdGlvbmFsUnVsZXMoKSB7IHNldFN0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnOjpEZXNjZW5k
YW50c0FmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIHZvaWQgc2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldFN0eWxlRmxhZyhF
bGVtZW50U3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxl
cyk7IH0KLSAgICB2b2lkIHNldERlc2NlbmRhbnRzQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKCkgeyBzZXRTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6RGVzY2VuZGFudHNBZmZl
Y3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9Ci0gICAgdm9pZCBzZXRDaGlsZHJlbkFm
ZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldFN0eWxl
RmxhZyhFbGVtZW50U3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFj
a3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9Ci0gICAgdm9pZCBzZXRBZmZlY3RzTmV4dFNpYmxpbmdF
bGVtZW50U3R5bGUoKSB7IHNldEZsYWcoQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKTsg
fQotICAgIHZvaWQgc2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSB7IHNldEZs
YWcoU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOyB9CisgICAgdm9pZCBzZXRTdHls
ZUFmZmVjdGVkQnlFbXB0eSgpIHsgc2V0U3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlQWZm
ZWN0ZWRCeUVtcHR5KTsgfQorICAgIHZvaWQgc2V0RGVzY2VuZGFudHNBZmZlY3RlZEJ5UHJldmlv
dXNTaWJsaW5nKCkgeyBzZXRTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6RGVzY2VuZGFudHNBZmZl
Y3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQorICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
Rmlyc3RDaGlsZFJ1bGVzKCkgeyBzZXRTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6Q2hpbGRyZW5B
ZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsgfQorICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5TGFzdENoaWxkUnVsZXMoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpDaGlsZHJl
bkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7IH0KKyAgICB2b2lkIHNldENoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFn
OjpDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIHZvaWQg
c2V0RGVzY2VuZGFudHNBZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpIHsgc2V0U3R5
bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkRlc2NlbmRhbnRzQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMpOyB9CisgICAgdm9pZCBzZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcygpIHsgc2V0U3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkNoaWxkcmVuQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIHZvaWQgc2V0RGVzY2VuZGFudHNB
ZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5
bGVGbGFnOjpEZXNjZW5kYW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0K
KyAgICB2b2lkIHNldENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcygpIHsgc2V0U3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KKyAgICB2b2lkIHNl
dEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpIHsgc2V0U3R5bGVGbGFnKE5vZGVTdHls
ZUZsYWc6OkFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSk7IH0KKyAgICB2b2lkIHNldFN0
eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgeyBzZXRTdHlsZUZsYWcoTm9kZVN0eWxl
RmxhZzo6U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOyB9CiAgICAgdm9pZCBzZXRD
aGlsZEluZGV4KHVuc2lnbmVkKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEF0b21TdHJpbmcgY29t
cHV0ZUluaGVyaXRlZExhbmd1YWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMTZlZmEw
YjU5ZTBlNDFiOTY1MTUzMjMzYmY1ZWEwZDk1NmIzZDU3Ny4uN2Y5YTAwOGRjM2IzM2ZmNTFkYjM2
MjQwMmMxZmU4MjBiNmQxYjEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtODM3LDExICs4MzcsMTMg
QEAgdm9pZCBOb2RlOjpkZXJlZkV2ZW50VGFyZ2V0KCkKIHZvaWQgTm9kZTo6YWRqdXN0U3R5bGVW
YWxpZGl0eShTdHlsZTo6VmFsaWRpdHkgdmFsaWRpdHksIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgaWYgKHZhbGlkaXR5ID4gc3R5bGVWYWxpZGl0eSgpKSB7Ci0gICAgICAg
IG1fbm9kZUZsYWdzICY9IH5TdHlsZVZhbGlkaXR5TWFzazsKLSAgICAgICAgbV9ub2RlRmxhZ3Mg
fD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbGlkaXR5KSA8PCBTdHlsZVZhbGlkaXR5U2hpZnQ7
CisgICAgICAgIHVpbnQxNl90IGZsYWdzID0gbV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnR5cGUo
KTsKKyAgICAgICAgZmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQxNl90PihOb2RlU3R5bGVGbGFn
OjpTdHlsZVZhbGlkaXR5TWFzayk7CisgICAgICAgIGZsYWdzIHw9IHN0YXRpY19jYXN0PHVpbnQx
Nl90Pih2YWxpZGl0eSkgPDwgc19zdHlsZVZhbGlkaXR5U2hpZnQ7CisgICAgICAgIG1fcmVuZGVy
ZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKGZsYWdzKTsKICAgICB9CiAgICAgaWYgKG1vZGUgPT0g
U3R5bGU6OkludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9zaXRlTGF5ZXIpCi0gICAgICAgIHNldEZs
YWcoU3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllckZsYWcpOworICAgICAgICBz
ZXRTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6U3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3Np
dGVMYXllcik7CiB9CiAKIGlubGluZSB2b2lkIE5vZGU6OnVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxl
UmVjYWxjKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDU0ZjlkZjE4MGE0ZjZiZmI0YWY2N2U1NTM1Mjk5Mjc2
MzFhM2Q3ZTQuLmZhY2RkMjY0YTRhMzgwNDU0MWMwZmIyYzk0ZjZmNjE3YzljOWY4NWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaApAQCAtMjk3LDEyICsyOTcsMTEgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNTdHls
ZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlVmFsaWRpdHkoKSAhPSBTdHlsZTo6VmFsaWRp
dHk6OlZhbGlkOyB9CiAgICAgU3R5bGU6OlZhbGlkaXR5IHN0eWxlVmFsaWRpdHkoKSBjb25zdDsK
ICAgICBib29sIHN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSBjb25zdDsK
LSAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWco
Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KLSAgICBib29sIHN0eWxlSXNBZmZlY3RlZEJ5
UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhTdHlsZUlzQWZmZWN0ZWRC
eVByZXZpb3VzU2libGluZyk7IH0KKyAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNv
bnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpDaGlsZE5lZWRzU3R5bGVS
ZWNhbGMpOyB9CiAgICAgYm9vbCBpc0VkaXRpbmdUZXh0KCkgY29uc3QgeyByZXR1cm4gZ2V0Rmxh
ZyhJc1RleHRGbGFnKSAmJiBnZXRGbGFnKElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVs
ZW1lbnRGbGFnKTsgfQogCi0gICAgdm9pZCBzZXRDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNl
dEZsYWcoQ2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KLSAgICB2b2lkIGNsZWFyQ2hpbGRO
ZWVkc1N0eWxlUmVjYWxjKCkgeyBtX25vZGVGbGFncyAmPSB+KENoaWxkTmVlZHNTdHlsZVJlY2Fs
Y0ZsYWcgfCBEaXJlY3RDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQorICAgIHZvaWQgc2V0
Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgeyBzZXRTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6Q2hp
bGROZWVkc1N0eWxlUmVjYWxjKTsgfQorICAgIHZvaWQgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNh
bGMoKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKG1fcmVuZGVyZXJXaXRoU3R5
bGVGbGFncy50eXBlKCkgJiB+KHN0YXRpY19jYXN0PHVpbnQxNl90PihOb2RlU3R5bGVGbGFnOjpT
dHlsZVJlY2FsY01hc2spKSk7IH0KIAogICAgIHZvaWQgc2V0SGFzVmFsaWRTdHlsZSgpOwogCkBA
IC01MTEsMTEgKzUxMCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50MzJfdCBmbGFnSXNMaW5r
KCkgeyByZXR1cm4gSXNMaW5rRmxhZzsgfQogICAgIHN0YXRpYyBpbnQzMl90IGZsYWdIYXNGb2N1
c1dpdGhpbigpIHsgcmV0dXJuIEhhc0ZvY3VzV2l0aGluOyB9CiAgICAgc3RhdGljIGludDMyX3Qg
ZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IHJldHVybiBJc1BhcnNpbmdDaGlsZHJl
bkZpbmlzaGVkRmxhZzsgfQotICAgIHN0YXRpYyBpbnQzMl90IGZsYWdDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXNGbGFnKCkgeyByZXR1cm4gQ2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RD
aGlsZFJ1bGVzRmxhZzsgfQotICAgIHN0YXRpYyBpbnQzMl90IGZsYWdDaGlsZHJlbkFmZmVjdGVk
QnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSB7IHJldHVybiBDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlc0ZsYWc7IH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGZsYWdBZmZlY3RzTmV4dFNpYmxp
bmdFbGVtZW50U3R5bGUoKSB7IHJldHVybiBBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGU7
IH0KLSAgICBzdGF0aWMgaW50MzJfdCBmbGFnU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcoKSB7IHJldHVybiBTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZzsgfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKIHByb3RlY3RlZDoKQEAgLTUzMiwxMiArNTI2LDExIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgSXNJblNoYWRvd1RyZWVGbGFnID0gMSA8PCA5LAogICAgICAgICAvLyBV
bnVzZWRGbGFnID0gMSA8PCAxMCwKICAgICAgICAgSGFzRXZlbnRUYXJnZXREYXRhRmxhZyA9IDEg
PDwgMTEsCisgICAgICAgIC8vIFVudXNlZEZsYWcgPSAxIDw8IDEyLAorICAgICAgICAvLyBVbnVz
ZWRGbGFnID0gMSA8PCAxMywKIAogICAgICAgICAvLyBUaGVzZSBiaXRzIGFyZSB1c2VkIGJ5IGRl
cml2ZWQgY2xhc3NlcywgcHVsbGVkIHVwIGhlcmUgc28gdGhleSBjYW4KICAgICAgICAgLy8gYmUg
c3RvcmVkIGluIHRoZSBzYW1lIG1lbW9yeSB3b3JkIGFzIHRoZSBOb2RlIGJpdHMgYWJvdmUuCi0g
ICAgICAgIENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcgPSAxIDw8IDEyLCAvLyBDb250YWluZXJO
b2RlCi0gICAgICAgIERpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcgPSAxIDw8IDEzLAot
CiAgICAgICAgIElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnID0gMSA8
PCAxNCwgLy8gVGV4dCBhbmQgRWxlbWVudAogICAgICAgICBJc0N1c3RvbUVsZW1lbnQgPSAxIDw8
IDE1LCAvLyBFbGVtZW50CiAgICAgICAgIEhhc0ZvY3VzV2l0aGluID0gMSA8PCAxNiwKQEAgLTU0
NywyMCArNTQwLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBIYXNTeW50aGV0aWNBdHRyQ2hpbGRO
b2Rlc0ZsYWcgPSAxIDw8IDIwLAogICAgICAgICBTZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9GbGFn
ID0gMSA8PCAyMSwKIAotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSB1c2VkIGlu
IHN0eWxlIGludmFsaWRhdGlvbi4KLSAgICAgICAgU3R5bGVWYWxpZGl0eVNoaWZ0ID0gMjIsCi0g
ICAgICAgIFN0eWxlVmFsaWRpdHlNYXNrID0gMyA8PCBTdHlsZVZhbGlkaXR5U2hpZnQsCi0gICAg
ICAgIFN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnID0gMSA8PCAyNCwK
LQotICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnID0gMSA8PCAy
NSwKLSAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXNGbGFnID0gMSA8PCAy
NiwKLSAgICAgICAgLy8gVW51c2VkRmxhZyA9IDEgPDwgMjcsCi0KLSAgICAgICAgQWZmZWN0c05l
eHRTaWJsaW5nRWxlbWVudFN0eWxlID0gMSA8PCAyOCwKLSAgICAgICAgU3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcgPSAxIDw8IDI5LAotICAgICAgICBEZXNjZW5kYW50c0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmdGbGFnID0gMSA8PCAzMCwKKyAgICAgICAgSGFzQ3VzdG9tU3R5bGVS
ZXNvbHZlQ2FsbGJhY2tzRmxhZyA9IDEgPDwgMjIsCiAKLSAgICAgICAgSGFzQ3VzdG9tU3R5bGVS
ZXNvbHZlQ2FsbGJhY2tzRmxhZyA9IDEgPDwgMzEsCisgICAgICAgIC8vIEJpdHMgMjMtMzEgYXJl
IGZyZWUuCiAKICAgICAgICAgRGVmYXVsdE5vZGVGbGFncyA9IElzUGFyc2luZ0NoaWxkcmVuRmlu
aXNoZWRGbGFnCiAgICAgfTsKQEAgLTU5Myw3ICs1NzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBzX3JlZkNvdW50SW5jcmVtZW50ID0gMjsKICAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IHNfcmVmQ291bnRNYXNrID0gfnN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKTsKIAotICAgIGVudW0gY2xhc3MgRWxlbWVudFN0eWxlRmxhZyA6IHVpbnQ4X3Qgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19zdHlsZVZhbGlkaXR5U2hpZnQgPSA4Owor
ICAgIGVudW0gY2xhc3MgTm9kZVN0eWxlRmxhZyA6IHVpbnQxNl90IHsKICAgICAgICAgU3R5bGVB
ZmZlY3RlZEJ5RW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MCwKICAgICAgICAgLy8gQml0cyBmb3IgZHluYW1pYyBjaGlsZCBtYXRjaGluZy4KICAgICAgICAg
Ly8gV2Ugb3B0aW1pemUgZm9yIDpmaXJzdC1jaGlsZCBhbmQgOmxhc3QtY2hpbGQuIFRoZSBvdGhl
ciBwb3NpdGlvbmFsIGNoaWxkIHNlbGVjdG9ycyBsaWtlIG50aC1jaGlsZCBvcgpAQCAtNjAzLDEx
ICs1ODYsMjcgQEAgcHJvdGVjdGVkOgogICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcyAgICAgICAgICAgICAgID0gMSA8PCAzLAogICAgICAgICBEZXNjZW5k
YW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyAgICAgICAgICAgID0gMSA8PCA0
LAogICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMgID0gMSA8PCA1LAorICAgICAgICBEeW5hbWljQ2hpbGRNYXRjaGluZ0ZsYWdNYXNr
ID0gKDEgPDwgNikgLSAxLAorCisgICAgICAgIENoaWxkTmVlZHNTdHlsZVJlY2FsYyA9IDEgPDwg
NiwKKyAgICAgICAgRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjID0gMSA8PCA3LAorICAgICAg
ICBTdHlsZVJlY2FsY01hc2sgPSBDaGlsZE5lZWRzU3R5bGVSZWNhbGMgfCBEaXJlY3RDaGlsZE5l
ZWRzU3R5bGVSZWNhbGMsCisKKyAgICAgICAgLy8gQml0cyA4ICYgOSBhcmUgdXNlZCB0byBzdG9y
ZSBTdHlsZVZhbGlkaXR5CisgICAgICAgIFN0eWxlVmFsaWRpdHlNYXNrID0gMyA8PCBzX3N0eWxl
VmFsaWRpdHlTaGlmdCwKKyAgICAgICAgU3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVM
YXllciA9IDEgPDwgMTAsCisKKyAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1
bGVzID0gMSA8PCAxMSwKKyAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMg
PSAxIDw8IDEyLAorICAgICAgICBBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUgPSAxIDw8
IDEzLAorICAgICAgICBTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyA9IDEgPDwgMTQs
CisgICAgICAgIERlc2NlbmRhbnRzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyA9IDEgPDwgMTUs
CiAgICAgfTsKIAotICAgIGJvb2wgaGFzU3R5bGVGbGFnKEVsZW1lbnRTdHlsZUZsYWcgc3RhdGUp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy50eXBlKCkgJiBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdGF0ZSk7IH0KLSAgICB2b2lkIHNldFN0eWxlRmxhZyhFbGVtZW50U3R5
bGVGbGFnIHN0YXRlKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKG1fcmVuZGVy
ZXJXaXRoU3R5bGVGbGFncy50eXBlKCkgfCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0ZSkpOyB9
Ci0gICAgdm9pZCBjbGVhclN0eWxlRmxhZ3MoKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5z
ZXRUeXBlKDApOyB9CisgICAgYm9vbCBoYXNTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZyBzdGF0ZSkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnR5cGUoKSAmIHN0YXRpY19j
YXN0PHVpbnQxNl90PihzdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0eWxlRmxhZyhOb2RlU3R5bGVG
bGFnIHN0YXRlKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKG1fcmVuZGVyZXJX
aXRoU3R5bGVGbGFncy50eXBlKCkgfCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RhdGUpKTsgfQor
ICAgIHZvaWQgY2xlYXJTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZyBzdGF0ZSkgeyBtX3JlbmRlcmVy
V2l0aFN0eWxlRmxhZ3Muc2V0VHlwZShtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3MudHlwZSgpICYg
fnN0YXRpY19jYXN0PHVpbnQxNl90PihzdGF0ZSkpOyB9CisgICAgdm9pZCBjbGVhckR5bmFtaWND
aGlsZE1hdGNoaW5nRmxhZ3MoKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKG1f
cmVuZGVyZXJXaXRoU3R5bGVGbGFncy50eXBlKCkgJiB+c3RhdGljX2Nhc3Q8dWludDE2X3Q+KE5v
ZGVTdHlsZUZsYWc6OkR5bmFtaWNDaGlsZE1hdGNoaW5nRmxhZ01hc2spKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+Jikg
Y29uc3QgeyB9CiAKQEAgLTY2Nyw3ICs2NjYsNyBAQCBwcml2YXRlOgogICAgIFRyZWVTY29wZSog
bV90cmVlU2NvcGUgeyBudWxscHRyIH07CiAgICAgTm9kZSogbV9wcmV2aW91cyB7IG51bGxwdHIg
fTsKICAgICBOb2RlKiBtX25leHQgeyBudWxscHRyIH07Ci0gICAgQ29tcGFjdFBvaW50ZXJUdXBs
ZTxSZW5kZXJPYmplY3QqLCB1aW50OF90PiBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3M7CisgICAg
Q29tcGFjdFBvaW50ZXJUdXBsZTxSZW5kZXJPYmplY3QqLCB1aW50MTZfdD4gbV9yZW5kZXJlcldp
dGhTdHlsZUZsYWdzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlUmFyZURhdGEsIE5vZGVSYXJl
RGF0YURlbGV0ZXI+IG1fcmFyZURhdGE7CiB9OwogCkBAIC03OTMsMTggKzc5MiwxOCBAQCBpbmxp
bmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNv
bnN0CiAKIGlubGluZSBTdHlsZTo6VmFsaWRpdHkgTm9kZTo6c3R5bGVWYWxpZGl0eSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlOjpWYWxpZGl0eT4oKG1fbm9kZUZsYWdz
ICYgU3R5bGVWYWxpZGl0eU1hc2spID4+IFN0eWxlVmFsaWRpdHlTaGlmdCk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFN0eWxlOjpWYWxpZGl0eT4oKG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy50
eXBlKCkgJiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTm9kZVN0eWxlRmxhZzo6U3R5bGVWYWxpZGl0
eU1hc2spKSA+PiBzX3N0eWxlVmFsaWRpdHlTaGlmdCk7CiB9CiAKIGlubGluZSBib29sIE5vZGU6
OnN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRGbGFnKFN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnKTsK
KyAgICByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlUmVzb2x1dGlvblNo
b3VsZFJlY29tcG9zaXRlTGF5ZXIpOwogfQogCiBpbmxpbmUgdm9pZCBOb2RlOjpzZXRIYXNWYWxp
ZFN0eWxlKCkKIHsKLSAgICBtX25vZGVGbGFncyAmPSB+U3R5bGVWYWxpZGl0eU1hc2s7Ci0gICAg
Y2xlYXJGbGFnKFN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXJGbGFnKTsKKyAg
ICBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3Muc2V0VHlwZShtX3JlbmRlcmVyV2l0aFN0eWxlRmxh
Z3MudHlwZSgpICYgfnN0YXRpY19jYXN0PHVpbnQxNl90PihOb2RlU3R5bGVGbGFnOjpTdHlsZVZh
bGlkaXR5TWFzaykpOworICAgIGNsZWFyU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlUmVz
b2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIpOwogfQogCiBpbmxpbmUgdm9pZCBOb2RlOjpz
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseShUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407841</attachid>
            <date>2020-09-02 17:57:16 -0700</date>
            <delta_ts>2020-09-02 21:09:45 -0700</delta_ts>
            <desc>Updated per review comments</desc>
            <filename>bug-216069-20200902175715.patch</filename>
            <type>text/plain</type>
            <size>23573</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmMzOTE1NDdlMjJkZDIz
NTdiNDk1MGIzMmFhOTE5Mjc1MWViYmRmOS4uMGMzYTVkODQ0Yzk2ODgwZDYwNjExYzJlY2ZhNDAw
MTY4YjkzNDBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA5LTAyICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFN0b3JlIGFsbCBzdHlsaW5n
IGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBhbGwgcmVtYWluaW5n
IHN0eWxpbmcgZmxhZ3MgYW5kIFN0eWxlOjpWYWxpZGl0eSBmcm9tIG1fbm9kZUZsYWdzCisgICAg
ICAgIHRvIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncyBzaW5jZSBDU1MgSklUIG5vIGxvbmdlciBy
ZWx5IG9uIHRoZXNlIGZsYWdzIGRpcmVjdGx5CisgICAgICAgIGFuZCBDb21wYWN0UG9pbnRlclR1
cGxlIGhhcyBiZWVuIGV4cGFuZGVkIHRvIHN0b3JlIHVwIHRvIDE2IGJpdHMgb2YgZGF0YSBhcyBv
cHBvc2VkCisgICAgICAgIHRvIGp1c3QgOCBiaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBz
aW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZGly
ZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OnNldERpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVzZXRTdHlsZVJlbGF0
aW9ucyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnN0eWxlQWZmZWN0ZWRCeUVtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmRlc2NlbmRhbnRzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpjaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2hpbGRyZW5BZmZl
Y3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpkZXNjZW5kYW50c0FmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRlc2Nl
bmRhbnRzQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphZmZl
Y3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcgY29uc3QpOiBNb3ZlZCBoZXJl
IGZyb20gTm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFN0eWxlQWZmZWN0ZWRC
eUVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldERlc2NlbmRhbnRzQWZmZWN0
ZWRCeVByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRDaGls
ZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXREZXNjZW5kYW50c0FmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnNldERlc2NlbmRhbnRzQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldENoaWxkcmVuQWZmZWN0ZWRCeVByb3Bl
cnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFkanVzdFN0eWxlVmFs
aWRpdHkpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpz
dHlsZVZhbGlkaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnN0eWxlUmVzb2x1
dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Y2hpbGROZWVkc1N0eWxlUmVjYWxjIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIGNvbnN0KTogTW92ZWQgdG8gRWxlbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldENoaWxkTmVlZHNTdHlsZVJlY2FsYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpmbGFnQ2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1
bGVzRmxhZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpmbGFnQ2hpbGRyZW5B
ZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXNGbGFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6ZmxhZ1N0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5n
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Ok5vZGVTdHlsZUZsYWcpOiBBZGRl
ZC4gTW92ZWQgbW9zdCBvZiBmbGFncyBmcm9tIG1fbm9kZUZsYWdzIGhlcmUuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWcpOiBSZW5hbWVkIGZyb20gRWxl
bWVudFN0eWxlRmxhZy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OlN0eWxlQml0ZmllbGRzKTog
QWRkZWQuIEEgaGVscGVyIHN0cnVjdCB0byByZWFkIGFuZCBtYW5pcHVsYXRlCisgICAgICAgIGJp
dC1maWVsZHMgc3RvcmVkIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy4KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OlN0eWxlQml0ZmllbGRzOjpmcm9tUmF3KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpTdHlsZUJpdGZpZWxkczo6dG9SYXcpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OlN0eWxlQml0ZmllbGRzOjpzdHlsZVZhbGlkaXR5IGNvbnN0KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpTdHlsZUJpdGZpZWxkczo6c2V0U3R5bGVWYWxpZGl0
eSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6U3R5bGVCaXRmaWVsZHM6OmR5bmFt
aWNTdHlsZVJlbGF0aW9ucyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
U3R5bGVCaXRmaWVsZHM6OnNldER5bmFtaWNTdHlsZVJlbGF0aW9uKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpTdHlsZUJpdGZpZWxkczo6Y2xlYXJEeW5hbWljU3R5bGVSZWxhdGlv
bnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OlN0eWxlQml0ZmllbGRzOjpmbGFn
cyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6U3R5bGVCaXRmaWVsZHM6
OnNldEZsYWcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OlN0eWxlQml0ZmllbGRz
OjpjbGVhckZsYWcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OlN0eWxlQml0Zmll
bGRzOjpjbGVhckRlc2NlbmRhbnRzTmVlZFN0eWxlUmVzb2x1dGlvbik6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6c3R5bGVCaXRmaWVsZHMgY29uc3QpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNldFN0eWxlQml0ZmllbGRzKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpoYXNTdHlsZUZsYWcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
c2V0U3R5bGVGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyU3R5bGVGbGFncyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpoYXNEeW5hbWljU3R5bGVSZWxhdGlv
bkZsYWcgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEhhc1ZhbGlk
U3R5bGUpOiBNb3ZlZCBoZXJlIGZyb20gdGhlIGNsYXNzIGRlY2xhcmF0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0RHluYW1pY1N0eWxlUmVsYXRpb25GbGFnKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0SGFzVmFsaWRTdHlsZSk6CisKIDIwMjAtMDktMDEg
IEhlY3RvciBMb3BleiAgPGhlY3Rvcl9pX2xvcGV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI2NjQwOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmlu
ZGV4IDJmYWFiYWNiZWRjZjU0YmJlMDRjNGQ5ZjRhYWM5NzRhMTRjNWM5NGYuLmE4M2RhYmY3MTAx
OGI1NzVhZDViZmI4ZjJhNDZmYjQ5ODVkNGEzMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaApAQCAtNDcsOCArNDcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDaGlsZE5vZGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgYm9vbCBoYXNPbmVDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZCAmJiAhbV9maXJzdENoaWxkLT5uZXh0U2libGluZygp
OyB9CiAKLSAgICBib29sIGRpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0
dXJuIGdldEZsYWcoRGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVjYWxjRmxhZyk7IH0KLSAgICB2b2lk
IHNldERpcmVjdENoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHsgc2V0RmxhZyhEaXJlY3RDaGlsZE5l
ZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQorICAgIGJvb2wgZGlyZWN0Q2hpbGROZWVkc1N0eWxlUmVj
YWxjKCkgY29uc3QgeyByZXR1cm4gaGFzU3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkRpcmVjdENo
aWxkTmVlZHNTdHlsZVJlc29sdXRpb24pOyB9CisgICAgdm9pZCBzZXREaXJlY3RDaGlsZE5lZWRz
U3R5bGVSZWNhbGMoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpEaXJlY3RDaGlsZE5l
ZWRzU3R5bGVSZXNvbHV0aW9uKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY291
bnRDaGlsZE5vZGVzKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogdHJhdmVyc2VU
b0NoaWxkQXQodW5zaWduZWQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDcyMmRj
ZjRiZTdkMjY4MTlhMGM1NmY4M2Q1OWRmYTFmMDcyNGVlODEuLmU1MjQzODJkZmVhN2ZmNzdjZTI2
M2UzNWJkMWUzMjE2ZjJiNjYwYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQyNDksNyAr
NDI0OSw5IEBAIHZvaWQgRWxlbWVudDo6cmVzZXRDb21wdXRlZFN0eWxlKCkKIHZvaWQgRWxlbWVu
dDo6cmVzZXRTdHlsZVJlbGF0aW9ucygpCiB7CiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBjb2Rl
IG1vcmUgY29uc2lzdGVudC4KLSAgICBjbGVhclN0eWxlRmxhZ3MoKTsKKyAgICBhdXRvIGJpdGZp
ZWxkcyA9IHN0eWxlQml0ZmllbGRzKCk7CisgICAgYml0ZmllbGRzLmNsZWFyRHluYW1pY1N0eWxl
UmVsYXRpb25zKCk7CisgICAgc2V0U3R5bGVCaXRmaWVsZHMoYml0ZmllbGRzKTsKICAgICBpZiAo
IWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50UmFyZURhdGEoKS0+
cmVzZXRTdHlsZVJlbGF0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggMDk1ZDZmYWVkYTli
NGJhYTgzYTZmNWY0NzNlMThhY2Y0ODNiYWMyMS4uMzllZTBiOWJjMTEzOGEwMDg1ZGIyMzE2OTM3
NzUwZjgzYWZlNmY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0zNTMsMzEgKzM1MywzMiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1Zpc2libGVXaXRob3V0UmVzb2x2aW5nRnVsbFN0eWxlKCkgY29u
c3Q7CiAKICAgICAvLyBNZXRob2RzIGZvciBpbmRpY2F0aW5nIHRoZSBzdHlsZSBpcyBhZmZlY3Rl
ZCBieSBkeW5hbWljIHVwZGF0ZXMgKGUuZy4sIGNoaWxkcmVuIGNoYW5naW5nLCBvdXIgcG9zaXRp
b24gY2hhbmdpbmcgaW4gb3VyIHNpYmxpbmcgbGlzdCwgZXRjLikKLSAgICBib29sIHN0eWxlQWZm
ZWN0ZWRCeUVtcHR5KCkgY29uc3QgeyByZXR1cm4gaGFzU3R5bGVGbGFnKEVsZW1lbnRTdHlsZUZs
YWc6OlN0eWxlQWZmZWN0ZWRCeUVtcHR5KTsgfQotICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhEZXNjZW5kYW50c0Fm
ZmVjdGVkQnlQcmV2aW91c1NpYmxpbmdGbGFnKTsgfQotICAgIGJvb2wgY2hpbGRyZW5BZmZlY3Rl
ZEJ5Rmlyc3RDaGlsZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhDaGlsZHJlbkFmZmVj
dGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKTsgfQotICAgIGJvb2wgY2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKENoaWxkcmVuQWZmZWN0ZWRC
eUxhc3RDaGlsZFJ1bGVzRmxhZyk7IH0KLSAgICBib29sIGNoaWxkcmVuQWZmZWN0ZWRCeUZvcndh
cmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0
eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KLSAg
ICBib29sIGRlc2NlbmRhbnRzQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKSBjb25z
dCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6RGVzY2VuZGFudHNBZmZl
Y3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KLSAgICBib29sIGNoaWxkcmVuQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gaGFzU3R5bGVGbGFn
KEVsZW1lbnRTdHlsZUZsYWc6OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKTsgfQotICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6RGVz
Y2VuZGFudHNBZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9Ci0gICAgYm9vbCBj
aGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSBj
b25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIGJvb2wg
YWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhB
ZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUpOyB9CisgICAgYm9vbCBzdHlsZUFmZmVjdGVk
QnlFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0R5bmFtaWNTdHlsZVJlbGF0aW9uRmxhZyhEeW5h
bWljU3R5bGVSZWxhdGlvbkZsYWc6OlN0eWxlQWZmZWN0ZWRCeUVtcHR5KTsgfQorICAgIGJvb2wg
ZGVzY2VuZGFudHNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gaGFz
U3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OkRlc2NlbmRhbnRzQWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZyk7IH0KKyAgICBib29sIGNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMpOyB9CisgICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpDaGls
ZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7IH0KKyAgICBib29sIGNoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNEeW5hbWljU3R5
bGVSZWxhdGlvbkZsYWcoRHluYW1pY1N0eWxlUmVsYXRpb25GbGFnOjpDaGlsZHJlbkFmZmVjdGVk
QnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3Rl
ZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0R5bmFtaWNTdHls
ZVJlbGF0aW9uRmxhZyhEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc6OkRlc2NlbmRhbnRzQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMpOyB9CisgICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVk
QnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0R5bmFtaWNTdHls
ZVJlbGF0aW9uRmxhZyhEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc6OkNoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIGJvb2wgZGVzY2VuZGFudHNBZmZlY3Rl
ZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSBjb25zdCB7IHJldHVybiBoYXNEeW5hbWljU3R5
bGVSZWxhdGlvbkZsYWcoRHluYW1pY1N0eWxlUmVsYXRpb25GbGFnOjpEZXNjZW5kYW50c0FmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KKyAgICBib29sIGNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IGhhc0R5bmFtaWNTdHlsZVJlbGF0aW9uRmxhZyhEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc6OkNo
aWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0K
KyAgICBib29sIGFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5
bGUpOyB9CisgICAgYm9vbCBzdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpIGNvbnN0
IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpTdHlsZUlzQWZmZWN0ZWRCeVBy
ZXZpb3VzU2libGluZyk7IH0KICAgICB1bnNpZ25lZCBjaGlsZEluZGV4KCkgY29uc3QgeyByZXR1
cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhQ2hpbGRJbmRleCgpIDogMDsgfQogCiAgICAgYm9v
bCBoYXNGbGFnc1NldER1cmluZ1N0eWxpbmdPZkNoaWxkcmVuKCkgY29uc3Q7CiAKLSAgICB2b2lk
IHNldFN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgeyBzZXRTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxh
Zzo6U3R5bGVBZmZlY3RlZEJ5RW1wdHkpOyB9Ci0gICAgdm9pZCBzZXREZXNjZW5kYW50c0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKSB7IHNldEZsYWcoRGVzY2VuZGFudHNBZmZlY3RlZEJ5UHJl
dmlvdXNTaWJsaW5nRmxhZyk7IH0KLSAgICB2b2lkIHNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0
Q2hpbGRSdWxlcygpIHsgc2V0RmxhZyhDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNG
bGFnKTsgfQotICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKSB7
IHNldEZsYWcoQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXNGbGFnKTsgfQotICAgIHZv
aWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpIHsgc2V0U3R5
bGVGbGFnKEVsZW1lbnRTdHlsZUZsYWc6OkNoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMpOyB9Ci0gICAgdm9pZCBzZXREZXNjZW5kYW50c0FmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKCkgeyBzZXRTdHlsZUZsYWcoRWxlbWVudFN0eWxlRmxhZzo6RGVzY2VuZGFu
dHNBZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyk7IH0KLSAgICB2b2lkIHNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBzZXRTdHlsZUZsYWcoRWxl
bWVudFN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMp
OyB9Ci0gICAgdm9pZCBzZXREZXNjZW5kYW50c0FmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcygpIHsgc2V0U3R5bGVGbGFnKEVsZW1lbnRTdHlsZUZsYWc6OkRlc2NlbmRhbnRzQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBzZXRTdHlsZUZs
YWcoRWxlbWVudFN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQotICAgIHZvaWQgc2V0QWZmZWN0c05leHRTaWJsaW5nRWxl
bWVudFN0eWxlKCkgeyBzZXRGbGFnKEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSk7IH0K
LSAgICB2b2lkIHNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgeyBzZXRGbGFn
KFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQorICAgIHZvaWQgc2V0U3R5bGVB
ZmZlY3RlZEJ5RW1wdHkoKSB7IHNldER5bmFtaWNTdHlsZVJlbGF0aW9uRmxhZyhEeW5hbWljU3R5
bGVSZWxhdGlvbkZsYWc6OlN0eWxlQWZmZWN0ZWRCeUVtcHR5KTsgfQorICAgIHZvaWQgc2V0RGVz
Y2VuZGFudHNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkgeyBzZXRTdHlsZUZsYWcoTm9kZVN0
eWxlRmxhZzo6RGVzY2VuZGFudHNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQorICAgIHZv
aWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCkgeyBzZXRTdHlsZUZsYWco
Tm9kZVN0eWxlRmxhZzo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsgfQorICAg
IHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKSB7IHNldFN0eWxlRmxh
ZyhOb2RlU3R5bGVGbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyk7IH0KKyAg
ICB2b2lkIHNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNl
dER5bmFtaWNTdHlsZVJlbGF0aW9uRmxhZyhEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc6OkNoaWxk
cmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMpOyB9CisgICAgdm9pZCBzZXREZXNj
ZW5kYW50c0FmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBzZXREeW5hbWljU3R5
bGVSZWxhdGlvbkZsYWcoRHluYW1pY1N0eWxlUmVsYXRpb25GbGFnOjpEZXNjZW5kYW50c0FmZmVj
dGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldER5bmFtaWNTdHlsZVJlbGF0aW9u
RmxhZyhEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc6OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKTsgfQorICAgIHZvaWQgc2V0RGVzY2VuZGFudHNBZmZlY3RlZEJ5QmFj
a3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IHNldER5bmFtaWNTdHlsZVJlbGF0aW9uRmxhZyhEeW5h
bWljU3R5bGVSZWxhdGlvbkZsYWc6OkRlc2NlbmRhbnRzQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKTsgfQorICAgIHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNl
ZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBzZXREeW5hbWljU3R5bGVSZWxhdGlvbkZsYWco
RHluYW1pY1N0eWxlUmVsYXRpb25GbGFnOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2Vk
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOyB9CisgICAgdm9pZCBzZXRBZmZlY3RzTmV4dFNpYmxp
bmdFbGVtZW50U3R5bGUoKSB7IHNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFnOjpBZmZlY3RzTmV4
dFNpYmxpbmdFbGVtZW50U3R5bGUpOyB9CisgICAgdm9pZCBzZXRTdHlsZUlzQWZmZWN0ZWRCeVBy
ZXZpb3VzU2libGluZygpIHsgc2V0U3R5bGVGbGFnKE5vZGVTdHlsZUZsYWc6OlN0eWxlSXNBZmZl
Y3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQogICAgIHZvaWQgc2V0Q2hpbGRJbmRleCh1bnNpZ25l
ZCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBBdG9tU3RyaW5nIGNvbXB1dGVJbmhlcml0ZWRMYW5n
dWFnZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDE2ZWZhMGI1OWUwZTQxYjk2NTE1MzIz
M2JmNWVhMGQ5NTZiM2Q1NzcuLjI2YTM0NGE2YzEyMTRhZTA5NzViNzEwNjY5OTAyNGEzNWI5NjRk
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTgzNywxMSArODM3LDEyIEBAIHZvaWQgTm9kZTo6ZGVy
ZWZFdmVudFRhcmdldCgpCiB2b2lkIE5vZGU6OmFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZh
bGlkaXR5IHZhbGlkaXR5LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSBtb2RlKQogewogICAgIGlm
ICh2YWxpZGl0eSA+IHN0eWxlVmFsaWRpdHkoKSkgewotICAgICAgICBtX25vZGVGbGFncyAmPSB+
U3R5bGVWYWxpZGl0eU1hc2s7Ci0gICAgICAgIG1fbm9kZUZsYWdzIHw9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih2YWxpZGl0eSkgPDwgU3R5bGVWYWxpZGl0eVNoaWZ0OworICAgICAgICBhdXRvIGJp
dGZpZWxkcyA9IHN0eWxlQml0ZmllbGRzKCk7CisgICAgICAgIGJpdGZpZWxkcy5zZXRTdHlsZVZh
bGlkaXR5KHZhbGlkaXR5KTsKKyAgICAgICAgc2V0U3R5bGVCaXRmaWVsZHMoYml0ZmllbGRzKTsK
ICAgICB9CiAgICAgaWYgKG1vZGUgPT0gU3R5bGU6OkludmFsaWRhdGlvbk1vZGU6OlJlY29tcG9z
aXRlTGF5ZXIpCi0gICAgICAgIHNldEZsYWcoU3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3Np
dGVMYXllckZsYWcpOworICAgICAgICBzZXRTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6U3R5bGVS
ZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllcik7CiB9CiAKIGlubGluZSB2b2lkIE5vZGU6
OnVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxjKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDU0ZjlkZjE4
MGE0ZjZiZmI0YWY2N2U1NTM1Mjk5Mjc2MzFhM2Q3ZTQuLjFmNTVhYzM1YTFiN2M0Mzg0MTMzMDA2
YzJhYWU5NjdiMTliZTlhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNs
dWRlIDx3dGYvVVJMSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTI5NSwx
NCArMjk2LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW5SZW5kZXJlZERvY3VtZW50KCkgY29u
c3Q7CiAgICAgYm9vbCBuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gc3R5bGVWYWxp
ZGl0eSgpICE9IFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ7IH0KLSAgICBTdHlsZTo6VmFsaWRpdHkg
c3R5bGVWYWxpZGl0eSgpIGNvbnN0OwotICAgIGJvb2wgc3R5bGVSZXNvbHV0aW9uU2hvdWxkUmVj
b21wb3NpdGVMYXllcigpIGNvbnN0OwotICAgIGJvb2wgY2hpbGROZWVkc1N0eWxlUmVjYWxjKCkg
Y29uc3QgeyByZXR1cm4gZ2V0RmxhZyhDaGlsZE5lZWRzU3R5bGVSZWNhbGNGbGFnKTsgfQotICAg
IGJvb2wgc3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBn
ZXRGbGFnKFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsgfQorICAgIFN0eWxlOjpW
YWxpZGl0eSBzdHlsZVZhbGlkaXR5KCkgY29uc3QgeyByZXR1cm4gc3R5bGVCaXRmaWVsZHMoKS5z
dHlsZVZhbGlkaXR5KCk7IH0KKyAgICBib29sIHN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9z
aXRlTGF5ZXIoKSBjb25zdCB7IHJldHVybiBoYXNTdHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6U3R5
bGVSZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllcik7IH0KKyAgICBib29sIGNoaWxkTmVl
ZHNTdHlsZVJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIGhhc1N0eWxlRmxhZyhOb2RlU3R5bGVGbGFn
OjpEZXNjZW5kYW50TmVlZHNTdHlsZVJlc29sdXRpb24pOyB9CiAgICAgYm9vbCBpc0VkaXRpbmdU
ZXh0KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1RleHRGbGFnKSAmJiBnZXRGbGFnKElzRWRp
dGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnKTsgfQogCi0gICAgdm9pZCBzZXRD
aGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB7IHNldEZsYWcoQ2hpbGROZWVkc1N0eWxlUmVjYWxjRmxh
Zyk7IH0KLSAgICB2b2lkIGNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgeyBtX25vZGVGbGFn
cyAmPSB+KENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcgfCBEaXJlY3RDaGlsZE5lZWRzU3R5bGVS
ZWNhbGNGbGFnKTsgfQorICAgIHZvaWQgc2V0Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCkgeyBzZXRT
dHlsZUZsYWcoTm9kZVN0eWxlRmxhZzo6RGVzY2VuZGFudE5lZWRzU3R5bGVSZXNvbHV0aW9uKTsg
fQorICAgIHZvaWQgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgIHZvaWQgc2V0
SGFzVmFsaWRTdHlsZSgpOwogCkBAIC01MTEsMTEgKzUxMSw2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgaW50MzJfdCBmbGFnSXNMaW5rKCkgeyByZXR1cm4gSXNMaW5rRmxhZzsgfQogICAgIHN0YXRp
YyBpbnQzMl90IGZsYWdIYXNGb2N1c1dpdGhpbigpIHsgcmV0dXJuIEhhc0ZvY3VzV2l0aGluOyB9
CiAgICAgc3RhdGljIGludDMyX3QgZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IHJl
dHVybiBJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZzsgfQotICAgIHN0YXRpYyBpbnQzMl90
IGZsYWdDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXNGbGFnKCkgeyByZXR1cm4gQ2hp
bGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzRmxhZzsgfQotICAgIHN0YXRpYyBpbnQzMl90
IGZsYWdDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWcoKSB7IHJldHVybiBDaGls
ZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlc0ZsYWc7IH0KLQotICAgIHN0YXRpYyBpbnQzMl90
IGZsYWdBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSB7IHJldHVybiBBZmZlY3RzTmV4
dFNpYmxpbmdFbGVtZW50U3R5bGU7IH0KLSAgICBzdGF0aWMgaW50MzJfdCBmbGFnU3R5bGVJc0Fm
ZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBTdHlsZUlzQWZmZWN0ZWRCeVByZXZp
b3VzU2libGluZzsgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIHByb3RlY3RlZDoKQEAgLTUz
MiwxMiArNTI3LDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgSXNJblNoYWRvd1RyZWVGbGFnID0g
MSA8PCA5LAogICAgICAgICAvLyBVbnVzZWRGbGFnID0gMSA8PCAxMCwKICAgICAgICAgSGFzRXZl
bnRUYXJnZXREYXRhRmxhZyA9IDEgPDwgMTEsCisgICAgICAgIC8vIFVudXNlZEZsYWcgPSAxIDw8
IDEyLAorICAgICAgICAvLyBVbnVzZWRGbGFnID0gMSA8PCAxMywKIAogICAgICAgICAvLyBUaGVz
ZSBiaXRzIGFyZSB1c2VkIGJ5IGRlcml2ZWQgY2xhc3NlcywgcHVsbGVkIHVwIGhlcmUgc28gdGhl
eSBjYW4KICAgICAgICAgLy8gYmUgc3RvcmVkIGluIHRoZSBzYW1lIG1lbW9yeSB3b3JkIGFzIHRo
ZSBOb2RlIGJpdHMgYWJvdmUuCi0gICAgICAgIENoaWxkTmVlZHNTdHlsZVJlY2FsY0ZsYWcgPSAx
IDw8IDEyLCAvLyBDb250YWluZXJOb2RlCi0gICAgICAgIERpcmVjdENoaWxkTmVlZHNTdHlsZVJl
Y2FsY0ZsYWcgPSAxIDw8IDEzLAotCiAgICAgICAgIElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1
c3RvbUVsZW1lbnRGbGFnID0gMSA8PCAxNCwgLy8gVGV4dCBhbmQgRWxlbWVudAogICAgICAgICBJ
c0N1c3RvbUVsZW1lbnQgPSAxIDw8IDE1LCAvLyBFbGVtZW50CiAgICAgICAgIEhhc0ZvY3VzV2l0
aGluID0gMSA8PCAxNiwKQEAgLTU0NywyMCArNTQxLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBI
YXNTeW50aGV0aWNBdHRyQ2hpbGROb2Rlc0ZsYWcgPSAxIDw8IDIwLAogICAgICAgICBTZWxmT3JB
bmNlc3Rvckhhc0RpckF1dG9GbGFnID0gMSA8PCAyMSwKIAotICAgICAgICAvLyBUaGUgZm9sbG93
aW5nIGZsYWdzIGFyZSB1c2VkIGluIHN0eWxlIGludmFsaWRhdGlvbi4KLSAgICAgICAgU3R5bGVW
YWxpZGl0eVNoaWZ0ID0gMjIsCi0gICAgICAgIFN0eWxlVmFsaWRpdHlNYXNrID0gMyA8PCBTdHls
ZVZhbGlkaXR5U2hpZnQsCi0gICAgICAgIFN0eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRl
TGF5ZXJGbGFnID0gMSA8PCAyNCwKLQotICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENo
aWxkUnVsZXNGbGFnID0gMSA8PCAyNSwKLSAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXNGbGFnID0gMSA8PCAyNiwKLSAgICAgICAgLy8gVW51c2VkRmxhZyA9IDEgPDwgMjcs
Ci0KLSAgICAgICAgQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlID0gMSA8PCAyOCwKLSAg
ICAgICAgU3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcgPSAxIDw8IDI5LAotICAgICAg
ICBEZXNjZW5kYW50c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmdGbGFnID0gMSA8PCAzMCwKKyAg
ICAgICAgSGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzRmxhZyA9IDEgPDwgMjIsCiAKLSAg
ICAgICAgSGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzRmxhZyA9IDEgPDwgMzEsCisgICAg
ICAgIC8vIEJpdHMgMjMtMzEgYXJlIGZyZWUuCiAKICAgICAgICAgRGVmYXVsdE5vZGVGbGFncyA9
IElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnCiAgICAgfTsKQEAgLTU5Myw5ICs1NzYsMjAg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qgc19yZWZDb3VudElu
Y3JlbWVudCA9IDI7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBzX3JlZkNvdW50TWFz
ayA9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oMSk7CiAKLSAgICBlbnVtIGNsYXNzIEVsZW1lbnRT
dHlsZUZsYWcgOiB1aW50OF90IHsKKyAgICBlbnVtIGNsYXNzIE5vZGVTdHlsZUZsYWcgOiB1aW50
OF90IHsKKyAgICAgICAgRGVzY2VuZGFudE5lZWRzU3R5bGVSZXNvbHV0aW9uID0gMSA8PCAwLAor
ICAgICAgICBEaXJlY3RDaGlsZE5lZWRzU3R5bGVSZXNvbHV0aW9uID0gMSA8PCAxLAorICAgICAg
ICBTdHlsZVJlc29sdXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyID0gMSA8PCAyLAorCisgICAg
ICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyA9IDEgPDwgMywKKyAgICAgICAg
Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMgPSAxIDw8IDQsCisgICAgICAgIEFmZmVj
dHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSA9IDEgPDwgNSwKKyAgICAgICAgU3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcgPSAxIDw8IDYsCisgICAgICAgIERlc2NlbmRhbnRzQWZmZWN0
ZWRCeVByZXZpb3VzU2libGluZyA9IDEgPDwgNywKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBE
eW5hbWljU3R5bGVSZWxhdGlvbkZsYWcgOiB1aW50OF90IHsKICAgICAgICAgU3R5bGVBZmZlY3Rl
ZEJ5RW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAg
ICAgICAgLy8gQml0cyBmb3IgZHluYW1pYyBjaGlsZCBtYXRjaGluZy4KICAgICAgICAgLy8gV2Ug
b3B0aW1pemUgZm9yIDpmaXJzdC1jaGlsZCBhbmQgOmxhc3QtY2hpbGQuIFRoZSBvdGhlciBwb3Np
dGlvbmFsIGNoaWxkIHNlbGVjdG9ycyBsaWtlIG50aC1jaGlsZCBvcgogICAgICAgICAvLyAqLWNo
aWxkLW9mLXR5cGUsIHdlIHdpbGwganVzdCBnaXZlIHVwIGFuZCByZS1ldmFsdWF0ZSB3aGVuZXZl
ciBjaGlsZHJlbiBjaGFuZ2UgYXQgYWxsLgogICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzICAgICAgICAgICAgICAgID0gMSA8PCAxLApAQCAtNjA1LDkgKzU5
OSwzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyAgPSAxIDw8IDUsCiAgICAgfTsKIAotICAgIGJvb2wg
aGFzU3R5bGVGbGFnKEVsZW1lbnRTdHlsZUZsYWcgc3RhdGUpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXJXaXRoU3R5bGVGbGFncy50eXBlKCkgJiBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0ZSk7
IH0KLSAgICB2b2lkIHNldFN0eWxlRmxhZyhFbGVtZW50U3R5bGVGbGFnIHN0YXRlKSB7IG1fcmVu
ZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy50eXBl
KCkgfCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0ZSkpOyB9Ci0gICAgdm9pZCBjbGVhclN0eWxl
RmxhZ3MoKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKDApOyB9CisgICAgc3Ry
dWN0IFN0eWxlQml0ZmllbGRzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHlsZUJp
dGZpZWxkcyBmcm9tUmF3KHVpbnQxNl90IHBhY2tlZCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFN0
eWxlQml0ZmllbGRzPihwYWNrZWQpOyB9CisgICAgICAgIHVpbnQxNl90IHRvUmF3KCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHVpbnQxNl90PigqdGhpcyk7IH0KKworICAgICAgICBTdHlsZTo6VmFs
aWRpdHkgc3R5bGVWYWxpZGl0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlOjpW
YWxpZGl0eT4obV9zdHlsZVZhbGlkaXR5KTsgfQorICAgICAgICB2b2lkIHNldFN0eWxlVmFsaWRp
dHkoU3R5bGU6OlZhbGlkaXR5IHZhbGlkaXR5KSB7IG1fc3R5bGVWYWxpZGl0eSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHZhbGlkaXR5KTsgfQorCisgICAgICAgIE9wdGlvblNldDxEeW5hbWljU3R5
bGVSZWxhdGlvbkZsYWc+IGR5bmFtaWNTdHlsZVJlbGF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIE9w
dGlvblNldDxEeW5hbWljU3R5bGVSZWxhdGlvbkZsYWc+Ojpmcm9tUmF3KG1fZHluYW1pY1N0eWxl
UmVsYXRpb24pOyB9CisgICAgICAgIHZvaWQgc2V0RHluYW1pY1N0eWxlUmVsYXRpb24oRHluYW1p
Y1N0eWxlUmVsYXRpb25GbGFnIGZsYWcpIHsgbV9keW5hbWljU3R5bGVSZWxhdGlvbiA9IChkeW5h
bWljU3R5bGVSZWxhdGlvbnMoKSB8IGZsYWcpLnRvUmF3KCk7IH0KKyAgICAgICAgdm9pZCBjbGVh
ckR5bmFtaWNTdHlsZVJlbGF0aW9ucygpIHsgbV9keW5hbWljU3R5bGVSZWxhdGlvbiA9IDA7IH0K
KworICAgICAgICBPcHRpb25TZXQ8Tm9kZVN0eWxlRmxhZz4gZmxhZ3MoKSBjb25zdCB7IHJldHVy
biBPcHRpb25TZXQ8Tm9kZVN0eWxlRmxhZz46OmZyb21SYXcobV9mbGFncyk7IH0KKyAgICAgICAg
dm9pZCBzZXRGbGFnKE5vZGVTdHlsZUZsYWcgZmxhZykgeyBtX2ZsYWdzID0gKGZsYWdzKCkgfCBm
bGFnKS50b1JhdygpOyB9CisgICAgICAgIHZvaWQgY2xlYXJGbGFnKE5vZGVTdHlsZUZsYWcgZmxh
ZykgeyBtX2ZsYWdzID0gKGZsYWdzKCkgLSBmbGFnKS50b1JhdygpOyB9CisgICAgICAgIHZvaWQg
Y2xlYXJEZXNjZW5kYW50c05lZWRTdHlsZVJlc29sdXRpb24oKSB7IG1fZmxhZ3MgPSAoZmxhZ3Mo
KSAtIE5vZGVTdHlsZUZsYWc6OkRlc2NlbmRhbnROZWVkc1N0eWxlUmVzb2x1dGlvbiAtIE5vZGVT
dHlsZUZsYWc6OkRpcmVjdENoaWxkTmVlZHNTdHlsZVJlc29sdXRpb24pLnRvUmF3KCk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHVpbnQ4X3QgbV9zdHlsZVZhbGlkaXR5IDogMjsKKyAgICAg
ICAgdWludDhfdCBtX2R5bmFtaWNTdHlsZVJlbGF0aW9uIDogNjsKKyAgICAgICAgdWludDhfdCBt
X2ZsYWdzIDogODsKKyAgICB9OworCisgICAgU3R5bGVCaXRmaWVsZHMgc3R5bGVCaXRmaWVsZHMo
KSBjb25zdCB7IHJldHVybiBTdHlsZUJpdGZpZWxkczo6ZnJvbVJhdyhtX3JlbmRlcmVyV2l0aFN0
eWxlRmxhZ3MudHlwZSgpKTsgfQorICAgIHZvaWQgc2V0U3R5bGVCaXRmaWVsZHMoU3R5bGVCaXRm
aWVsZHMgYml0ZmllbGRzKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRUeXBlKGJpdGZp
ZWxkcy50b1JhdygpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXNTdHlsZUZsYWcoTm9k
ZVN0eWxlRmxhZyBmbGFnKSBjb25zdCB7IHJldHVybiBzdHlsZUJpdGZpZWxkcygpLmZsYWdzKCku
Y29udGFpbnMoZmxhZyk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0U3R5bGVGbGFnKE5v
ZGVTdHlsZUZsYWcpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXNEeW5hbWljU3R5bGVSZWxh
dGlvbkZsYWcoRHluYW1pY1N0eWxlUmVsYXRpb25GbGFnIGZsYWcpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlQml0ZmllbGRzKCkuZHluYW1pY1N0eWxlUmVsYXRpb25zKCkuY29udGFpbnMoZmxhZyk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RHluYW1pY1N0eWxlUmVsYXRpb25GbGFnKER5bmFt
aWNTdHlsZVJlbGF0aW9uRmxhZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mKSBjb25zdCB7IH0KIApAQCAtNjY3LDcgKzY4
Nyw3IEBAIHByaXZhdGU6CiAgICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51bGxwdHIgfTsK
ICAgICBOb2RlKiBtX3ByZXZpb3VzIHsgbnVsbHB0ciB9OwogICAgIE5vZGUqIG1fbmV4dCB7IG51
bGxwdHIgfTsKLSAgICBDb21wYWN0UG9pbnRlclR1cGxlPFJlbmRlck9iamVjdCosIHVpbnQ4X3Q+
IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFnczsKKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFJlbmRl
ck9iamVjdCosIHVpbnQxNl90PiBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3M7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE5vZGVSYXJlRGF0YSwgTm9kZVJhcmVEYXRhRGVsZXRlcj4gbV9yYXJlRGF0YTsK
IH07CiAKQEAgLTc5MSwyMCArODExLDMzIEBAIGlubGluZSBDb250YWluZXJOb2RlKiBOb2RlOjpw
YXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCkgY29uc3QKICAgICByZXR1cm4gcGFyZW50Tm9k
ZSgpOwogfQogCi1pbmxpbmUgU3R5bGU6OlZhbGlkaXR5IE5vZGU6OnN0eWxlVmFsaWRpdHkoKSBj
b25zdAorQUxXQVlTX0lOTElORSB2b2lkIE5vZGU6OnNldFN0eWxlRmxhZyhOb2RlU3R5bGVGbGFn
IGZsYWcpCit7CisgICAgYXV0byBiaXRmaWVsZHMgPSBzdHlsZUJpdGZpZWxkcygpOworICAgIGJp
dGZpZWxkcy5zZXRGbGFnKGZsYWcpOworICAgIHNldFN0eWxlQml0ZmllbGRzKGJpdGZpZWxkcyk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBOb2RlOjpzZXREeW5hbWljU3R5bGVSZWxhdGlvbkZs
YWcoRHluYW1pY1N0eWxlUmVsYXRpb25GbGFnIGZsYWcpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0eWxlOjpWYWxpZGl0eT4oKG1fbm9kZUZsYWdzICYgU3R5bGVWYWxpZGl0eU1hc2spID4+
IFN0eWxlVmFsaWRpdHlTaGlmdCk7CisgICAgYXV0byBiaXRmaWVsZHMgPSBzdHlsZUJpdGZpZWxk
cygpOworICAgIGJpdGZpZWxkcy5zZXREeW5hbWljU3R5bGVSZWxhdGlvbihmbGFnKTsKKyAgICBz
ZXRTdHlsZUJpdGZpZWxkcyhiaXRmaWVsZHMpOwogfQogCi1pbmxpbmUgYm9vbCBOb2RlOjpzdHls
ZVJlc29sdXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyKCkgY29uc3QKK2lubGluZSB2b2lkIE5v
ZGU6OmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCkKIHsKLSAgICByZXR1cm4gZ2V0RmxhZyhT
dHlsZVJlc29sdXRpb25TaG91bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyk7CisgICAgYXV0byBiaXRm
aWVsZHMgPSBzdHlsZUJpdGZpZWxkcygpOworICAgIGJpdGZpZWxkcy5jbGVhckRlc2NlbmRhbnRz
TmVlZFN0eWxlUmVzb2x1dGlvbigpOworICAgIHNldFN0eWxlQml0ZmllbGRzKGJpdGZpZWxkcyk7
CiB9CiAKIGlubGluZSB2b2lkIE5vZGU6OnNldEhhc1ZhbGlkU3R5bGUoKQogewotICAgIG1fbm9k
ZUZsYWdzICY9IH5TdHlsZVZhbGlkaXR5TWFzazsKLSAgICBjbGVhckZsYWcoU3R5bGVSZXNvbHV0
aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllckZsYWcpOworICAgIGF1dG8gYml0ZmllbGRzID0gc3R5
bGVCaXRmaWVsZHMoKTsKKyAgICBiaXRmaWVsZHMuc2V0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFs
aWRpdHk6OlZhbGlkKTsKKyAgICBiaXRmaWVsZHMuY2xlYXJGbGFnKE5vZGVTdHlsZUZsYWc6OlN0
eWxlUmVzb2x1dGlvblNob3VsZFJlY29tcG9zaXRlTGF5ZXIpOworICAgIHNldFN0eWxlQml0Zmll
bGRzKGJpdGZpZWxkcyk7CiB9CiAKIGlubGluZSB2b2lkIE5vZGU6OnNldFRyZWVTY29wZVJlY3Vy
c2l2ZWx5KFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQo=
</data>
<flag name="review"
          id="423209"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>